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

OTelCol_TailSampling_and_SpanMetrics

gumamon
November 13, 2024

 OTelCol_TailSampling_and_SpanMetrics

OpenTelemetry Meetup 2024-11
https://opentelemetry.connpass.com/event/335274/

OTel Collector (多段構成)で TailsamplingとSpanMetricsを両立させる
@gumamon33

gumamon

November 13, 2024
Tweet

Other Decks in Technology

Transcript

  1. アジェンダ • 自己紹介 • OTel Collectorの概要 • 課題(Traceの一部収集 and Metricsの全収集)

    • 課題解消の難しさ • 課題解消の一例(多段構成アプローチ) • まとめ 2
  2. アジェンダ • 自己紹介 • OTel Collectorの概要 • 課題(Traceの一部収集 and Metricsの全収集)

    • 課題解消の難しさ • 課題解消の一例(多段構成アプローチ) • まとめ 3
  3. 5

  4. 6

  5. 7

  6. アジェンダ • 自己紹介 • OTel Collectorの概要 • 課題(Traceの一部収集 and Metricsの全収集)

    • 課題解消の難しさ • 課題解消の一例(多段構成アプローチ) • まとめ 10
  7. OTel Collectorの概要 OpenTelemetry Collector ディストリビューションについて 本日紹介するコンポーネントの多くは Contribution Distro です。 Collectorの公式ディストリビューションですが、

    3rdパーティ製のコンポーネントを多く含む為、セキュリ ティの観点から必要なコンポーネントのみでビルドすることが推奨されています。 また、安定性レベルが α以下のコンポーネントも多くありますので、 利用される際には各々自己責任でお願い致します。 15
  8. アジェンダ • 自己紹介 • OTel Collectorの概要 • 課題(Traceの一部収集 and Metricsの全収集)

    • 課題解消の難しさ • 課題解消の一例(多段構成アプローチ) • まとめ 16
  9. 課題 Traceをデータソースとした可観測性の向上 • Trace ◦ 全て収集しようとすると膨大な量 ◦ 実際に見たいのは エラー または

    応答遅延のみ → 問題のある Traceのみが欲しい (一部収集) • Metrics (from Trace) ◦ 各APIへのリクエストのエラー率、応答速度の95%ile などが見たい →全てのTraceを元に計算した Metricsが欲しい(全部収集) 17
  10. アジェンダ • 自己紹介 • OTel Collectorの概要 • 課題(Traceの一部収集 and Metricsの全収集)

    • 課題解消の難しさ • 課題解消の一例(多段構成アプローチ) • まとめ 21
  11. 課題解消の難しさ Traceをデータソースとした可観測性の向上 課題 (再掲) • Trace ◦ 全て収集しようとすると膨大な量 ◦ 実際に見たいのは

    エラー または 応答遅延のみ → 問題のある Traceのみが欲しい (一部収集) • Metrics (from Trace) ◦ 各APIへのリクエストのエラー率、応答速度の95%ile などが見たい →全てのTraceを元に計算した Metricsが欲しい(全収集) 22
  12. 課題解消の難しさ > Trace Traceをデータソースとした可観測性の向上 課題 > Trace • Trace ◦

    全て収集しようとすると膨大な量 ◦ 実際に見たいのは エラー または 応答遅延のみ → 問題のある Traceのみが欲しい (一部収集) Tail Sampling Processor 23
  13. 課題解消の難しさ > Trace Tail Sampling Processor • Contribution Distro •

    一連のポリシーに基づいてサンプリング • ポリシーの一例 ◦ status_code != OK (異常なWeb応答) ◦ latency > 1s (遅延したWeb応答) TailSampling 24
  14. 課題解消の難しさ > Trace Tail Sampling Processor • Contribution Distro •

    一連のポリシーに基づいてサンプリング • ポリシーの一例 ◦ status_code != OK (異常なWeb応答) ◦ latency > 1s (遅延したWeb応答) 各Traceと、それに紐づくスパンが全て揃わなければ知り得ない情報 各Traceは、同じTailSamplingProcessorに集約しなければならない TailSampling 25
  15. 課題解消の難しさ > Trace Tail Sampling Processor • Contribution Distro •

    一連のポリシーに基づいてサンプリング • ポリシーの一例 ◦ status_code != OK (異常なWeb応答) ◦ latency > 1s (遅延したWeb応答) ⇐こういうトレースを考える 26
  16. 課題解消の難しさ > Trace Tail Sampling Processor • Contribution Distro •

    一連のポリシーに基づいてサンプリング • ポリシーの一例 ◦ status_code != OK (異常なWeb応答) ◦ latency > 1s (遅延したWeb応答) ⇐こういう構成も考える 27
  17. 課題解消の難しさ > Trace Tail Sampling Processor • Contribution Distro •

    一連のポリシーに基づいてサンプリング • ポリシーの一例 ◦ status_code != OK (異常なWeb応答) ◦ latency > 1s (遅延したWeb応答) OTelCollectorで分散して受けようとすると、送信先の OTelCollectorに よってはOK/ERRORを誤認してしまう。 スケーラビリティ ←→ サンプリングのトレードオフ 28
  18. 課題解消の難しさ Traceをデータソースとした可観測性の向上 課題 (再掲) • Trace ◦ 全て収集しようとすると膨大な量 ◦ 実際に見たいのは

    エラー または 応答遅延のみ → 問題のある Traceのみが欲しい (一部収集) • Metrics (from Trace) ◦ 各APIへのリクエストのエラー率、応答速度の95%ile などが見たい →全てのTraceを元に計算した Metricsが欲しい(全収集) 29
  19. 課題解消の難しさ > Metrics Traceをデータソースとした可観測性の向上 課題 > Trace • Metrics (from

    Trace) ◦ 各APIへのリクエストのエラー率、応答速度の95%ile などが見たい →全てのTraceを元に計算した Metricsが欲しい(全収集) Span Metrics Connector 30
  20. 課題解消の難しさ > Metrics Span Metrics Connector • Contribution Distro •

    スパンからメトリクスを集計する • メトリクスの活用例 ◦ 各WEB APIの応答時間の分布を可視化する ◦ 各WEB APIのエラー率を算出する SpanMetrics 31
  21. 課題解消の難しさ > Metrics Span Metrics Connector • Contribution Distro •

    スパンからメトリクスを集計する • メトリクスの活用例 ◦ 各WEB APIの応答時間の分布を可視化する ◦ 各WEB APIのエラー率を算出する だが、Traceのパイプラインには ProcesserにTailsamplingがいたはずだ・・・ TailSampling SpanMetrics 32
  22. 課題解消の難しさ > Metrics Span Metrics Connector • Contribution Distro •

    スパンからメトリクスを集計する • メトリクスの活用例 ◦ 各WEB APIの応答時間の分布を可視化する ◦ 各WEB APIのエラー率を算出する TailSampling SpanMetrics ConnectorはProcessorよりも後段にある → Tailsamplingに正常なTraceを捨てられてしまう 33
  23. アジェンダ • 自己紹介 • OTel Collectorの概要 • 課題(Traceの一部収集 and Metricsの全収集)

    • 課題解消の難しさ • 課題解消の一例(多段構成アプローチ) • まとめ 35
  24. 多段構成アプローチ Tail Sampling Processor (再掲) • Contribution Distro • 一連のポリシーに基づいてサンプリング

    • ポリシーの一例 ◦ status_code != OK (異常なWeb応答) ◦ latency > 1s (遅延したWeb応答) OTelCollectorで分散して受けようとすると、送信先の OTelCollectorに よってはOK/ERRORを誤認してしまう。 スケーラビリティ ←→ サンプリングのトレードオフ 42
  25. 多段構成アプローチ Loadbalancing Exporter • Contribution Distro • exporters.loadbalancing に送信先(複数)を設定 •

    TraceID(等)をハッシュ化し、 一貫したバックエンドに送信する ◦ Trace1のSpan(a,b,c)→ hosts.host-aへ ◦ Trace2のSpan(x,y,z)→ hosts.host-bへ 44
  26. 多段構成アプローチ Loadbalancing Exporter • Contribution Distro • exporters.loadbalancing に送信先(複数)を設定 •

    TraceID(等)をハッシュ化し、 一貫したバックエンドに送信する ◦ Trace1のSpan(a,b,c)→ hosts.host-aへ ◦ Trace2のSpan(x,y,z)→ hosts.host-bへ 条件(TraceID , hosts.*)が同じであれば、 どのOTelCollectorも同じバックエンドに Traceを送信してくれる! 45
  27. 多段構成アプローチ SpanMetrics OTelCollector-a(1...n) (remote write) x10 x5 不一致 事象 •

    発生させたTraceの数と 検出されたTraceの数が 一致しない ( 基本減っている) 50
  28. 多段構成アプローチ SpanMetrics OTelCollector-a(1...n) (remote write) x10 x5 不一致 事象 •

    発生させたTraceの数と 検出されたTraceの数が 一致しない ( 基本減っている) 原因 • Metricsのラベル被り OTelcol-a(1..n) が 同じラベルを使っていた ↓ Prometheusに同じもの としてカウントされ、 一部が無視されてしまった 51
  29. 多段構成アプローチ SpanMetrics OTelCollector-a(1...n) (remote write) x10 x10 一致! 事象 •

    発生させたTraceの数と 検出されたTraceの数が 一致しない ( 基本減っている) 原因 • Metricsのラベル被り OTelcol-a(1..n) が 同じラベルを使っていた 解決 • Processorでラベルを追加 ( OTelCollectorのPod名) Attributes 52
  30. アジェンダ • 自己紹介 • OTel Collectorの概要 • 課題(Traceの一部収集 and Metricsの全収集)

    • 課題解消の難しさ • 課題解消の一例(多段構成アプローチ) • まとめ 55
  31. まとめ Traceをデータソースとした可観測性の向上 • APPからTraceを受け、Trace , Metricsを出力 • pipelines.traces ◦ receivers

    {otlp} ◦ processors {attributes/metrics , batch , …etc} ◦ exporters {loadbalancing, spanmetrics} • pipelines.metrics ◦ receivers {spanmetrics} ◦ processors {batch, …etc} ◦ exporters {prometheusremotewrite} OTelCollector-a(1...n) ※1段目 57