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のススメ / Getting started di...
Search
逆井(さかさい)
June 07, 2023
Technology
5.4k
8
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
分散トレーシングとOpenTelemetryのススメ / Getting started distributed tracing and OpenTelemetry
OCHaCafe Season7 の LT 資料です。
https://ochacafe.connpass.com/event/282817/
逆井(さかさい)
June 07, 2023
More Decks by 逆井(さかさい)
See All by 逆井(さかさい)
Google Cloud における Managed OTel Collector へのディープダイブ / deepdive-google-cloud-managed-otel-collector
k6s4i53rx
0
24
エージェントの振る舞いを読み解く! Vertex AI Agent Engine と OpenTelemetry によるオブザーバビリティの実現 / getting-started-vertex-ai-agent-engine-with-opentelemetry
k6s4i53rx
2
630
ピーク時165万スパン/秒に立ち向かえ! オブザーバビリティコストを効率化する ABEMA におけるトレースサンプリングの実践的事例 / practical-trace-sampling-with-datadog
k6s4i53rx
2
1.2k
Datadog LLM Observabilityで実現するLLMOps実践事例 / practical-llm-observability-with-datadog
k6s4i53rx
1
2.1k
Telemetry APIから学ぶGoogle Cloud ObservabilityとOpenTelemetryの現在 / getting-started-telemetry-api-with-google-cloud
k6s4i53rx
1
660
実践!Datadogで高める OCIのオブザーバビリティ / Observability in Action: Enhancing OCI with Datadog
k6s4i53rx
1
1k
Datadog APM におけるトレース収集の流れ及び Retention Filters のはなし / datadog-apm-trace-retention-filters
k6s4i53rx
0
2.5k
Main Session からの続編: OpenTelemetry のトピックいろいろ / opentelemetry-zero-code-go-opamp
k6s4i53rx
1
360
Kubernetes における OpenTelemetry 活用 ~ OTel Operator と otel-go-instrumentation をふんわり理解する編 ~ / getting-started-opentelemetry-operator-on-kubernetes
k6s4i53rx
1
1.4k
Other Decks in Technology
See All in Technology
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
3
260
【Claude Code】鹿野さんに聞く 私の推しの並行開発環境 大公開 / claude-code-parallel-2026-07-15
tonkotsuboy_com
12
8.2k
kintone の AI コワーカーを、 Anthropic にエージェントを"ホストさせて"作った話 #devkinmeetup
sugimomoto
0
110
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
2.8k
Road to SRE NEXTの今までとこれから
hiroyaonoe
0
350
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.4k
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
210
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
3.1k
Devsumi 2026 Summer 人もAIも使える共通基盤を事業の加速装置にする~デザインシステム運用に学ぶ組織レバレッジ~ 渡辺 凌央
legalontechnologies
PRO
0
160
Amazon EVS で VCF 9.0 / 9.1 のサポート開始まとめ
mtoyoda
0
300
地域 SRE コミュニティ最前線 / SRE NEXT 2026 Discussion Night Track C
muziyoshiz
0
230
世界、断片、モデル。そして理解
ardbeg1958
1
120
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
55k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
970
Code Reviewing Like a Champion
maltzj
528
40k
Code Review Best Practice
trishagee
74
20k
The Curse of the Amulet
leimatthew05
2
13k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.8k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.1k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
180
Transcript
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - 分散トレーシングとOpenTelemetryのススメ –
超入門編 – 逆井(さかさい) 啓佑 @k6s4i53rx #ochacafe
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - Who AM
I ?? 逆 井 啓 佑 さかさい intro_po.yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 belongs: "SIer" kind: "SRE 兼 バックエンドエンジニア " # Kubernetes 運用してます。アプデ祭 大変... metadata: "Season5 カオスエンジニアリング回 " # "その Pod 突然落ちても大丈夫ですか ??" twitter: @k6s4i53rx
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - 今日 15
分間ちょっとで話すこと 分散トレーシング はいいぞ! 複雑化されたサービス(MSA / Kubernetes 上サービス)において、 サービス間の関係性を把握したり、処理時間のボトルネックの原因特定が難しい → 分散トレーシングの概要を話します 実際やっていくとき は幾つか (そんなに大変じゃないけど) 考えることがあるぞ! ・計装 / バックエンド何にする / OTel Collector / UI は? ・トレースサンプリング戦略 OpenTelemetry はいいぞ! 分散トレーシングをするための標準化された計装ライブラリ → OpenTelemtry で分散トレーシングする方法、仕組み について解説します メイン
▪ 分散トレーシング の基礎知識(と用語) - 2023/06/07 Oracle Cloud Hangout Cafe #Season7
- 分散トレーシングはいいぞ A B E C D A B C D E 参考:https://www.jaegertracing.io/docs/1.45/architecture/ • トレース・・・・・リクエストの 一連の流れ を示す • スパン・・・・・・トレースの構成要素で、特定の処理 を示す • コンテキスト・・・トレースやスパンなど分散トレーシングする上で必要な情報 コンテキスト コンテキスト コンテキスト コンテキスト トレース
▪コンテキストの伝播 - 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - 分散トレーシングはいいぞ
参考:https://docs.lightstep.com/docs/understand-distributed-tracing トレースツリーを描画するためには、各スパンがコンテキストを伝播 する必要があります。 Trace ID:ABC Span ID:123 Parent SpanID:null Trace ID:ABC Span ID:456 Parent SpanID:123 Trace ID:ABC Span ID:789 Parent SpanID:123 Trace ID:ABC Span ID:890 Parent SpanID:789 トレース Trace ID:ABC トレース ID は固有 親 Span が同じ
<Header> Trace ID Span ID - 2023/06/07 Oracle Cloud Hangout
Cafe #Season7 - 分散トレーシングはいいぞ サービス間では HTTP ヘッダに格納された情報を使って、コンテキストを伝播させます。 HTTP ヘッダの情報を、Handler で Extract、Client で Inject します。 ▪ サービス間のコンテキストの伝播 Handler Client Span 生成... リクエスト リクエスト <Header> Trace ID Span ID Extract Inject 基本的に後述の計装ライブラリに含まれる Context Propagator で行う。 実装としては、W3C Context や B3、AWS X-Ray などが含まれる。
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - 分散トレーシングはいいぞ サンプルとして・・・
Tempo 想定より あるサービスの ある処理で遅い と "計測" できる with Tempo & Grafana
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - 分散トレーシングはいいぞ サンプルとして・・・
Tempo 想定より あるサービスの ある処理で遅い と "計測" できる with Tempo & Grafana 以上が 分散トレーシング の概要です。 便利そうだけど、なんか面倒臭そう・・・と思った方、 安心してください。 面倒ごとは丸っと 計装 ライブラリ がやってくれます。
計装ライブラリとしての "OpenTelemetry (OTel) ” • OpenTelemetry はテレメトリー送信の標準仕様を定めている CNCF プロジェクト -
2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ ログやトレース、メトリクスなどのモニタリングデータの総称 • 計装ライブラリ や OpenTelemetry Collector(後述)も提供 • 基本的にモニタリングツールが計装ライブラリや、エージェントは用意してくれてはいるが、 OTel を使うことでプロプライエタリを緩和できる Service Jaeger Tempo クラウド サービス 計装 Service Jaeger Tempo クラウド サービス 計装 ※ OTel 対応の場合に限るが、メジャーどころは対応している ※ Jaeger も自前の計装ライブラリは非推奨とし、OTel を推奨している ※ 機能劣後や、メンテナンス性も加味する必要あり
計装ライブラリとしての "OpenTelemetry (OTel) ” - 2023/06/07 Oracle Cloud Hangout Cafe
#Season7 - OpenTelemetry はいいぞ 🔥伝播 🔥送信 🔥生成 分散トレーシングの計装ライブラリ場合、 ◦ Span / Trace の 生成 ◦ コンテキスト 伝播 ◦ エクスポーターによるデータの 送信 などを簡単に実装することができる。
計装ライブラリとしての "OpenTelemetry (OTel) ” - 2023/06/07 Oracle Cloud Hangout Cafe
#Season7 - OpenTelemetry はいいぞ 🔥伝播 🔥送信 🔥生成 分散トレーシングの場合、 ◦ Span / Trace の 生成 ◦ コンテキスト 伝播 ◦ エクスポートの設定からデータの 送信 などを簡単に実装することができる。 OpenTelemetry を使って どのようにトレースの計装を行うのかイメージで解説します。 ※ コードベースではなく、ライブラリで使われるコンポーネントをベースで イメージできるようになることが目的
① OTel SDK のセットアップ • 各 MS で必要 ※ ほぼ同じ手続き
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ https://github.com/open-telemetry/opentelemetry-go/blob/main/example/otel-collector/main.go package main func initProvider() (func(context.Context) error, error) { …(略) return tracerProvider.Shutdown, nil } func main() { …(略) shutdown, err := initProvider() if err != nil { log.Fatal(err) } …(略) tracer := otel.Tracer("test-tracer") …(略) ctx, span := tracer.Start( ctx, "CollectorExporter-Example", trace.WithAttributes(commonAttrs...)) defer span.End() …(略) } OTel 計装の Example 引用 ② ① ② Span の生成 • Span 切りたいところでひたすら、 span := tracer.Start(...) defer span.End() するだけ!
① OTel SDK のセットアップ • 各 MS で必要 ※ ほぼ同じ手続き
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ https://github.com/open-telemetry/opentelemetry-go/blob/main/example/otel-collector/main.go package main func initProvider() (func(context.Context) error, error) { …(略) return tracerProvider.Shutdown, nil } func main() { …(略) shutdown, err := initProvider() if err != nil { log.Fatal(err) } …(略) tracer := otel.Tracer("test-tracer") …(略) ctx, span := tracer.Start( ctx, "CollectorExporter-Example", trace.WithAttributes(commonAttrs...)) defer span.End() …(略) } OTel 計装の Example 引用 ② ① ② Span の生成 • Span 切りたいところでひたすら、 span := tracer.Start(...) defer span.End() するだけ! 詳しく! 簡単なので 割愛!
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ
OTel SDK のセットアップの主要な登場人物 Trace Provider Sampler Span Processor Resource Exporter ※ icon はイメージとなります ※ Context Propager は省略
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ
Trace Provider Sampler Span Processor Resource Exporter 親玉 trace の属性 Span 処理する Span 送る Span をふるう OTel SDK のセットアップの主要な登場人物 (上位抽象概念)
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ
Trace Provider Sampler Span Processor Resource Exporter ▪ Resource:Trace の属性値を保持 • service.name (ex: shoppingcart) • service.instance.id (ex: pod 名) • service.version (ex: 1.0.0) • telemetry.sdk.name (otel) … などなどたくさんある OTel SDK のセットアップの主要な登場人物 参考として、 • Resource Semantic Conventions • GKE の 自動で Resource を入れてくれる OTel Collector の Processor Resource Detection Processor
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ
Trace Provider Sampler Span Processor Resource Exporter ▪ SpanProcessor:Span を処理するコンポーネント • BatchSpanPorcessor ◦ バッチとして Span をバックエンドに送信する • SimpleSpanProcessor ◦ 一個ずつバックエンドに送信する ※ 商用では非推奨 OTel SDK のセットアップの主要な登場人物
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ
Trace Provider Sampler Span Processor Resource Exporter ▪ Exporter:Span を送信するコンポーネント • WithEndpoint:送信先(デフォルトは "localhost:4317") 基本的な grpcOption を設定可能 ◦ WithInsecure() ◦ WithBlock() OTel SDK のセットアップの主要な登場人物 参考として、 K8s 上で Otel Collector (一応後述...) 宛だと、 "otel-collector.<namespace>.svc.cluster.local." 、 などとする(例えば)
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ
Trace Provider Sampler Span Processor Resource Exporter ▪ Sampler:Span をサンプリングするコンポーネント • AlwaysOn:全てのトレースをサンプリングする※ 商用非推奨 • AlwaysOff:全てのトレースをサンプリングしない • TraceIdRationBased:指定されたサンプリングレート • ParentBased:親スパンの設定に基づく OTel SDK のセットアップの主要な登場人物 後ほど詳説するが、 • Head based Sampling => AP レイヤーでのサンプリング • Tail based Sampling => OTel Collector に集約してからサンプリング といった、サンプリング方式があり、 ここでの Sampler は "Head based Sampling" のこと 参考:https://christina04.hatenablog.com/entry/opentelemetry-sampling
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ
Trace Provider(= tracer) Sampler Span Processor Resource Exporter これらのコンポーネントが TraceProvider(= tracer) に搭載される ① OTel SDK のセットアップ
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ
Trace Provider(= tracer) Sampler Span Processor Resource Exporter Span A Span B Span C tracer.Start("Span A") tracer.Start("Span B") tracer.Start("Span C") その tracer を使って、 Span を作れ(tracer.Start)ば良い ② Span の生成
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ
Trace Provider(= tracer) Sampler Span Processor Resource Exporter Span A Span B Span C tracer.Start("Span A") tracer.Start("Span B") tracer.Start("Span C") その tracer を使って、 Span を作れ(tracer.Start)ば良い ② Span の生成 ライブラリを使うことで 簡単にセットアップから計装できる!
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ
Trace Provider(= tracer) Sampler Span Processor Resource Exporter Span A Span B Span C tracer.Start("Span A") tracer.Start("Span B") tracer.Start("Span C") その tracer を使って、 Span を作れ(tracer.Start)ば良い ② Span の生成 https://github.com/open-telemetry/opentelemetry-go/blob/main/example/otel-collector/main.go package main func initProvider() (func(context.Context) error, error) { …(略) return tracerProvider.Shutdown, nil } func main() { …(略) shutdown, err := initProvider() if err != nil { log.Fatal(err) } …(略) tracer := otel.Tracer("test-tracer") …(略) ctx, span := tracer.Start( ctx, "CollectorExporter-Example", trace.WithAttributes(commonAttrs...)) defer span.End() …(略) } OTel 計装の Example 引用 ② ① この後 OTel 計装の Example コード読むと、 少し見通し良いと思うので、 気になる方は check してください。
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - OpenTelemetry はいいぞ
最終的に、バックエンドに Jaeger を繋ぐなどして... ※ 今回は1サービス内でのトレーシング Span Resource
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - 最後に、トレースサンプリング戦略について軽く 分散トレーシングする上で考えるべきことはいくつかあるが、
ここでは、トレースサンプリング戦略 について軽く触れて終わろうと思います。 参考:https://opentelemetry.io/docs/concepts/sampling/ この辺はほんと は不要では? 特に欲しいのは 一部の異常な トレースでは? ランダムで 欲しいトレース 収集できるの?
▪ Head based Sampling • アプリケーション側でサンプリングして、バックエンドに送信 • Sampler で述べた方式 ▪
Tail based Sampling • OpenTelemetry Collector にトレースを集約し処理することで High レイテンシやエラーがあるトレースを抽出 し、バックエンドに送信 (tail sampling processor) • 注意:トレースデータを全量送るためパフォーマンス影響は見る必要がある - 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - 最後に、トレースサンプリング戦略について軽く 理論はそうだが、 実践的できてないので、 運用ノウハウある方は ぜひ教えてください...
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - 最後に、トレースサンプリング戦略について軽く 時間の都合上、
OpenTelemetry でトレースがどう作られるかのイメージにフォーカス アプリへの計装 / OpenTelemetry Collector ついて詳しく知りたい場合は、 (手前味噌ですが)こちらの記事を参考にしてください... OpenTelemetry Collector は使用推奨されているので、OTel 使う上で知っておいて損はないと思います。 「OpenTelemetry」とは https://atmarkit.itmedia.co.jp/ait/articles/230 1/31/news011.html
- 2023/06/07 Oracle Cloud Hangout Cafe #Season7 - まとめ •
分散トレーシング・OpenTelemetry はいいぞ!! • Observability の文脈でよく聞きますが、トレースを見れば OK ではなく、 "ログやメトリクス、プロファイリングなどのテレメトリーを継続的に関連づけて蓄積し、 必要なときに必要な切り口(ディメンション)で分析できること"が重要 • 最後に、Kubernetes 上でも分散トレーシングは有益だよ!!
記載されている会社名、商品名、 またはサービス名は、各社の商標登録または商標です。 - 2023/06/07 Oracle Cloud Hangout Cafe #Season7 -