Apollo Server 集成性能監控

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

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

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

使用 Docker 搭建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

參考

相關文章
相關標籤/搜索