Sending Metrics to Telemetry through OpenCensus & Python

Sending Metrics to Telemetry through OpenCensus & Python

0bafbcfcfb548a4ac20406692858f68b?s=128

Moriyoshi Koizumi

August 30, 2019
Tweet

Transcript

  1. OpenCensusを通じて Stackdriver Monitoringを Pythonから使う 2019/8/30 マジフェス

  2. Telemetryとは • アプリケーションの様々な文脈における挙動をアプリケーションの 外から「測定・解析」するしくみ • なぜ重要か? • 現代的なアプリケーション、とくにwebアプリケーションのアーキテクチャ は様々な文脈で切り取り可能な複数の層に渡っていて、それぞれの層におい て、多数のコンポーネントから構成されている

    • 文脈の例: • (ネットワークサービス) DB/ミドルウェア/アプリケーションサーバ • (アプリケーションサービス) マイクロサービスA/マイクロサービスB/マイクロサー ビスC • (コールグラフ) フレームワーク/FWミドルウェア/リクエストハンドラ/DBアクセッ サ • サービス品質の維持のためには、ログ監視のような「点」の観測では限界が ある。
  3. Telemetryに求められる要件 • コンポーネント横断的な計測可能性 • とくにマイクロサービスのような設計手法においては、ある目的を達 成するために、処理のパイプラインが複数のコンポーネントに横断的 に存在することが多い • 意味のある計測を行うためには、telemetryを行う側で関数、OSプロ セスなどを跨った計測結果を受け入れできるようにしなければならな

  4. Telemetryを構成する2つの概念 • Metrics • アプリケーションの動作状況を表す数値的な指標をある時間間隔で採 取し、健康状態やサービス品質の統計的に把握する。 • Tracing • アプリケーションの特定の文脈における挙動を時間の帯としてとらえ、

    稼働中のアプリケーションのボトルネックといった「面」に現れる問 題を把握する。
  5. Telemetryを構成する2つの概念 Metrics Read Data Convert Data Send JSON Response Merge

    Data Tracing Read Response Send JSON 1 User Request Session
  6. OpenCensusとは • Telemetryの概念群を実装するベンダー中立なライブラリ/フ レームワーク • 2018年にGoogleで開始され、その後Microsoftなどが参加 • 2019年4月にOpenTracingとの合流を発表し、CNCF傘下の OpenTelemetryプロジェクトとして活動を開始

  7. OpenCensusの構造 Stats Tracing Span View Measure View Measure View Measure

    Span Trace Trace Trace Trace Stats Exporter Tracing Exporter
  8. PythonでOpenCensusを使う • opencensus パッケージ • Exporterに依存しない部分 • opencensus-ext-xxxxxx • Exporterパッケージ

    (例: opencensus-ext-stackdriver) • 各フレームワーク・ライブラリ用のインテグレーション用パッケージ
  9. PythonでOpenCensus経由でmetricsを送る • 準備 • Measureをつくる • Viewをつくり、MeasureをViewに関連付ける • ViewをViewManagerに関連付ける •

    ExporterをViewManagerに関連付ける • 実行時にやること • StatsRecorderからMeasurementMapをつくる • MeasurementMap.record() を呼び出す
  10. Measureをつくる

  11. Viewをつくる

  12. Aggregationについて 送信側のaggregation処理 SumAggregation – 送信間隔の間に記録されたデータポイントの値が累積され、送信される CountAggregation – 送信間隔の間にデータポイントの記録があった回数が送信される LastValueAggregation –

    最後に送信されたデータポイントの値が記録される 受信側のaggregation Cumulative – 受信側で適宜alignment期間ごとに累積される (SumAggregationに対応) Gauge – 送信された値がそのまま表示される (CountAggregation, LastValueAggregation に対応) 送信間隔 時間
  13. ViewをViewManagerに紐づける • view_managerは opencensus.stats.stats._Stats クラスが持っている • モジュールグローバル変数 opencensus.stats.stats.stats に _Stats

    クラスのシングルトンオ ブジェクトが格納されている
  14. ExporterをViewManagerに紐づける

  15. StatsRecorderからMeasurementMapをつくる MeasurementMapにMeasureを書き出す • 送信タイミングになると自動的にそれまでにrecordされたデータポイントが記録される • プロセスが途中で終了すると、次の送信タイミングに送信されるはずだったデータポイントは 送信されない! (多分バグ!)