Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Sending Metrics to Telemetry through OpenCensus & Python

Sending Metrics to Telemetry through OpenCensus & Python

Moriyoshi Koizumi

August 30, 2019
Tweet

More Decks by Moriyoshi Koizumi

Other Decks in Programming

Transcript

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

    View full-size slide

  2. Telemetryとは
    • アプリケーションの様々な文脈における挙動をアプリケーションの
    外から「測定・解析」するしくみ
    • なぜ重要か?
    • 現代的なアプリケーション、とくにwebアプリケーションのアーキテクチャ
    は様々な文脈で切り取り可能な複数の層に渡っていて、それぞれの層におい
    て、多数のコンポーネントから構成されている
    • 文脈の例:
    • (ネットワークサービス) DB/ミドルウェア/アプリケーションサーバ
    • (アプリケーションサービス) マイクロサービスA/マイクロサービスB/マイクロサー
    ビスC
    • (コールグラフ) フレームワーク/FWミドルウェア/リクエストハンドラ/DBアクセッ

    • サービス品質の維持のためには、ログ監視のような「点」の観測では限界が
    ある。

    View full-size slide

  3. Telemetryに求められる要件
    • コンポーネント横断的な計測可能性
    • とくにマイクロサービスのような設計手法においては、ある目的を達
    成するために、処理のパイプラインが複数のコンポーネントに横断的
    に存在することが多い
    • 意味のある計測を行うためには、telemetryを行う側で関数、OSプロ
    セスなどを跨った計測結果を受け入れできるようにしなければならな

    View full-size slide

  4. Telemetryを構成する2つの概念
    • Metrics
    • アプリケーションの動作状況を表す数値的な指標をある時間間隔で採
    取し、健康状態やサービス品質の統計的に把握する。
    • Tracing
    • アプリケーションの特定の文脈における挙動を時間の帯としてとらえ、
    稼働中のアプリケーションのボトルネックといった「面」に現れる問
    題を把握する。

    View full-size slide

  5. Telemetryを構成する2つの概念
    Metrics
    Read Data Convert Data
    Send JSON Response
    Merge Data
    Tracing
    Read Response
    Send JSON
    1 User Request Session

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  8. PythonでOpenCensusを使う
    • opencensus パッケージ
    • Exporterに依存しない部分
    • opencensus-ext-xxxxxx
    • Exporterパッケージ (例: opencensus-ext-stackdriver)
    • 各フレームワーク・ライブラリ用のインテグレーション用パッケージ

    View full-size slide

  9. PythonでOpenCensus経由でmetricsを送る
    • 準備
    • Measureをつくる
    • Viewをつくり、MeasureをViewに関連付ける
    • ViewをViewManagerに関連付ける
    • ExporterをViewManagerに関連付ける
    • 実行時にやること
    • StatsRecorderからMeasurementMapをつくる
    • MeasurementMap.record() を呼び出す

    View full-size slide

  10. Measureをつくる

    View full-size slide

  11. Viewをつくる

    View full-size slide

  12. Aggregationについて
    送信側のaggregation処理
    SumAggregation – 送信間隔の間に記録されたデータポイントの値が累積され、送信される
    CountAggregation – 送信間隔の間にデータポイントの記録があった回数が送信される
    LastValueAggregation – 最後に送信されたデータポイントの値が記録される
    受信側のaggregation
    Cumulative – 受信側で適宜alignment期間ごとに累積される (SumAggregationに対応)
    Gauge – 送信された値がそのまま表示される (CountAggregation, LastValueAggregation に対応)
    送信間隔
    時間

    View full-size slide

  13. ViewをViewManagerに紐づける
    • view_managerは opencensus.stats.stats._Stats クラスが持っている
    • モジュールグローバル変数 opencensus.stats.stats.stats に _Stats クラスのシングルトンオ
    ブジェクトが格納されている

    View full-size slide

  14. ExporterをViewManagerに紐づける

    View full-size slide

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

    View full-size slide