Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
OpenTelemetry SpanProcessor を Let's カスタマイズ!
Search
Tomonori Hayashi / ぴーはや
May 16, 2025
Technology
450
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
780
ビジネス要望の翻訳が生む アーキテクチャの複雑性とトレードオフ
phaya72
2
610
設計に疎いエンジニアでも始めやすいアーキテクチャドキュメント
phaya72
34
23k
OpenTelemetry が拡げる Gemini CLI の可観測性
phaya72
3
3.7k
Pub/Sub vs Cloud Tasks - その違い、わかりますか?-
phaya72
3
570
非同期処理でも分散トレーシングしたい!- OpenTelemetry × Pub/Sub -
phaya72
2
1.1k
エラーバジェット枯渇の原因 - 偽陽性との戦い -
phaya72
2
240
Vertex AI Experimentsの実態 - コードを辿った先にあったもの -
phaya72
3
1.4k
オブザーバビリティと開発優先度との向き合い方
phaya72
5
1.1k
Other Decks in Technology
See All in Technology
自律型 AI をセキュアに実装!Gemini と MIG で作る動的コード実行環境
recruitengineers
PRO
1
220
OpenSharing について熱く語る〜AI アセットの共有について〜
kameitomohiro
0
230
SREでアラート疲れを 解決しよう!
kairim0
1
210
FinTech 1-2 : Overview of FinTech
ks91
PRO
0
150
データ品質を壊しながらSnowflakeのAIに分析させてみた
kawanago
0
520
AI駆動開発、viviONの1年 ── うまくいったこと・いかなかったこと
vivion
0
260
20260930_Gemma4_Hands-on
tsho
0
230
ミイダス株式会社 テックチームのご紹介 / MIIDAS Tech Team
miidas
0
160
Futexes the good, the bad, the ugly
ennael
PRO
0
130
ログラスのマルチプロダクトを 支える認証基盤 〜テナントごとに異なる統制とどう向き合うか〜
dada4386
3
400
使いこなすために知っておきたい Azure SRE Agent アンチパターン
torumakabe
2
400
私の推しは「聞いてから進む」AIです -AI-DLCに一人でアプリを作らせた話
yama3133
1
180
Featured
See All Featured
Game over? The fight for quality and originality in the time of robots
wayneb77
1
300
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.7k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
490
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
2
6.3k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
1
620
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Product Roadmaps are Hard
iamctodd
55
13k
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
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 をデプロイしなくてもコード上でカスタムできた → チーム状況によってコンポーネントを増やすことを避けたいケースもあるため、コードでやりくり できるのは選択肢として持っておいても良さそう まとめと学び