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
在瀏覽器打開 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/
使用以下語句查詢
query {
hello
}
點擊Find Traces
就能看到剛剛查詢的指標