Apollo Server 集成性能監控

Apollo Server開箱支持Apollo Engine,只是由於某些不可知的原因Apollo Engine的 API 在國內不可訪問(我是真不知道爲什麼這個 API 會被牆的),所以只能另外想辦法了.

Apollo Server本身有一個Apollo Tracing可以用於性能監控的擴展,通過擴展Apollo Tracing收集指標傳輸到分佈式跟蹤系統中.
另外有一個開源庫Apollo Opentracing可以收集指標,傳輸到Jaeger或者Zipkin中,通過JaegerZipkin實現性能監控和分析.

秉着方便,直接使用Apollo Opentracing.分佈式跟蹤系統使用Jaeger.

使用 Docker 搭建Jaeger

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
}

然後打開 http://localhost:16686

點擊Find Traces就能看到剛剛查詢的指標

參考

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章