Apollo ServerとNowで作るGraphQLモックサーバ #4 モニタリング編

前回の続き。

nomusiclife.hatenablog.jp

作成したGraphQLサーバをモニタリング可能な状態にする。

Apollo Engine

Apollo Engine | The GraphQL Gateway with essential features like caching and performance tracing.

  • GraphQL caching
  • Query execution tracing
  • Error tracking
  • Trends

などの機能を備える

  • モニタリングしたいだけなのでcachingは今回使わない
  • アラートは有償版でのみ有効
  • 有償版は$99/mo~(割と高い)

導入

最初にGraphQLのスキーマをアップロードする

npm i -g apollo
apollo schema:publish --endpoint=<your graphql endpoint here> --key="<your key>"

次に、App Engineを利用するためのセットアップを行う

API Reference: apollo-server | Apollo Server

Provided the ENGINE_API_KEY environment variable is set, the engine reporting agent will be started automatically.

apollo-serverは環境変数 ENGINE_API_KEY がセットされていれば、 その値を使ってapollo-engineを有効化するようになっている。

環境変数.env に記述したものを nowの --dotenv オプションに渡してセットする。

ENGINE_API_KEY=service:foo-bar-baz:xxx...
$ now --dotenv=.env.production
$ now alias

確認

Usage Metrics

デプロイされた環境にアクセスし、Playgroundでいくつかクエリを実行した後、 Apollo Engineの "Metrics" の項目を見ると実行したクエリのログが確認できる。

  • リクエストの頻度
  • パフォーマンスの概要
  • エラー率

f:id:nishaya:20180904081654p:plain

クエリ名ごとにさらに詳細な情報を確認することもできる。

f:id:nishaya:20180904081742p:plain

Daily Report

Slack integrationを設定しておくとdaily reportでモニタリングのサマリを受け取ることもできる。

f:id:nishaya:20180904081807p:plain

Schema Explorer

Schema Explorerではschemaに含まれるtypeの一覧と、それぞれの使用状況を確認することができる。

f:id:nishaya:20180904081821p:plain

例えば、これを見るとPerson.addressは全く使われていないことがわかるので @deprecated にする、といった判断に使える。

Schema History

schemaの変遷を確認できる。 例えば、Person.addressを @deprecated に変更した場合、以下のように表示される。

f:id:nishaya:20180904081832p:plain

まとめ

  • 小一時間くらいあればここまで準備できる
  • あとはSchema足していってResolverをひたすら書く
    • とりあえずクライアントの動作を確認するためだけのモックサーバならmock書いていくだけでもOK
  • GraphQLのサーバ運用するのはそれなりに労力かかる(と聞く)が、モニタリングあればただ闇雲にやるよりはずっと安心