Slide 1

Slide 1 text

OpenTelemetry Observability 運用の実例 Findy Lunch LT OpenTelemetry を使ったトレースエグザンプラーの活用 ~ テレメトリー同士の関連付け ~ #OTel_findy 逆井(さかさい) @ k6s4i53rx

Slide 2

Slide 2 text

お前は誰だ? ー 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

Slide 3

Slide 3 text

オブザーバビリティを高める上で、 テレメトリー同士を関連付けて計測することも大切です。 今回は、OpenTelemetry を用いて "トレース" と "メトリクス" を関連付ける 方法についてデモを交えてサクッと紹介します(15 分!!) 本日の内容の要約 ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

イントロダクション ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー ● オブザーバビリティ? ○ 外部シグナルから推測されるシステムの状態を推論する能力 ● 何が嬉しいのか? ○ 例えば、障害モード時(デバッグの観点) ※ 低頻度でサービスの応答時間が長くなるメトリクスがあるケース 問題のあるメトリクスを検知 よりカーディナリティの高い (情報量の多い)関連するトレースにジャンプ 経験豊富なベテランメンバー (仙人) システムに 精通しきっていない メンバー (経験から) サービス A の 処理 B 辺りがくさいな トレースからボトルネックのサービス A 特定 スパンから処理 B で遅延しているか特定 コア分析 ループ (の一例) 直感ではなく 事実が起点 (第一原理からデバッグ) 参考:オブザーバビリティ・エンジニアリング Charity Majors, Liz Fong-Jones, and George Miranda

Slide 10

Slide 10 text

コア分析ループを回すために以下が重要な要素 ○ 回すために、情報量の高いテレメトリーを収集するための計装をサービスに行う ○ 素早く回すために、"テレメトリー同士の関連付け" をして計測する => 本 LT タイトルのモチベーション ※※※ 補足 第一原理からのデバッグや、コア分析ループについては、 オブザーバビリティエンジニアリング第8章で具体的に語られていて参考になります。 そのような環境においては "好奇心の強いエンジニアが最高のデバッガーになり得る" イントロダクション ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー

Slide 11

Slide 11 text

イントロダクション ー 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 & 遅延 ❶ ❷

Slide 12

Slide 12 text

イントロダクション ー 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 を使って、 どう メトリクスとトレースを関連付ける方法を紹介 します (メイン)

Slide 13

Slide 13 text

 メトリクスとトレースを、  トレースエグザンプラー を使って関連付ける  エグザンプラーとは? ● 英語では 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

Slide 14

Slide 14 text

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 関連付け

Slide 15

Slide 15 text

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 関連付け メトリクスをデバッグ出力すると、エグザンプラー にトレース情報が指標としてアノテートされる

Slide 16

Slide 16 text

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 関連付け メトリクスをデバッグ出力すると、エグザンプラー にトレース情報が指標としてアノテートされる 何が嬉しい...?

Slide 17

Slide 17 text

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 関連付け メトリクスをデバッグ出力すると、エグザンプラー にトレース情報が指標としてアノテートされる オブザーバビリティツールによっては、 エグザンプラーを使って メトリクスとトレース間を遷移できる ( = コア分析ループの加速 )

Slide 18

Slide 18 text

デモ(実際に関連付けて、どう使えるのか) ー 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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

エグザンプラーの参考文献 ー 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

Slide 23

Slide 23 text

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 ー 仮表紙

Slide 24

Slide 24 text

ー OpenTelemetry Observability 運用の実例 Findy Lunch LT ー 記載されている会社名、商品名、 またはサービス名は、各社の商標登録または商標です。