加入我们,于10月8日至10日在纽约市,了解关于 GraphQL Federation 和 API 平台工程的最新的技巧、趋势和新闻。加入我们,参加2024年纽约市的 GraphQL Summit
文档
免费开始

指标和日志记录

如何监控 Apollo Server 的性能


发送到需要一个企业版计划。如果你的组织目前没有一个企业版计划,可以免费申请企业试用版来测试此功能。

Apollo ServerApollo GraphOS 无缝集成,帮助您监控 GraphQL 操作的执行。此外,Apollo Server 还提供了一组可配置的机制来记录 GraphQL 操作的每个阶段。

使用联邦功能?请查看有关 联邦跟踪 的文档。

向 GraphOS 发送指标

Apollo GraphOS 提供了一个集成的中心点,用于所有 GraphQL 性能数据,您可以在 Apollo Studio 中查看。Studio 聚合和显示 您的架构、查询、请求和错误信息。您还可以配置支持 SlackDatadog 集成的警报。

连接到 GraphOS

要将 Apollo Server 连接到 GraphOS,首先 获取一个图 API 密钥。要将此密钥提供给 Apollo Server,将其分配给服务器环境中的 APOLLO_KEY 环境变量。APOLLO_KEY环境变量

然后,通过设置APOLLO_GRAPH_REF环境变量,将您的服务器实例与特定的图 ID 和图变体关联起来。

您可以在命令行上设置环境变量值,如下所示,也可以使用 dotenv npm 包(或其他类似工具)。

# Replace the example values below with values specific to your use case.
# This example associates your server with the `my-variant` variant of
# the `my-graph` graph.
$ APOLLO_KEY=YOUR_API_KEY APOLLO_GRAPH_REF=my-graph@my-variant \
node start-server.js

与工作室通信

默认情况下,Apollo Server每分钟将您的跟踪批量发送到工作室。这种行为可以高度自定义,您可以在使用报告插件配置中更改参数。

识别独立客户端

Apollo Studio的客户端识别功能使您能夠查看客户端不同版本的指标。要启用此功能,您的客户端需要在其发送给Apollo ServerGraphQL请求的标题中包含以下识别信息之一或全部:

标识符标题名称(默认)示例值
客户端名称apollographql-client-nameiOS原生
客户端版本apollographql-client-version1.0.1

这些可以有任何对您的应用程序有用的字符串值。为了简化在工作室中浏览和排序您的客户端数据,建议客户端版本使用三部分版本号(如1.0.1)。

客户端版本与您当前版本的绑定在(或任何其他客户端库)。您定义此值,并负责在客户端对重要更改后更新它。

在Apollo Client中设置客户端识别标题

如果您正在使用Apollo Client,您可以在ApolloClient 构造函数中设置客户端名称和版本的默认值。所有发送到Apollo Server的请求将自动将这些值包含在适当的标题中。

使用自定义标题

对于更高级的情况或要使用除默认标题之外的标题,请将generateClientInfo函数传递到使用报告插件

import { ApolloServer } from '@apollo/server';
import { ApolloServerPluginUsageReporting } from '@apollo/server/plugin/usageReporting';
const server = new ApolloServer({
typeDefs,
resolvers,
plugins: [
ApolloServerPluginUsageReporting({
generateClientInfo: ({ request }) => {
const headers = request.http && request.http.headers;
if (headers) {
return {
clientName: headers['apollographql-client-name'],
clientVersion: headers['apollographql-client-version'],
};
} else {
return {
clientName: 'Unknown Client',
clientVersion: 'Unversioned',
};
}
},
}),
],
});
const { url } = await startStandaloneServer(server);
console.log(`🚀 Server listening at: ${url}`);
import { ApolloServer } from '@apollo/server';
import { ApolloServerPluginUsageReporting } from '@apollo/server/plugin/usageReporting';
const server = new ApolloServer({
typeDefs,
resolvers,
plugins: [
ApolloServerPluginUsageReporting({
generateClientInfo: ({ request }) => {
const headers = request.http && request.http.headers;
if (headers) {
return {
clientName: headers['apollographql-client-name'],
clientVersion: headers['apollographql-client-version'],
};
} else {
return {
clientName: 'Unknown Client',
clientVersion: 'Unversioned',
};
}
},
}),
],
});
const { url } = await startStandaloneServer(server);
console.log(`🚀 Server listening at: ${url}`);

日志记录

您可以在 Apollo Server 中设置粒度详细的日志,方法是通过定义一个自定义插件。Apollo Server 插件允许您在 GraphQL 请求生命周期的各个阶段执行操作,例如当从客户端接收到 GraphQL 请求时。

以下示例定义了一个响应三个不同操作事件的插件。正如所示,您将这些定义的插件数组提供给ApolloServer构造函数。

有关可用的生命周期事件及其描述的列表,请参阅插件

const myPlugin = {
// Fires whenever a GraphQL request is received from a client.
async requestDidStart(requestContext) {
console.log('Request started! Query:\n' + requestContext.request.query);
return {
// Fires whenever Apollo Server will parse a GraphQL
// request to create its associated document AST.
async parsingDidStart(requestContext) {
console.log('Parsing started!');
},
// Fires whenever Apollo Server will validate a
// request's document AST against your GraphQL schema.
async validationDidStart(requestContext) {
console.log('Validation started!');
},
};
},
};
const server = new ApolloServer({
typeDefs,
resolvers,
plugins: [myPlugin],
});
const myPlugin = {
// Fires whenever a GraphQL request is received from a client.
async requestDidStart(requestContext) {
console.log('Request started! Query:\n' + requestContext.request.query);
return {
// Fires whenever Apollo Server will parse a GraphQL
// request to create its associated document AST.
async parsingDidStart(requestContext) {
console.log('Parsing started!');
},
// Fires whenever Apollo Server will validate a
// request's document AST against your GraphQL schema.
async validationDidStart(requestContext) {
console.log('Validation started!');
},
};
},
};
const server = new ApolloServer({
typeDefs,
resolvers,
plugins: [myPlugin],
});

OpenTelemetry 支持

请参阅OpenTelemetry 在 Apollo Server 中

上一页
Heroku
下一页
健康检查
评价文章评价在GitHub上编辑编辑论坛Discord

©2024Apollo Graph Inc.,即Apollo GraphQL。

隐私政策

公司