Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OpenTelemetry を使ったトレースエグザンプラーの活用 / otel-trace-exemplar

OpenTelemetry を使ったトレースエグザンプラーの活用 / otel-trace-exemplar

findy さんのイベントの LT 資料です。 #OTel_findy
https://findy.connpass.com/event/313260/

逆井(さかさい)

April 09, 2024
Tweet

More Decks by 逆井(さかさい)

Other Decks in Technology

Transcript

  1. お前は誰だ? ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー 逆

    井 啓 佑 さかさい intro_po.yaml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Kind: バックエンドエンジニア と SRE Hobby: - スノーボード:バックカントリー、気になっています - ゴルフ:絶望的なカットスイング軌道を、       強烈なストロンググリップで相殺するスタイル - 最近、Otel への eBPF 活用 に強く技術的興味があります Community: - OpenTelemetry Meetup スタッフ - Google Cloud Champion Innovators コミュニティ 逆井(さかさい) @ k6s4i53rx
  2. アジェンダ ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー •

    イントロダクション • トレースエグザンプラーと OpenTelemetry • デモ(実際に関連付けて、どう使えるのか) • まとめ • 宣伝
  3. イントロダクション ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー •

    オブザーバビリティ? ◦ 外部シグナルから推測されるシステムの状態を推論する能力 入力 出力 システム ? 外部シグナル
  4. イントロダクション ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー •

    オブザーバビリティ? ◦ 外部シグナルから推測されるシステムの状態を推論する能力 • 何が嬉しいのか? ◦ 例えば、障害モード時(デバッグの観点) ※ 低頻度でサービスの応答時間が長くなるメトリクスがあるケース
  5. イントロダクション ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー •

    オブザーバビリティ? ◦ 外部シグナルから推測されるシステムの状態を推論する能力 • 何が嬉しいのか? ◦ 例えば、障害モード時(デバッグの観点) ※ 低頻度でサービスの応答時間が長くなるメトリクスがあるケース 経験豊富なベテランメンバー (仙人) (経験から) サービス A の 処理 B 辺りがくさいな
  6. イントロダクション ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー •

    オブザーバビリティ? ◦ 外部シグナルから推測されるシステムの状態を推論する能力 • 何が嬉しいのか? ◦ 例えば、障害モード時(デバッグの観点) ※ 低頻度でサービスの応答時間が長くなるメトリクスがあるケース 問題のあるメトリクスを検知 よりカーディナリティの高い (情報量の多い)関連するトレースにジャンプ 経験豊富なベテランメンバー (仙人) システムに 精通しきっていない メンバー (経験から) サービス A の 処理 B 辺りがくさいな トレースからボトルネックのサービス A 特定 スパンから処理 B で遅延しているか特定
  7. イントロダクション ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー •

    オブザーバビリティ? ◦ 外部シグナルから推測されるシステムの状態を推論する能力 • 何が嬉しいのか? ◦ 例えば、障害モード時(デバッグの観点) ※ 低頻度でサービスの応答時間が長くなるメトリクスがあるケース 問題のあるメトリクスを検知 よりカーディナリティの高い (情報量の多い)関連するトレースにジャンプ 経験豊富なベテランメンバー (仙人) システムに 精通しきっていない メンバー (経験から) サービス A の 処理 B 辺りがくさいな トレースからボトルネックのサービス A 特定 スパンから処理 B で遅延しているか特定 コア分析 ループ (の一例) 直感ではなく 事実が起点 (第一原理からデバッグ) 参考:オブザーバビリティ・エンジニアリング Charity Majors, Liz Fong-Jones, and George Miranda
  8. コア分析ループを回すために以下が重要な要素 ◦ 回すために、情報量の高いテレメトリーを収集するための計装をサービスに行う ◦ 素早く回すために、"テレメトリー同士の関連付け" をして計測する => 本 LT タイトルのモチベーション

    ※※※ 補足 第一原理からのデバッグや、コア分析ループについては、 オブザーバビリティエンジニアリング第8章で具体的に語られていて参考になります。 そのような環境においては "好奇心の強いエンジニアが最高のデバッガーになり得る" イントロダクション ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー
  9. イントロダクション ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー テレメトリー同士の関連付けにより、コア分析ループを回す一助となる

    ❶ エラーログから、関連するスパンを特定する ❷ 異常なメトリクス値から、原因となるトレースを特定する • オブザーバビリティ界隈でよく目にする "looking for a needle in a haystack" ( 膨大な情報から探しているものを目的を持って即座に見つける ) に通ずる ログ メトリクス ✔ Status OK ✔ Status OK ✔ Status OK ✔ Status OK ❌ ERROR トレース Trace Span A Span B Span C で ERROR & 遅延 ❶ ❷
  10. イントロダクション ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー テレメトリーの関連付けにより、コア分析ループを回す助けとなる

    ❶ エラーログから、関連するスパンを特定する ❷ 異常なメトリクス値から、原因となるトレースを特定する • オブザーバビリティ界隈でよく目にする "looking for a needle in a haystack" ( 膨大な情報から探しているものを目的を持って即座に見つける ) に通ずる ログ メトリクス ✔ Status OK ✔ Status OK ✔ Status OK ✔ Status OK ❌ ERROR トレース Trace Span A Span B Span C で ERROR & 遅延 ❶ ❷ ここからは OpenTelemetry を使って、 どう メトリクスとトレースを関連付ける方法を紹介 します (メイン)
  11.  メトリクスとトレースを、  トレースエグザンプラー を使って関連付ける  エグザンプラーとは? • 英語では Exemplar と表記 • 集約されたメトリクス(ヒストグラムや合計、平均、最小値、最大値)に付与情報として追加できる標本

    • 標本としてトレース ID を付与して、メトリクスとトレースを関連付ける ために使われることが多い => トレースエグザンプラーを、単にエグザンプラーと呼ぶことがしばしばある(以下、エグザンプラー) トレースエグザンプラーと OpenTelemetry ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー メトリクス Trace ID 参考:OpenTelemetry for Go + Cloud MonitoringでTrace Exemplarを使う (@ymotongpoo さん)    https://zenn.dev/google_cloud_jp/articles/20240305-trace-exemplar
  12. opentelemetry-go の v1.24 ( 2024/2 末 ) でエグザンプラーがサポート されたぞ! •

    現状 experimental なステータス • 仕様は Stable:https://opentelemetry.io/docs/specs/otel/metrics/data-model/#exemplars • 環境変数でエグザンプラーの設定を行う ◦ OTEL_GO_X_EXEMPLAR:エグザンプラーを有効化するか( true / false ) ◦ OTEL_METRICS_EXEMPLAR_FILTER:エグザンプラーの頻度( always_on / always_off / trace_based) • アプリを OpenTelemetry を用いてトレース計装とメトリクス計装を実装していれば使える トレースエグザンプラーと OpenTelemetry ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー Go アプリ ( otel-go >= v1.24 で計装 ) OTEL_GO_X_EXEMPLAR = true メトリクス トレース Trace ID 関連付け
  13. opentelemetry-go の v1.24 ( 2024/2 末 ) でエグザンプラーがサポート されたぞ •

    現状 experimental なステータス • 仕様は Stable:https://opentelemetry.io/docs/specs/otel/metrics/data-model/#exemplars • 環境変数でエグザンプラーの設定を行う ◦ OTEL_GO_X_EXEMPLAR:エグザンプラーを有効化するか( true / false ) ◦ OTEL_METRICS_EXEMPLAR_FILTER:エグザンプラーの頻度( always_on / always_off / trace_based) • アプリを OpenTelemetry を用いてトレース計装とメトリクス計装を実装していれば使える トレースエグザンプラーと OpenTelemetry ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー Go アプリ ( otel-go >= v1.24 で計装 ) OTEL_GO_X_EXEMPLAR = true メトリクス トレース Trace ID 関連付け メトリクスをデバッグ出力すると、エグザンプラー にトレース情報が指標としてアノテートされる
  14. opentelemetry-go の v1.24 ( 2024/2 末 ) でエグザンプラーがサポート されたぞ •

    現状 experimental なステータス • 仕様は Stable:https://opentelemetry.io/docs/specs/otel/metrics/data-model/#exemplars • 環境変数でエグザンプラーの設定を行う ◦ OTEL_GO_X_EXEMPLAR:エグザンプラーを有効化するか( true / false ) ◦ OTEL_METRICS_EXEMPLAR_FILTER:エグザンプラーの頻度( always_on / always_off / trace_based) • アプリを OpenTelemetry を用いてトレース計装とメトリクス計装を実装していれば使える トレースエグザンプラーと OpenTelemetry ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー Go アプリ ( otel-go >= v1.24 で計装 ) OTEL_GO_X_EXEMPLAR = true メトリクス トレース Trace ID 関連付け メトリクスをデバッグ出力すると、エグザンプラー にトレース情報が指標としてアノテートされる 何が嬉しい...?
  15. opentelemetry-go の v1.24 ( 2024/2 末 ) でエグザンプラーがサポート されたぞ •

    現状 experimental なステータス • 仕様は Stable:https://opentelemetry.io/docs/specs/otel/metrics/data-model/#exemplars • 環境変数でエグザンプラーの設定を行う ◦ OTEL_GO_X_EXEMPLAR:エグザンプラーを有効化するか( true / false ) ◦ OTEL_METRICS_EXEMPLAR_FILTER:エグザンプラーの頻度( always_on / always_off / trace_based) • アプリを OpenTelemetry を用いてトレース計装とメトリクス計装を実装していれば使える トレースエグザンプラーと OpenTelemetry ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー Go アプリ ( otel-go >= v1.24 で計装 ) OTEL_GO_X_EXEMPLAR = true メトリクス トレース Trace ID 関連付け メトリクスをデバッグ出力すると、エグザンプラー にトレース情報が指標としてアノテートされる オブザーバビリティツールによっては、 エグザンプラーを使って メトリクスとトレース間を遷移できる ( = コア分析ループの加速 )
  16. デモ(実際に関連付けて、どう使えるのか) ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー •

    デモでは、エグザンプラーをサポートしている以下のスタックを使って遷移を実施 ◦ Google Cloud Stack: Cloud Monitoring / Cloud Trace ※ 細かい仕様はドキュメント参考:https://cloud.google.com/stackdriver/docs/managed-prometheus/exemplars?hl=ja ◦ Grafana + Prometheus Stack: Prometheus / Grafana Tempo • デモは GitHub に公開してるので興味のある方は確認してください https://github.com/keisukesakasai/otel-findy-demo Go アプリ otel-go > v1.24 計装 Otel Collector メトリクス トレース Trace ID Cloud Trace Cloud Monitoring Grafana Tempo Web アプリ の応答時間を計測し メトリクスとして送信 Prometheus Grafana OTEL_GO_X_EXEMPLAR = true googlecloudexporter otlp remotewriteexporter
  17. デモ(実際に関連付けて、どう使えるのか) ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー Google

    Cloud Stack と、Grafana / Prometheus Stack を使って、 メトリクスとトレースの遷移をダッシュボード上で行えるデモを実施しました。 アップロード用に参考になるスクリーンショットを貼ります。
  18. デモ(実際に関連付けて、どう使えるのか) ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー Google

    Cloud Stack と、Grafana / Prometheus Stack を使って、 メトリクスとトレースの遷移をダッシュボード上で行えるデモを実施しました。 アップロード用に参考になるスクリーンショットを貼ります。
  19. まとめ ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー •

    エグザンプラーをご紹介 • エグザンプラーを活用して、 トレースとメトリクスを関連付ける方法を OpenTelemetry を用いて紹介 しました • テレメトリー同士を関連付けることで コア分析ループを素早く行い より オブザーバビリティを強化でき得る ことを紹介しました
  20. エグザンプラーの参考文献 ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー •

    OpenTelemetry for Go + Cloud MonitoringでTrace Exemplarを使う ( @ymotongpoo さん ) https://zenn.dev/google_cloud_jp/articles/20240305-trace-exemplar • Google Cloud Managed Service for Prometheusを使ってメトリクスとトレースを紐付け O11y 強化! ( @自分 ) https://zenn.dev/k6s4i53rx/articles/2023-advent-calendar-google-cloud • https://opentelemetry.io/docs/ • https://opentelemetry.io/docs/specs/otel/metrics/data-model/#exemplars
  21. xQL に関する本を技術書典16 ( 2024.05.25-2024.06.09 ) で出展します!  コア分析ループを回すために、知りたい情報の検索や分析をアドホックに行う xQL(PromQL, LogQL, TraceQL)。

     xQL も好奇心旺盛なデバッガーの最高の武器 になり得ます。  ◾ タイトル:xQL 完全ガイド(仮)  ◾ 表紙:(仮)  ◾ 内容:サンプルマイクロサービスと OSS オブザーバビリティスタック    構成で、xQL を使った分析やデバッグをハンズオン形式で実施(仮)  ◾サークル: ◦ 岡本 @ taisuke_bigbaby ◦ 川村 @ shukawam ◦ 藤井 @ ystkfuji ◦ 逆井 @ k6s4i53rx 絶賛執筆中! 宣伝 ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー 仮表紙