Apollo Server
开箱支持Apollo Engine
,只是由于某些不可知的原因Apollo Engine
的 API 在国内不可访问(我是真不知道为什么这个 API 会被墙的),所以只能另外想办法了.
Apollo Server
本身有一个Apollo Tracing
可以用于性能监控的扩展,通过扩展Apollo Tracing
收集指标传输到分布式跟踪系统中.
另外有一个开源库Apollo Opentracing
可以收集指标,传输到Jaeger
或者Zipkin
中,通过Jaeger
或Zipkin
实现性能监控和分析.
秉着方便,直接使用Apollo Opentracing
.分布式跟踪系统使用Jaeger
.
使用 Docker 搭建Jaeger
Jaeger 官方文档
在浏览器打开 http://localhost:16686 访问Jaeger
搭建Apollo Server
mkdir apollo-opentracing-democd apollo-opentracing-demoyarn init -yyarn add apollo-server
// index.jsconst { ApolloServer, gql } = require('apollo-server')const typeDefs = gql` type Query { hello: String }`const resolvers = { Query: { hello: () => 'world', },}const server = new ApolloServer({ typeDefs, resolvers,})server.listen().then(({ url }) => { console.log(`???? Server ready at ${url}`)})
运行
node index.js
集成Apollo Opentracing
yarn add apollo-opentracing jaeger-client
// tracer.jsconst { default: OpentracingExtension } = require('apollo-opentracing')const { initTracer } = require('jaeger-client')const config = { serviceName: 'apollo-opentracing-demo', sampler: { type: 'const', param: 1, }, reporter: { logSpans: true, collectorEndpoint: 'http://localhost:14268/api/traces', },}const options = { logger: { info(msg) { console.log('INFO ', msg) }, error(msg) { console.log('ERROR', msg) }, },}const tracer = initTracer(config, options)const opentracingExtension = () => { console.log(123) return new OpentracingExtension({ local: tracer, server: tracer, })}module.exports = { opentracingExtension,}
const { opentracingExtension } = require('./tracer.js') // 引入扩展...const server = new ApolloServer({ typeDefs, resolvers, extensions: [opentracingExtension], // 使用扩展})...
使用
用浏览器打开 http://localhost:4000/
使用以下语句查询
query { hello}
然后打开 http://localhost:16686
点击Find Traces
就能看到刚刚查询的指标
参考
- Performance Tracing for GraphQL with Apollo and it’s friends
- Apollo Opentracing
- Jaeger
- jaeger-client-node