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
72
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.5k
(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
ProxyによるWindow間RPC機構の構築
syumai
3
1.1k
MCPでVibe Working。そして、結局はContext Eng(略)/ Working with Vibe on MCP And Context Eng
rkaga
5
2.1k
Microsoft Orleans, Daprのアクターモデルを使い効率的に開発、デプロイを行うためのSekibanの試行錯誤 / Sekiban: Exploring Efficient Development and Deployment with Microsoft Orleans and Dapr Actor Models
tomohisa
0
240
OSS開発者という働き方
andpad
5
1.7k
個人軟體時代
ethanhuang13
0
320
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
20
5.1k
Swift Updates - Learn Languages 2025
koher
2
460
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
satoshi256kbyte
4
150
Processing Gem ベースの、2D レトロゲームエンジンの開発
tokujiros
2
120
MCPとデザインシステムに立脚したデザインと実装の融合
yukukotani
4
1.4k
rage against annotate_predecessor
junk0612
0
160
ECS初心者の仲間 – TUIツール「e1s」の紹介
keidarcy
0
150
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
339
57k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.1k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
61k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Site-Speed That Sticks
csswizardry
10
810
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
30
9.6k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
53
2.9k
Navigating Team Friction
lara
189
15k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
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されたデータポイントが記録される • プロセスが途中で終了すると、次の送信タイミングに送信されるはずだったデータポイントは 送信されない! (多分バグ!)