Apollo Server
開箱支持Apollo Engine
,只是因爲某些不可知的緣由Apollo Engine
的 API 在國內不可訪問(我是真不知道爲何這個 API 會被牆的),因此只能另外想辦法了.node
Apollo Server
自己有一個Apollo Tracing
能夠用於性能監控的擴展,經過擴展Apollo Tracing
收集指標傳輸到分佈式跟蹤系統中.
另外有一個開源庫Apollo Opentracing
能夠收集指標,傳輸到Jaeger
或者Zipkin
中,經過Jaeger
或Zipkin
實現性能監控和分析.git
秉着方便,直接使用Apollo Opentracing
.分佈式跟蹤系統使用Jaeger
.github
Jaeger
Jaeger 官方文檔api
在瀏覽器打開 http://localhost:16686 訪問Jaeger
瀏覽器
Apollo Server
mkdir apollo-opentracing-demo cd apollo-opentracing-demo yarn init -y yarn add apollo-server
// index.js const { 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.js const { 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/性能
使用如下語句查詢ui
query { hello }
而後打開 http://localhost:16686url
點擊Find Traces
就能看到剛剛查詢的指標code