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 & Python
Search
Moriyoshi Koizumi
August 30, 2019
Programming
1
56
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
4.9k
(Not Very) Practical Concurrent Design Patterns in Go
moriyoshi
2
4.9k
Hacking Go Compiler Internals
moriyoshi
0
70
Other Decks in Programming
See All in Programming
Kotlin/Androidでテスト駆動開発をはじめよう
hiroaki404
1
210
Web 開発における Deno Fresh の活用例:ペアプロタイマー timer.team の開発
lef237
1
610
Kotlin Collection関数をマスター
masayukisuda
0
2.7k
イベント駆動アーキテクチャ導入の手引きと共通の落とし穴 / Guide to Implementing Event-Driven Architecture and Common Pitfalls
nrslib
12
3.9k
有効な使い方を正しく理解して実装する PHP8.3の最新機能 / Proper understanding and implementation of effective usage Latest features in PHP 8.3
seike460
PRO
2
190
Ruby の型に関する活動をやっている話 / Activities related to Ruby types
euglena1215
3
130
C++ MIX #11 これどう読むの...?
5mingame2
0
190
ボトムアップではじめるFour Keys・SPACEを用いた開発プロセスの改善事例 〜開発生産性に向き合ってチームの成長を実感する〜
nomuson
1
240
いまどきの分析設計パターン10選
masuda220
PRO
30
10k
K2のKotlin IDEプラグインの中を覗いてみよう♪
yanex
0
1.9k
Adding Tests to Untestable Legacy Code
afilina
PRO
0
180
【Gemini本発売記念】npaka による マルチモーダルとローカルLLMの現在と未来
npaka
2
270
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
331
56k
BBQ
matthewcrist
80
8.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
13
1.1k
jQuery: Nuts, Bolts and Bling
dougneiner
60
7.3k
Infographics Made Easy
chrislema
238
18k
GitHub's CSS Performance
jonrohan
1025
450k
Building Effective Engineering Teams - LeadDev
addyosmani
41
2.1k
Testing 201, or: Great Expectations
jmmastey
32
6.8k
From Idea to $5000 a Month in 5 Months
shpigford
377
46k
Docker and Python
trallard
36
2.8k
Unsuck your backbone
ammeep
664
57k
What the flash - Photography Introduction
edds
64
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されたデータポイントが記録される • プロセスが途中で終了すると、次の送信タイミングに送信されるはずだったデータポイントは 送信されない! (多分バグ!)