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
OpenTelemetryで分散型アプリケーション の処理フローを可視化する
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Hank Ehly
September 05, 2022
Technology
1.7k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OpenTelemetryで分散型アプリケーション の処理フローを可視化する
Hank Ehly
September 05, 2022
More Decks by Hank Ehly
See All by Hank Ehly
Fivetranでデータ移動を自動化する
hankehly
0
660
Celeryの紹介と本番運用のTips
hankehly
0
1.7k
ChatGPTを活用した 便利ツールの紹介
hankehly
1
1.4k
Efficient Energy Analytics with Airflow, Spark, and MLFlow
hankehly
0
400
Deferrable Operators入門
hankehly
0
760
【初心者/ハンズオン】Dockerコンテナの基礎知識
hankehly
0
600
Compositeパターン: オブジェクトの階層関係をエレガントに表現する方法
hankehly
0
350
10/29 Airflowの基礎を学ぶハンズオンワークショップ
hankehly
0
310
システム/データ品質保証のための Airflow 活用法
hankehly
0
680
Other Decks in Technology
See All in Technology
ZOZOTOWNの進化と信頼性を両立する負荷試験
zozotech
PRO
2
160
AI Driven AI Governance
pict3
0
400
関数型の考えを TypeScript に持ち込んで、テストしやすい純粋関数を増やす / Pure at the Core, Effects at the Edge: Bringing Functional Thinking into TypeScript
kaminashi
1
110
ソニー銀行におけるビジネスアジリティ向上のためのクラウドシフト戦略
srenext
0
230
Claude Codeとハーネスについて考えてみる
oikon48
19
9.4k
貴方はどのエンジニアリングを磨くのか
hatyibei
0
130
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
630
[2026-07-15] AI Ready なはずだったアーキテクチャと、見えてきた課題・次に目指す状態
wxyzzz
7
3.4k
Keeping applications secure by evolving OAuth 2.0 and OpenID Connect
ahus1
PRO
1
160
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
3
180
cccccc
moznion
0
1.9k
しぶいSRE: サーバから見えない障害にどう向き合うか。ラストワンマイルのデバッグ実践 / Shibui SRE
kanny
13
6.1k
Featured
See All Featured
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Faster Mobile Websites
deanohume
310
32k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
170
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
Music & Morning Musume
bryan
47
7.3k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
350
Crafting Experiences
bethany
1
210
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
290
New Earth Scene 8
popppiees
3
2.4k
Transcript
OpenTelemetryで分散型アプリケーション の処理フローを可視化する
• Hank Ehly (ハンク イーリー) • ENECHANGE株式会社 • qiita.com/hankehly •
github.com/hankehly • connpass.com/user/hankehly • New: Meety (カジュアル面談) 自己紹介
アジェンダ 1. オブザーバビリティとは 2. OpenTelemetryとは 3. トレースとは 4. Pythonアプリケーションの導入例
• 内部構造を知らなくても、外側から動き方が理解できる • 出会ったことがない問題でも、原因特定が容易にできる オブザーバビリティとは アプリケーションは、シグナルを出す必要がある 1. トレース 2. メトリクス
3. ログ これをインストルメンテーション と言います。 WHY IS THIS HAPPENING? エラー I see..
オブザーバビリティとは • 分散型アプリケーション(Lambda、Kubernetes、ECS、RDS…) • より速く、独立した形でアプリケーションを構築/リリース • 規模が大きくなると、処理の流れやサービスの関係の確認が難しくなる • デプロイ後のトラブル・緊急時に、スピードと情報の正確性が非常に重要 PostgreSQL
:5432 Ruby on Rails :3000 Nginx :8000 Airflow :8080 /mnt/data (ストレージ) 1インスタンスに全部 PostgreSQL Airflow Ruby on Rails /Nginx ストレージ 独立している
OpenTelemetryとは • アプリケーションコードをインスツルメンテーションする仕組みです。 • ベンダーに依存しない、標準化されたツールを提供する ◦ SDK(Python、Ruby、JavaScript、Go、Java、等々…) ◦ API(ルール定義) ◦
テレメトリーデータを受信、処理、出力するための「 Collector」バイナリー
OpenTelemetryとは ECS Cluster Lambda 1 分散型アプリケーション Lambda 2 DynamoDB
OpenTelemetryとは Collector ECS Cluster Lambda 1 分散型アプリケーション Lambda 2 収集/転送
DynamoDB
X-Ray OpenTelemetryとは Collector Datadog Prometheus Jaeger ECS Cluster Lambda 1
分散型アプリケーション Lambda 2 可視化/保存 収集/転送 DynamoDB
フォーム送信(ブラウザー) 時間 トレースとは POST /api/tasks GET /firebase/auth Task.objects.create (Python) INSERT
INTO tasks … (SQL) • 何が、どの順番で行われ、どのくらい時間かかったかが分かる • ボタン押下、HTTPリクエスト、Python関数実行、DBからレコード取得…
{ "name": "Example Trace", "context": { "trace_id": "0x5b8aa5a2d2c872e8321cf37308d69df2", "span_id": "0x5fb397be34d26b51",
}, "start_time": "2022-04-29T18:52:58.114304Z", "end_time": "2022-04-29T18:52:58.114435Z", "events": [ { "name": "フォーム送信(ブラウザー)", "timestamp": "2022-04-29T18:52:58.114561Z" }, { "name": "POST /api/tasks", "timestamp": "2022-04-29T18:53:00.012345Z" }, { "name": "GET /firebase/auth", "timestamp": "2022-04-29T18:53:01.012345Z" } ... 処理フロー
ウェブリクエスト 非同期的ジョブ実行 S3バケット一覧取得
実装は大変そう…
Auto Instrumentation (自動インストルメンテーション)
import os import sys def main(): os.environ.setdefault("DJANGO_SETTINGS_MODULE", "instrumentation_example.settings") try: from
django.core.management import execute_from_command_line except ImportError as exc: ...
import os import sys +from opentelemetry.instrumentation.django import DjangoInstrumentor def main():
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "instrumentation_example.settings") + DjangoInstrumentor().instrument() try: from django.core.management import execute_from_command_line except ImportError as exc: ... 自動インストルメンテーション (モンキーパッチ)
import os import sys +from opentelemetry.instrumentation.django import DjangoInstrumentor +from opentelemetry.instrumentation.botocore
import BotocoreInstrumentor def main(): os.environ.setdefault("DJANGO_SETTINGS_MODULE", "instrumentation_example.settings") + DjangoInstrumentor().instrument() + BotocoreInstrumentor().instrument() try: from django.core.management import execute_from_command_line except ImportError as exc: ...
import os import sys +from opentelemetry.instrumentation.django import DjangoInstrumentor +from opentelemetry.instrumentation.botocore
import BotocoreInstrumentor +from opentelemetry.instrumentation.redis import RedisInstrumentor def main(): os.environ.setdefault("DJANGO_SETTINGS_MODULE", "instrumentation_example.settings") + DjangoInstrumentor().instrument() + BotocoreInstrumentor().instrument() + RedisInstrumentor().instrument() try: from django.core.management import execute_from_command_line except ImportError as exc: ...
コンテキストのプロパゲーション trace_id=123 trace_id=123 trace_id=123 trace_id=123
ご清聴ありがとうございます! Jaeger OpenTelemetry X-Ray ADOT AWS Cloud Trace GCP OSS