Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Sending Metrics to Telemetry through OpenCensus...
Search
Moriyoshi Koizumi
August 30, 2019
Programming
1
69
Sending Metrics to Telemetry through OpenCensus & Python
Moriyoshi Koizumi
August 30, 2019
Tweet
Share
More Decks by Moriyoshi Koizumi
See All by Moriyoshi Koizumi
Detailing Python's Coroutine out of History
moriyoshi
9
2k
Hacking Go Compiler Internals - 2nd season
moriyoshi
5
5.3k
(Not Very) Practical Concurrent Design Patterns in Go
moriyoshi
2
5.1k
Hacking Go Compiler Internals
moriyoshi
0
93
Other Decks in Programming
See All in Programming
すべてのコンテキストを、 ユーザー価値に変える
applism118
2
450
なぜ「共通化」を考え、失敗を繰り返すのか
rinchoku
1
380
PHPで始める振る舞い駆動開発(Behaviour-Driven Development)
ohmori_yusuke
2
130
AIエージェントはこう育てる - GitHub Copilot Agentとチームの共進化サイクル
koboriakira
0
200
C++20 射影変換
faithandbrave
0
500
Go1.25からのGOMAXPROCS
kuro_kurorrr
1
780
イベントストーミングから始めるドメイン駆動設計
jgeem
4
870
Go Modules: From Basics to Beyond / Go Modulesの基本とその先へ
kuro_kurorrr
0
120
ASP.NETアプリケーションのモダナイズ インフラ編
tomokusaba
1
390
データベースコネクションプール(DBCP)の変遷と理解
fujikawa8
1
270
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
240
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
110
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
524
40k
BBQ
matthewcrist
89
9.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Making the Leap to Tech Lead
cromwellryan
134
9.3k
Optimising Largest Contentful Paint
csswizardry
37
3.3k
Site-Speed That Sticks
csswizardry
10
650
VelocityConf: Rendering Performance Case Studies
addyosmani
330
24k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
357
30k
Being A Developer After 40
akosma
90
590k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
920
The Art of Programming - Codeland 2020
erikaheidi
54
13k
Transcript
OpenCensusを通じて Stackdriver Monitoringを Pythonから使う 2019/8/30 マジフェス
Telemetryとは • アプリケーションの様々な文脈における挙動をアプリケーションの 外から「測定・解析」するしくみ • なぜ重要か? • 現代的なアプリケーション、とくにwebアプリケーションのアーキテクチャ は様々な文脈で切り取り可能な複数の層に渡っていて、それぞれの層におい て、多数のコンポーネントから構成されている
• 文脈の例: • (ネットワークサービス) DB/ミドルウェア/アプリケーションサーバ • (アプリケーションサービス) マイクロサービスA/マイクロサービスB/マイクロサー ビスC • (コールグラフ) フレームワーク/FWミドルウェア/リクエストハンドラ/DBアクセッ サ • サービス品質の維持のためには、ログ監視のような「点」の観測では限界が ある。
Telemetryに求められる要件 • コンポーネント横断的な計測可能性 • とくにマイクロサービスのような設計手法においては、ある目的を達 成するために、処理のパイプラインが複数のコンポーネントに横断的 に存在することが多い • 意味のある計測を行うためには、telemetryを行う側で関数、OSプロ セスなどを跨った計測結果を受け入れできるようにしなければならな
い
Telemetryを構成する2つの概念 • Metrics • アプリケーションの動作状況を表す数値的な指標をある時間間隔で採 取し、健康状態やサービス品質の統計的に把握する。 • Tracing • アプリケーションの特定の文脈における挙動を時間の帯としてとらえ、
稼働中のアプリケーションのボトルネックといった「面」に現れる問 題を把握する。
Telemetryを構成する2つの概念 Metrics Read Data Convert Data Send JSON Response Merge
Data Tracing Read Response Send JSON 1 User Request Session
OpenCensusとは • Telemetryの概念群を実装するベンダー中立なライブラリ/フ レームワーク • 2018年にGoogleで開始され、その後Microsoftなどが参加 • 2019年4月にOpenTracingとの合流を発表し、CNCF傘下の OpenTelemetryプロジェクトとして活動を開始
OpenCensusの構造 Stats Tracing Span View Measure View Measure View Measure
Span Trace Trace Trace Trace Stats Exporter Tracing Exporter
PythonでOpenCensusを使う • opencensus パッケージ • Exporterに依存しない部分 • opencensus-ext-xxxxxx • Exporterパッケージ
(例: opencensus-ext-stackdriver) • 各フレームワーク・ライブラリ用のインテグレーション用パッケージ
PythonでOpenCensus経由でmetricsを送る • 準備 • Measureをつくる • Viewをつくり、MeasureをViewに関連付ける • ViewをViewManagerに関連付ける •
ExporterをViewManagerに関連付ける • 実行時にやること • StatsRecorderからMeasurementMapをつくる • MeasurementMap.record() を呼び出す
Measureをつくる
Viewをつくる
Aggregationについて 送信側のaggregation処理 SumAggregation – 送信間隔の間に記録されたデータポイントの値が累積され、送信される CountAggregation – 送信間隔の間にデータポイントの記録があった回数が送信される LastValueAggregation –
最後に送信されたデータポイントの値が記録される 受信側のaggregation Cumulative – 受信側で適宜alignment期間ごとに累積される (SumAggregationに対応) Gauge – 送信された値がそのまま表示される (CountAggregation, LastValueAggregation に対応) 送信間隔 時間
ViewをViewManagerに紐づける • view_managerは opencensus.stats.stats._Stats クラスが持っている • モジュールグローバル変数 opencensus.stats.stats.stats に _Stats
クラスのシングルトンオ ブジェクトが格納されている
ExporterをViewManagerに紐づける
StatsRecorderからMeasurementMapをつくる MeasurementMapにMeasureを書き出す • 送信タイミングになると自動的にそれまでにrecordされたデータポイントが記録される • プロセスが途中で終了すると、次の送信タイミングに送信されるはずだったデータポイントは 送信されない! (多分バグ!)