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 SpanProcessor を Let's カスタマイズ!
Search
Tomonori Hayashi / ぴーはや
May 16, 2025
Technology
400
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OpenTelemetry SpanProcessor を Let's カスタマイズ!
Tomonori Hayashi / ぴーはや
May 16, 2025
More Decks by Tomonori Hayashi / ぴーはや
See All by Tomonori Hayashi / ぴーはや
BigQuery の Cross-cloud Lakehouse への歩み
phaya72
2
600
ビジネス要望の翻訳が生む アーキテクチャの複雑性とトレードオフ
phaya72
2
540
設計に疎いエンジニアでも始めやすいアーキテクチャドキュメント
phaya72
34
22k
OpenTelemetry が拡げる Gemini CLI の可観測性
phaya72
3
3.6k
Pub/Sub vs Cloud Tasks - その違い、わかりますか?-
phaya72
2
490
非同期処理でも分散トレーシングしたい!- OpenTelemetry × Pub/Sub -
phaya72
2
880
エラーバジェット枯渇の原因 - 偽陽性との戦い -
phaya72
2
210
Vertex AI Experimentsの実態 - コードを辿った先にあったもの -
phaya72
3
1.3k
オブザーバビリティと開発優先度との向き合い方
phaya72
5
1k
Other Decks in Technology
See All in Technology
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
3
220
製造業のクラウド活用最適解〜AI,DXを加速するデータ基盤の作り方〜
hamadakoji
0
410
AI駆動開発が変える、大規模開発の前提 ーHuman in the Loop から Human on the Loop へ / AIE2026
visional_engineering_and_design
28
19k
Oracle Cloud Infrastructure IaaS 新機能アップデート 2026/3 - 2026/5
oracle4engineer
PRO
1
220
AIを「創る」と「使う」の循環 — HRテックが実践するリアルなAI組織実装
taketo957
0
1.7k
LLMにもCAP定理があるという話
harukasakihara
0
140
「気づいたら仕事が終わっている」バクラクAIエージェント本番運用の裏側 / layerx-bakuraku-aie2026
yuya4
19
11k
「コーディング」しない人のための Claude Code 入門 ChatGPT の次の一歩 — 業務に組み込む 育成・共有・自動化
rfdnxbro
2
1.2k
関西に縁あるMicrosoft MVPsが語るCopilotの未来
kasada
0
1.2k
ChatworkとBPaaS 異なる特性で学んだAI機能開発の ベストプラクティス
kubell_hr
2
3.1k
MIERUNE JCT 発表資料「宇宙から伊能忠敬ごっこ」
syuchimu
0
190
Claude Code×Terraform IaC テンプレート駆動開発
itouhi
1
440
Featured
See All Featured
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Visualization
eitanlees
152
17k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
160
The Mindset for Success: Future Career Progression
greggifford
PRO
0
350
Claude Code のすすめ
schroneko
67
230k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
エンジニアに許された特別な時間の終わり
watany
107
250k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
My Coaching Mixtape
mlcsv
0
140
Abbi's Birthday
coloredviolet
2
8k
Transcript
OpenTelemetry SpanProcessor を Let’s カスタマイズ SRE Tech Talk #12 -
Tomonori Hayashi 1
Tomonori Hayashi • NTT コミュニケーションズ ◦ ソフトウェアエンジニア ▪ Front:TypeScript -
React/Next.js ▪ Infra:Google Cloud • Google Cloud Partner Top Engineer 2024 - 2025 • Google Cloud Tech Blog Challenge 2024 個人カテゴリ受賞 • Google Cloud All Certifications • コミュニティ ◦ Jagu’e’r (Google Cloud 公式ユーザーコミュニティ) ▪ Evangelist ▪ オブザーバビリティ分科会 Organizer • 興味がある方はぜひ Connpass グループにご参加ください! 2 @pHaya72 @t_hayashi
本日お話しすること • 想定以上にスパンが生成されてしまった罠について • OpenTelemetry Collector を使わなくてもスパンをカスタムできることについて
4 とある日に見つけたトレース 7000 以上のスパンが生成されてトレースに紐づいている・・・
5 きっかけは Cloud Run の制約 Cloud Run のリクエスト最大サイズの制約にハマった HTTP/1.1 50MB
Upload 引用:https://cloud.google.com/run/quotas?hl=ja
6 原因は FastAPI のライブラリ計装と Hypercorn 制約を回避するために HTTP/2 でリクエストを受けるように変更 HTTP/1.1 50MB
Upload HTTP/2 50MB Upload
7 原因は FastAPI のライブラリ計装と Hypercorn それぞれの性質から仮説をたてた HTTP/1.1 50MB Upload HTTP/2
50MB Upload 原因となりえる仮説 FastAPI のライブラリ計装は クライアント・サーバー間の通信が発生する度に スパンが生成される ASGI の イベントごとに スパンを生成
8 原因は FastAPI のライブラリ計装と Hypercorn それぞれの性質から仮説をたてた HTTP/1.1 50MB Upload HTTP/2
50MB Upload 原因となりえる仮説 FastAPI のライブラリ計装は クライアント・サーバー間の通信が発生する度に スパンが生成される Hypercorn はリクエストボディの受信 を粒度の細かいチャンクに分割 フレーム フレーム フレーム フレーム フレーム フレーム フレーム フレーム フレーム フレーム フレーム ライフサイクル イベントが発生 ASGI の イベントごとに スパンを生成
9 原因は FastAPI のライブラリ計装と Hypercorn それぞれの性質から仮説をたてた HTTP/1.1 50MB Upload HTTP/2
50MB Upload 原因となりえる仮説 FastAPI のライブラリ計装は クライアント・サーバー間の通信が発生する度に スパンが生成される Hypercorn はリクエストボディの受信 を粒度の細かいチャンクに分割 → 高頻度でスパン生成が行われてしまっていた フレーム フレーム フレーム フレーム フレーム フレーム フレーム フレーム フレーム フレーム フレーム ライフサイクル イベントが発生 ASGI の イベントごとに スパンを生成
10 Before :不要なスパンをフィルタリングしたい ローカルでは otel-tui で確認 課題発覚時は右図のように「 http receive」という サフィックスのつくスパンが大量に生成される
冒頭ではこのようなスパンが 7000 以上トレースに 紐づいてしまっていてデバッグしづらい状況に 特定サフィックスのつくスパン名のス パンを除外したい
11 OpenTelemetry Collector があれば・・ Processors で処理できそう 特定のスパンの除外などは Collector に任せればよさそう 一方で、Collector
のデプロイに悩んだ ・既存の Collector は GKE 上にあり公開していない → Cloud Run 上のアプリケーションから参照可能な 新たな Collector を用意する必要があった → 管理コンポーネントの増加や管理するリポジトリの検討な どいくつか面倒な問題が・・・ 今回はアプリから直送する形に!
12 After :SpanProcessor をカスタムすることで解決 OpenTelemetry-Python のコード on_start 関数 ・スパンが開始された時に呼び出されるメソッド ・注意点としてスパンを開始したスレッドで同期的に
呼び出されるために、処理をブロックするような実装は 避けるべきとのこと on_end 関数 ・スパンが終了した時に呼び出されるメソッド ・ReadableSpan 型のオブジェクトが終了したスパンとなっており、 スパンが終了した後は基本的に読み取り専用となっている on_end 関数で生成したスパンを処理する 引用:https://github.com/open-telemetry/opentelemetry-python/blob/main/opentelemetry-sdk/src/opentelemetry/sdk/trace/export/__init__.py
13 After :SpanProcessor をカスタムすることで解決 直送でも SpanProcessor のカスタムが可能 BatchSpanProcessor を継承した CustomSpaProcessor
を作成 特定のサフィックスがつくスパン名を除外するように on_end 関数をオーバーライドする
想定以上のスパン生成を経験 • FastAPI のライブラリ計装と Hypercorn の性質が合わさったコーナーケースにハマった → コードを見に行って事象を想像できたのは良い経験だった OpenTelemetry Collector
がなくてもスパン生成をカスタムできる • Collector をデプロイしなくてもコード上でカスタムできた → チーム状況によってコンポーネントを増やすことを避けたいケースもあるため、コードでやりくり できるのは選択肢として持っておいても良さそう まとめと学び