在Apollo Server配置中启用Opentelemetry插件,并确保所有GraphQL解析器和数据源都被包装在Opentelemetry跟踪中。以下是一个示例:
const { ApolloServer } = require('apollo-server');
const { registerInstrumentations } = require('@opentelemetry/instrumentation');
const { HttpInstrumentation } = require('@opentelemetry/instrumentation-http');
const { GraphQLInstrumentation } = require('@opentelemetry/instrumentation-graphql');
const { NodeTracerProvider } = require('@opentelemetry/node');
const tracerProvider = new NodeTracerProvider();
tracerProvider.register();
// Register HTTP and GraphQL instrumentations
registerInstrumentations({
instrumentations: [
new HttpInstrumentation(),
new GraphQLInstrumentation(),
],
});
// Update your Apollo Server instantiation to enable OpenTelemetry measurements
const server = new ApolloServer({
typeDefs,
resolvers,
plugins: [{
// We pass in our Apollo Server instance to provide context for the OpenTelemetry plugin.
async serverWillStart() {
await tracerProvider.propagateHeaders(() => server.executeOperation({}));
},
}],
});
server.listen().then(({ url }) => {
console.log(`� Server ready at ${url}`);
});