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
61
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
1.8k
Hacking Go Compiler Internals - 2nd season
moriyoshi
5
5.1k
(Not Very) Practical Concurrent Design Patterns in Go
moriyoshi
2
4.9k
Hacking Go Compiler Internals
moriyoshi
0
75
Other Decks in Programming
See All in Programming
Streams APIとTCPフロー制御 / Web Streams API and TCP flow control
tasshi
2
330
Why Spring Matters to Jakarta EE - and Vice Versa
ivargrimstad
0
1.3k
Identifying User Idenity
moro
6
8.9k
[PyCon Korea 2024 Keynote] 커뮤니티와 파이썬, 그리고 우리
beomi
0
120
デプロイを任されたので、教わった通りにデプロイしたら障害になった件 ~俺のやらかしを越えてゆけ~
techouse
52
33k
Snowflake x dbtで作るセキュアでアジャイルなデータ基盤
tsoshiro
2
460
開発効率向上のためのリファクタリングの一歩目の選択肢 ~コード分割~ / JJUG CCC 2024 Fall
ryounasso
0
390
Jakarta Concurrencyによる並行処理プログラミングの始め方 (JJUG CCC 2024 Fall)
tnagao7
1
260
Pinia Colada が実現するスマートな非同期処理
naokihaba
3
180
Importmapを使ったJavaScriptの 読み込みとブラウザアドオンの影響
swamp09
4
1.3k
C#/.NETのこれまでのふりかえり
tomokusaba
1
180
CSC509 Lecture 09
javiergs
PRO
0
130
Featured
See All Featured
Adopting Sorbet at Scale
ufuk
73
9k
Unsuck your backbone
ammeep
668
57k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
5
380
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Embracing the Ebb and Flow
colly
84
4.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
364
23k
Happy Clients
brianwarren
97
6.7k
Documentation Writing (for coders)
carmenintech
65
4.4k
Side Projects
sachag
452
42k
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されたデータポイントが記録される • プロセスが途中で終了すると、次の送信タイミングに送信されるはずだったデータポイントは 送信されない! (多分バグ!)