
数か月前、GoogleがOpenCensusを発表しました。テレメトリとトレース収集のためのベンダーニュートラルなオープンソースライブラリです。OpenCensusを使えば、アプリからのメトリクス収集や、リクエストの進行状況のトレースを手軽に行えます。
多くの場合、データを収集する処理と、それをトレーシング/モニタリング基盤へエクスポートする処理は明確に分かれています。プロジェクトでOpenCensusを使い始め、トレースしたいメトリクスやモニタリングしたい指標が見えてきたあとも、メトリクス収集ロジックには一切手を加えることなく、別のモニタリング基盤に切り替えたり、複数の基盤を同時に使ったりできます。
私たちDoiT Internationalでは現在、イベント分析パイプラインのリファレンスアーキテクチャとその実装を開発中です(まだ作業中ですが、こちらから先行プレビューをご覧いただけます)。
APIはGoで実装しており、システムの稼働状況や、独自に公開したいカスタムメトリクスをユーザーが把握できるようにしたいと考えていました。かつては、まずモニタリング基盤を選定する必要があり、後から別のものに乗り換えるとなると相応の時間(とコスト)がかかったものです。しかし、オープンソースのシステムを開発する場合、どこにどう展開され、どのようにモニタリングされるかを事前に決めきれないこともあります。そんなときはどうすればよいのでしょうか。
OpenCensusなら、事前にほとんど何も決め打ちする必要がありません。モニタリング基盤の選択が密結合になっておらず、複数のモニタリングやメトリクス収集の仕組みを併用することもできます。
選択したモニタリング基盤にメトリクスを公開するには、新しい_exporter_を作成して登録するだけで済みます。
https://gist.github.com/avivl/15fd071ca0212838aebec2e45430eb1c
メトリクスの作成もとても簡単で、種類と表示方法を決めるだけです。
https://gist.github.com/avivl/32ed40cbbfb8bbc07e3b3ae07a161251
あとはメトリクスを収集するだけ。_Record_メソッドを呼び出して必要なデータを渡せば完了です。
https://gist.github.com/avivl/f49969508a846fbf0abd1a7a37825c52
以下のチャートのとおり、メトリクスはPrometheusとStackdriverの両方にエクスポートされ、それぞれの基盤上で可視化されます。
Prometheus・Grafanaのダッシュボード
Stackdriverのダッシュボード
他の記事もぜひご覧ください。ブログをチェックするか、AvivのTwitterをフォローしてみてください。