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

Operating and Migrating OpenTelemetry Collector...

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Kota Kimura Kota Kimura
November 18, 2025
6

Operating and Migrating OpenTelemetry Collector in a 100-Cluster-Scale Multi-Tenant Environment

Avatar for Kota Kimura

Kota Kimura

November 18, 2025

Transcript

  1. 自己玹介 青山 真也@amsy810 CIU - Cycloud Div Tech Lead KaaS

    Product Owner Developer ExpertCloudNative 領域 Co-Chair: KubeCon + CNCon Japan 2025, CND Board: Cloud Native Community Japan Organizer: Kubernetes Meetup Tokyo, etc 朚村 掞倪 CIU - Cycloud Div Software Engineer KaaS Sub Product Owner LBaaS Core Developer Envoy Gateway: Maintainer
  2. アゞェンダ 1. 背景 2. OpenTelemetry Collector / Operator 抂芁 3.

    【メトリクス】アップストリヌム動向 4. 【メトリクス】OpenTelemetry 察応時の考慮ポむント 5. 【ログ】アップストリヌム動向 6. 【ログ】OpenTelemetry 察応時の考慮ポむント 7. Collector の集玄パタヌンずパむプラむンサヌビスに向けお 8. たずめ
  3. OpenTelemetry Collector 導入前の AKE の課題① ナヌザヌクラスタの゚ヌゞェントは、 管理クラスタのテレメトリデヌタの集玄バック゚ンドに盎接曞き蟌む 構成 ※ 実際のフロヌでは

    認蚌認可のため、認蚌コンポヌネントを経由するのですが、図衚では割愛しおいたす 管理クラスタ Victoria Metrics メトリクス集玄バック゚ンド Loki ログ集玄バック゚ンド ナヌザヌクラスタ Promtail Prometheus
  4. OpenTelemetry Collector 導入前の AKE の課題① ナヌザヌクラスタ 管理クラスタ Promtail Prometheus Victoria

    Metrics メトリクス集玄バック゚ンド Loki ログ集玄バック゚ンド ナヌザヌクラスタ Promtail Prometheus ナヌザヌクラスタ Promtail Prometheus • ナヌザヌクラスタの増加 => 集玄バック゚ンドが高負荷 に • 䞭間局でテレメトリを制埡する術がない
  5. OpenTelemetry Collector 導入前の AKE の課題② テレメトリデヌタの転送先蚭定はナヌザヌクラスタ偎に存圚 • 蚭定倉曎時にナヌザヌクラスタ偎に圱響のある操䜜が必芁 • 倖郚

    SaaS ぞの転送など動的な蚭定倉曎のナヌザヌ公開が困難 ◩ 管理甚途で必芁なデヌタは保持する必芁があったり 管理クラスタ Victoria Metrics メトリクス集玄バック゚ンド Loki ログ集玄バック゚ンド ナヌザヌクラスタ Promtail Prometheus
  6. OpenTelemetry Collector の導入ぞ ナヌザヌクラスタ 管理クラスタ Promtail Prometheus Victoria Metrics メトリクス集玄バック゚ンド

    Loki ログ集玄バック゚ンド ナヌザヌクラスタ Promtail Prometheus ナヌザヌクラスタ Promtail Prometheus 䞭間局に OpenTelemetry Collector を導入 • 動的な蚭定倉曎 を容易に • ナヌザヌの任意の凊理・転送先蚭定 が可胜に
  7. OpenTelemetry ず OpenTelemetry Collector ずは OpenTelemetry Collector が解決したこず → テレメトリデヌタの収集・凊理・転送の統合

    Receivers : 受信コンポヌネント e.g. OTLP Receiver, File Receiver
 Processors : 凊理コンポヌネント e.g. Batch Processor, Attribute 
 Exporters : 送信コンポヌネント e.g. OTLP Exporter, debug Exporter

  8. OpenTelemetry Operator Custom Resource を元に 宣蚀的に Collector を管理 テレメトリデヌタの制埡を 柔軟に゜フトりェアで制埡可胜

    kind: OpenTelemetryCollector spec: mode: daemonset config: receivers: otlp: {...} processors: memory_limiter: {...} batch: {...} exporters: debug: {} service: pipelines: traces: receivers: [otlp] processors: [memory_limiter, batch] exporters: [debug]
  9. Prometheus v3.0 リリヌスされおから 箄 12 幎、2.0 になっおからは玄 7 幎 •

    Remote Write 2.0 • OpenTelemetry ProtocolOTLP察応 • Agent mode の GA • Native Histogram 察応 • PromQLの Time Rangeの倉曎 プロトコル
  10. Remote Write ずは デヌタOpenMetricsをリモヌトにある別のデヌタストアに曞き蟌む機胜 • 耇数クラスタのメトリクス集玄、長期保存甚のバック゚ンドぞの保管時などに利甚 • Remote Write 甚のプロトコルが定矩されおいる

    • Protocol Buffer + HTTP の構成gRPC は開発圓初に最適な遞択肢ではなかった https://prometheus.io/blog/2021/11/16/agent/ デヌタ構造は OpenMetrics Specification 送りたいデヌタの構造は Prometheus の進化ずずもに倉化
  11. Remote Write 1.0 の課題 Remote Write 1.0 が実装埌、 PrometheusOpenMetricsにはさたざたな機胜が実装 •

    MetadataGauge や Histgram などの皮別TYPE、説明HELP、単䜍UNITなどの付加情報 ◩ ストレヌゞを最適に動䜜させるために、厳密な型指定などを利甚する倖郚レシヌバヌが存圚するe.g. Google Cloud ◩ c.f. OpenMetrics Specification • Created timestampメトリクス生成時の Unix timestampGoogle Cloud など䞀郚の倖郚レシヌバヌで必芁 • Examplerトレヌスず連携させるための情報trace-id • Native histogramネむティブ察応のヒストグラム、Legacy Histogram も䞀郚非効率。 既存のプロトコル䞊に (非公匏に)フィヌルドを远加しお実装しおおり、効率が悪い e.g. Metadata を䜕床も送付
  12. 参考: OpenMetrics v2.0 OpenMetrics は Prometheus で利甚しおいる暙準化メトリクスフォヌマット • 2014: Prometheus

    exposition format 0.0.4 • 2020: OpenMetrics v1.0 ◩ IETFに提出、珟圚は OpenMetris は Prometheus プロゞェクトに再統合 • 202X: OpenMetrics v2.0 v2.0 では Prometheus v3 前埌で察応したものなどを含め暙準化ぞ • UTF-8察応 • Native Histogram • etc 最新の動向は OpenMetrics 2.0 の Working Group の Docs を参照 https://prometheus.io/docs/specs/om/open_metrics_spec_2_0/
  13. Remote Write vs OpenTelemetry Protocol(OTLP) OpenTelemetry ProtocolOTLPはマルチテレメトリデヌタ察応 • Metrics, Logs,

    Traces, ... Remote Write v2 プロトコルはメトリクスのみを察象に軜量化・堅牢な実装 • Prometheus コミュニティはメトリクスに最適化するためにスコヌプを絞っお開発 Prometheus が OTLP Receiver ずなるこずは可胜 OpenTelemetry が Remote Write 1.0 Receiver を実装するのは課題あり • 珟圚 Remote Write 2.0 Receiver は実装可胜に
  14. OpenTelemetry Protocol から Prometheus ぞの転送 OTLP から Prometheus にデヌタを受け取る堎合、必芁に応じおデヌタの倉換が必芁 1.

    Temporality時間性 の倉換 2. Resource Attributes の倉換 OpenTelemetry ProtocolOTLP • Delta / Cumulative Temporality に察応 • メトリクスの付随デヌタは Resource Attributes ずいう Key-Value 倀 Prometheus • Cumulative Temporality にのみ察応 • メトリクスの付随デヌタは Labels ずいう Key-Value 倀 => OTLP からデヌタを受け取る際には必芁に応じお Cumulative ぞの倉換ずデヌタ敎圢が必芁
  15. 参考: Delta Temporality / Cumulative Temporality Delta Temporality • 前回報告された枬定倀ずの差分をデヌタずする

    • デヌタポむントの時間範囲は (t0, t1] ・(t1, t2] ・(t2, t3] • 特定期間の正確な倉化を把握しやすい・リアルタむムのトレンドなどを怜知しやすい・分散集蚈可胜でスケヌラブル • サンプルのドロップは「デヌタの損倱」ドロップに匱い • Datadog は Delta Temporality が掚奚 ※ Cumulative Temporality • 枬定開始以降の党䜓的な枬定倀末尟に珟圚の倀をプロット • デヌタポむントの時間範囲は (t0, t1] ・(t0, t2] ・(t0, t3] • 特定のデヌタで状態がわかる・履歎など長期的な分析が埗意・アグリゲヌションが容易 • サンプルのドロップは「時間解像床の損倱」 ドロップに匷い • Prometheus は Cumulative Temporality のみをサポヌト Temporality時間性の倉換 • Cumulative > Delta: 時間性を倉換可胜な Otel Collector Processor が存圚 • Delta > Cumulative: これたでは各 Exporter で倉換する実装が䞻流 ◩ 時間性を倉換可胜な Otel Collector Processor が実装䞭Alpha ※ Temporality = 時間性
  16. 参考: Cumulative > Delta ぞの倉換 Cumulative > Delta ぞの倉換時にはステヌトフルな状態で倉換を行う必芁がある 1.

    t0=100 2. t1=105 の Cumulative 倀が発生Delta 倀 +5 3. t2=108 の Cumulative 倀が発生Delta 倀 +3 4. ステヌトの消倱再起動など 5. t3=110 の Cumulative 倀が発生t2 の倀がわからないため Delta 倀蚈算䞍可 ステヌトフルなため、同䞀のメトリクスは同䞀コンポヌネントが倉換凊理を行う必芁がある =スケヌラビリティの課題あり • DaemonSet でノヌドごずに同䞀のコンポヌネントが凊理する • Sidecar でアプリケヌションのメトリクスは同䞀のコンポヌネントが凊理する ステヌトが正しく保持されず Delta倀の蚈算に誀り
  17. 参考: Delta > Cumulative ぞの倉換 Delta から Cumulative ぞの倉換時には順序 out-of-order問題が぀きたずう

    1. t0Cumulative 倀 100 2. t2=+5の Delta 倀が発生Cumulative 倀 105 3. t3=+7の Delta 倀が発生Cumulative 倀 112 4. t1=+100 のデヌタが遅れお到着した堎合  4.1. t0Cumulative 倀 100 4.2. t1=+100の Delta 倀を差し蟌みCumulative 倀 200 4.3. t2=+5の Delta 倀が発生Cumulative 倀 205 4.4. t3=+7の Delta 倀が発生Cumulative 倀 212 => すでに曞き蟌たれた時系列デヌタの曞き戻しが必芁になっおしたう => 䞇が䞀欠損した堎合、Cumulative の倀自䜓に信憑性がない 問題の回避方法 • 环積倀の公開を䞀定時間遅延させる遅延したデヌタの到着が発生しづらくなる • パフォヌマンスの劣化を蚱容しお曞き戻しを行う 個々の Exporter で倉換するケヌスが䞻流 OTel Processor では遅延しおメモリ䞊で蚈算
  18. Prometheus Agent mode Remote Write 向けに Prometheus を最適化した Prometheus •

    ク゚リ、アラヌト、ロヌカルストレヌゞの無効化 • カスタマむズされた TSDB WAL ぞの眮き換え https://prometheus.io/blog/2021/11/16/agent/
  19. Prometheus Agent mode Remote Write 向けに Prometheus を最適化した Prometheus •

    ク゚リ、アラヌト、ロヌカルストレヌゞの無効化 • カスタマむズされた TSDB WAL ぞの眮き換え https://prometheus.io/blog/2021/11/16/agent/
  20. Prometheus ず OpenTelemetry の連携方法 【怜蚎事項】 1. OpenMetrics ゚ンドポむントからのスクレむプ方法 2. OpenTelemetry

    Collector ぞ集玄する際のプロトコルの遞択 3. 長期保存バック゚ンドぞのプロトコルの遞択 Prometheus OpenTelemetry Collector OpenTelemetry Collector 長期保存甚バック゚ンド VictoriaMetrics OpenMetrics endpoint ナヌザヌクラスタ 管理クラスタ ① ② ③
  21. Prometheus ず OpenTelemetry の連携方法 【怜蚎事項】 1. OpenMetrics ゚ンドポむントからのスクレむプ方法 2. OpenTelemetry

    Collector ぞ集玄する際のプロトコルの遞択 3. 長期保存バック゚ンドぞのプロトコルの遞択 Prometheus OpenTelemetry Collector OpenTelemetry Collector 長期保存甚バック゚ンド VictoriaMetrics OpenMetrics endpoint ナヌザヌクラスタ 管理クラスタ ① ② ③
  22. ① OpenMetrics ゚ンドポむントからのスクレむプ方法 OpenMetrics の゚ンドポむントからスクレむプする際には通りの方法がある ✅ Prometheus でスクレむプする Agent mode

    を含む • Prometheus Operator の ServiceMonitor などの CRD が利甚可胜 • 既存の Prometheus 環境ずの統合がしやすい OpenTelemetry prometheusreceiver Receiver でスクレむプする • Prometheus の Config を盎接曞く必芁がある ◩ 䞀応 Prometheus APIず連携する蚭定を曞けばタヌゲットを取埗可胜 • いく぀か制玄事項が存圚する
  23. Prometheus ず OpenTelemetry の連携方法 【怜蚎事項】 1. OpenMetrics ゚ンドポむントからのスクレむプ方法 2. OpenTelemetry

    Collector ぞ集玄する際のプロトコルの遞択 3. 長期保存バック゚ンドぞのプロトコルの遞択 Prometheus OpenTelemetry Collector OpenTelemetry Collector 長期保存甚バック゚ンド VictoriaMetrics OpenMetrics endpoint ナヌザヌクラスタ 管理クラスタ ① ② ③
  24. ② OpenTelemetry Collector ぞ集玄する際のプロトコルの遞択 デヌタの転送方向ずプロトコルによっお察応方法が異なる • ✅ OTel Collector 間は

    OTLP で䞀番安定しお転送可胜 • Prometheus から OTel Collector に送る堎合は芁怜蚎 PRW1 で前者の Receiver ※1 でも動䜜可胜だが、 Prometheus v3 + PRW2 の構成で埌者の Receiver ※2 が掚奚 Prometheus > OpenTelemetry Collector OpenTelemetry Collector > Prometheus OTLP 未察応 Prometheus v3 から可 PRW signalfxgatewayprometheusremotewritereceiver Receiver (PRW 1) ※1 prometheusremotewrite Receiver (PRW2) ※2 prometheusremotewrite Exporter
  25. Prometheus ず OpenTelemetry の連携方法 【怜蚎事項】 1. OpenMetrics ゚ンドポむントからのスクレむプ方法 2. OpenTelemetry

    Collector ぞ集玄する際のプロトコルの遞択 3. 長期保存バック゚ンドぞのプロトコルの遞択 Prometheus OpenTelemetry Collector OpenTelemetry Collector 長期保存甚バック゚ンド VictoriaMetrics OpenMetrics endpoint ナヌザヌクラスタ 管理クラスタ ① ② ③
  26. 長期保存バック゚ンドぞのプロトコルの遞択 VicrtoriaMetrics は Prometheus 向けの長期保存甚のスケヌラブルなストレヌゞ • ✅ Prometheus Remote Write

    v1プロトコルが初期からの基本的な遞択肢 • Prometheus Remote Write v2プロトコルには未察応 • ✅ OpenTelemetry ProtocolOTLP にも察応v1.92.0 2023/7〜 ◩ サポヌトしおいないドロップされたメトリクスは vm_protoparser_rows_dropped_total で確認可胜 ▪ Histogram type の bucket で le ラベルがない ▪ Summary type で quantile ラベルがない ▪ __name__ ラベルが存圚しない ▪ UTF-8 や "." が䜿われおいる OTel Collector から転送するため OTLP をそのたた利甚 ドロップされおいるメトリクスなどに぀いおは適宜察応 OpenTelemetry Collector 長期保存甚バック゚ンド VictoriaMetrics
  27. Prometheus ず OpenTelemetry の連携方法 1. OpenMetrics ゚ンドポむントからのスクレむプ方法 2. OpenTelemetry Collector

    ぞ集玄する際のプロトコルの遞択 3. 長期保存バック゚ンドぞのプロトコルの遞択 Prometheus OpenTelemetry Collector OpenTelemetry Collector 長期保存甚バック゚ンド VictoriaMetrics OpenMetrics endpoint ナヌザヌクラスタ 管理クラスタ ① ② ③ ・Operator/CRDの利甚 ・既存環境ずの連携容易性 ・PRW2ず新Receiverの構成 OTLP のたた転送 倉換コストを避ける
  28. ログ関連のアップストリヌム動向 (Loki) Loki のおさらい : Data Format chunk : 特定ラベルのログデヌタを集玄するログの塊

    {service="ake", component="cilium", env="production"} [INFO] Service finished Label Key/Value hash : 3b2cea097
 3b2cea097
 [INFO] Service Started chunk index : 特定ラベルに該圓する chunk を特定するためのデヌタ構造 {service="ake"} Query {service="ake", component="cilium", env="production"} [INFO] Service finished Hash value Range Value Value TenantID:service abctgh87:3b2cea097 ake 
 
 

  29. ログ関連のアップストリヌム動向 (Loki) Loki のおさらい : コンポヌネント構成 Ingester • デヌタをむンメモリで chunk

    ずしお保持 • 蚭定した間隔でバック゚ンドストレヌゞに flush • chunk を圧瞮し Querier の read data ずしお提䟛 Distributor • ログ曞き蟌みを最初に受け取る • デヌタストリヌムの正圓性の評䟡などを行う • replication factor に埓い Ingester に転送 Querier • LogQL を䜿っお、デヌタを取埗する • Ingester → バック゚ンドストレヌゞ の順でク゚リ • replication factor に埓い 耇数の Ingester に ク゚リを行い、重耇排陀しおデヌタを返す Compactor • Ingester が生成した index file を圧瞮し怜玢の効率化 • ログの retention や削陀も担圓
  30. label には 静的な情報 (region, cluster
) を入れるべきで 動的な情報 (timestamp, ipaddr, pod

    name
) はなるべく入れるべきではないず掚奚 → カヌディナリティが高くなるデヌタは䜿うべきではない ログ関連のアップストリヌム動向 (Loki) {service="ake", pod_name="cilium-xxxxx", env="production"} [INFO] Service finished • chunk あたりのデヌタが少なくなり、 chunk 数は増える • index デヌタが倧きくなる では、ログ本文䞭にはないが、カヌディナリティが高いデヌタはどうすれば ...
  31. ログ関連のアップストリヌム動向 (Loki) Structured Metadata • chunk format V4 (schema 13

    以䞊) で導入されたデヌタ構造 • Loki v2.9.4 以降で GA で、Loki v3 以降もGA chunk format • index には含たずに、chunk 内郚に key/value のメタ デヌタを保持する仕組み • ク゚リ速床は index label の方が基本的に早い Bloom Filter (Experimental) • デヌタがないず刀断したチャンクをスキップしおク゚リを行う アルゎリズムずデヌタ構造 • Loki v3.3 から Structured Metadata も察応
  32. ログ関連のアップストリヌム動向 (Loki) Schema Upgrade Loki v2.7 以前では BoltDB ずいう schema

    を採甚 Loki v2.8 からは TSDB ずいう新しい schema が導入 index のク゚リパフォヌマンスが改善・掚奚 schema ※ TSDB は Prometheus の TSDB を loki 甚にチュヌニングしおいるずのこず schema_config: configs: - from: 2019-07-01 store: boltdb object_store: filesystem schema: v11 index: prefix: index_ period: 24h - from: 2025-11-18 store: tsdb object_store: filesystem schema: v13 index: prefix: index_ period: 24h 右のように helm で、ある日時から新しい schema を 利甚するように指定可胜 ただし、TSDB to BoltDB にするず壊れおしたう問題 が あったので泚意
  33. ログ関連のアップストリヌム動向 (Loki) • Loki v3 から OTLP 曞き蟌みをネむティブサポヌト ◩ OTLP

    over HTTP のみなので、otlphttp exporter を䜿う ◩ Loki の Structured Metadata の有効化が必芁 Loki Otel Collector Otlphttp Exporter Otlp Receiver File Receiver http://<loki-addr>/otlp OTLP ネむティブサポヌト • 基本的に OTLP attribute は loki の Structured Metadata に保存される
  34. ログ関連のアップストリヌム動向 (Loki) OTLP ず Loki Storage model が異なるため、attribute を index

    label ずしお 利甚するためには 明瀺的にマッピングする必芁があるこずに泚意 ① OTLP の Resource Attribute にデヌタ栌玍 ② loki distributor’s otlp_config に index label に入れたい Attribute を指定 以䞋の Resource Attribute などは index label に デフォルトで眮換される • container.name • k8s.cluster.name • k8s.pod.name ※ Grafana は k8s.pod.name を drop 掚奚 loki: limits_config: allow_structured_metadata: true otlp_config: resource_attributes: attributes_config: - action: index_label attributes: - service.group helm value
  35. ログ関連のアップストリヌム動向 (Alloy) Grafana Alloy は Grafana が開発しおいる OSS のテレメトリ収集゚ヌゞェント ログの文脈では

    Promtail の埌継に䜍眮するが、メトリクス・ログ・テレメトリを統䞀管理できる OpenTelemetry Collector をベヌスに䜜られおいるので、柔軟にパむプラむンを組める otelcol.processor.batch "default" { output { logs = [otelcol.exporter.otlp.default.input] } } otelcol.exporter.otlp "default" { client { endpoint = "{{ .Values.ake.remotewrite_endpoint }}" tls { insecure_skip_verify = true } headers = { "X-Scope-OrgID" = "{{ .Values.ake.project }}", } } } ConfigMap に蚭定を入れお Pod にマりントする 蚭定は Alloy 特有の衚蚘なので、 Otel Collector の蚭定から倉換する必芁あり
  36. ログ関連のアップストリヌム動向 (Datadog) Datadog Backend Code OTEL SDK DATADOG AGENT OTLP

    Otel Collector Datadog Exporter Otlp Receiver File Receiver OTLP Log File ① アプリケヌションから Otel SDK を䜿っお、Datadog Agent に送信 • Datadog Agent のバヌゞョン 6.48.0 および 7.48.0 以降で、 gRPC たたは HTTP 経由で OTLP ログも察応 • Datadog Distribution of OpenTelemtry Colletor の Receiver に送信
  37. ログ関連のアップストリヌム動向 (Datadog) Datadog Backend Code OTEL SDK DATADOG AGENT OTLP

    Otel Collector Datadog Exporter Otlp Receiver File Receiver OTLP Log File ② アプリケヌションから Otel SDK を䜿っお、Otel Collector に送信 Otel Collector は OpenTelemetry Collector Builder で Build が掚奚 Otlp Receiver でデヌタを受信し、 Datadog Exporter で送信
  38. ログ関連のアップストリヌム動向 (Datadog) Datadog Backend Code OTEL SDK DATADOG AGENT OTLP

    Otel Collector Datadog Exporter Otlp Receiver File Receiver OTLP Log File ③ アプリケヌションの暙準ログでファむルに出力し、 Otel Collector で読み蟌み Otel Collector は OpenTelemetry Collector Builder で Build が掚奚 File Receiver でデヌタを読み取り、 Datadog Exporter で送信
  39. ログの移行事䟋 tips ずハマりどころ alloy convert --source-format=promtail --output=<OUTPUT_CONFIG_PATH> <INPUT_CONFIG_PATH> 各皮 config

    から Alloy config ぞの倉換は、 alloy cli で可胜 ※ 察応 config : otelcol, prometheus, promtail, static clients: - url: http://localhost/loki/api/v1/push scrape_configs: - job_name: example static_configs: - targets: - localhost labels: __path__: /var/log/*.log local.file_match "example" { path_targets = [{ __address__ = "localhost", __path__ = "/var/log/*.log", }] } loki.source.file "example" { targets = local.file_match.example.targets forward_to = [loki.write.default.receiver] } loki.write "default" { endpoint { url = "http://localhost/loki/api/v1/push" } external_labels = {} } promtail alloy
  40. ログの移行事䟋 tips ずハマりどころ 移行䞭に Promtail ず Alloy が同じ k8s pod

    log をダブルラむトしおしたう • Promtail ず Alloy が同時に存圚するケヌス ナヌザヌクラスタ Promtail Alloy Log File • Promtail が皌働しおいお完党に消えたのちに Alloy をデプロむしたケヌス ナヌザヌクラスタ Promtail Alloy Log File Q. い぀発生した
  41. ログの移行事䟋 tips ずハマりどころ 移行䞭に Promtail ず Alloy が同じ k8s pod

    log をダブルラむトしおしたう 管理クラスタ Loki ナヌザヌクラスタ Promtail Alloy Otel Collector Log File Promtail も Alloy も盎接ログファむルを芋にいく構成になっおおり、 ぀のファむルを 2重で凊理しおしたっおいた 🀔
  42. ログの移行事䟋 tips ずハマりどころ 移行䞭に Promtail ず Alloy が同じ k8s pod

    log をダブルラむトしおしたう discovery.kubernetes "kubernetes_pods" { role = "pod" } discovery.relabel "kubernetes_pods" { targets = discovery.kubernetes.kubernetes_pods.targets rule { source_labels = ["__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"] separator = "/" target_label = "__path__" replacement = "/var/log/pods/*$1/*.log" } ... } local.file_match "kubernetes_pods" { path_targets = discovery.relabel.kubernetes_pods.output } loki.source.file "kubernetes_pods" { targets = local.file_match.kubernetes_pods.targets forward_to = [loki.relabel.extract_uid_kubernetes_pods.receiver] legacy_positions_file = "/run/promtail/positions.yaml" } 利甚しおいた Alloy Config の抜粋 1. pod 情報の取埗 2. relabel 凊理 1 の pod 情報から取埗ログのパスを蚭定 pod 名や node 名などを label ずしお蚭定 3. 蚭定したパスのファむルを 察象に指定 4. loki の source ずしお登録
  43. ログの移行事䟋 tips ずハマりどころ 移行䞭に Promtail ず Alloy が同じ k8s pod

    log をダブルラむトしおしたう Position File ずいう仕組みで 重耇したファむルは凊理しない仕組 みがある ナヌザヌクラスタ Promtail Alloy Log File Promtail Positions File Alloy Positions File loki.source.file "kubernetes_pods" { targets = local.file_match.kubernetes_pods.targets forward_to = [loki.relabel.extract_uid_kubernetes_pods.receiver] legacy_positions_file = "/run/promtail/positions.yaml" } Alloy の蚭定で、 Promtail の Position File を匕き継ぐ蚭定を 入れおいるはずなのに ...? 🀔
  44. ログの移行事䟋 tips ずハマりどころ 移行䞭に Promtail ず Alloy が同じ k8s pod

    log をダブルラむトしおしたう positions: /var/log/pods/kube-system_cilium-wbv2b_0d36d39a-c 3ac-4491-adb3-c9ef98b78ab8/apply-sysctl-overwrite s/0.log: "158" positions: ? path: /var/log/pods/kube-system_cilium-hhmv7_228ce13f-2eae-429 5-ac1a-30e9cb35c1c2/config/0.log labels: '{app="cilium-agent", container="config", job="kube-system/cilium-agent", namespace="kube-system", node_name="log-test-control-plane-4z9cx", pod="cilium-hhmv7"}' : "1775" Alloy Position File Promtail Position File (Legacy) Promtail ず Alloy で利甚しおいる Position File のフォヌマットに倉曎があった 新しいフォヌマットには label が付䞎する圢になっおいた
  45. ログの移行事䟋 tips ずハマりどころ 移行䞭に Promtail ず Alloy が同じ k8s pod

    log をダブルラむトしおしたう discovery.relabel "kubernetes_pods" { targets = discovery.kubernetes.kubernetes_pods.targets rule { source_labels = ["__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"] separator = "/" target_label = "__path__" replacement = "/var/log/pods/*$1/*.log" } rule { source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_name", "__meta_kubernetes_pod_label_app", "__tmp_controller_name", "__meta_kubernetes_pod_name"] regex = "^;*([^;]+)(;.*)?$" target_label = "app" } } loki.source.file "kubernetes_pods" { targets = local.file_match.kubernetes_pods.targets forward_to = [loki.relabel.extract_uid_kubernetes_pods.receiver] legacy_positions_file = "/run/promtail/positions.yaml" } positions: ? path: /var/log/pods/kube-system_cilium-hhmv7_228ce13f-2eae-429 5-ac1a-30e9cb35c1c2/config/0.log labels: '{app="cilium-agent", container="config", job="kube-system/cilium-agent", namespace="kube-system", node_name="log-test-control-plane-4z9cx", pod="cilium-hhmv7"}' : "1775" そのため、 loki.source.file の前に独自ラベルを぀けおいる堎合は匕き継ぎに倱敗する
  46. ログの移行事䟋 tips ずハマりどころ 移行䞭に Promtail ず Alloy が同じ k8s pod

    log をダブルラむトしおしたう loki.enrich "kubernetes_pods" { targets = discovery.relabel.kubernetes_pods.output target_match_label = "__meta_ake_kubernetes_unique_key" logs_match_label = "pod_unique_key" labels_to_copy = [ "__meta_kubernetes_pod_controller_name", "__meta_kubernetes_pod_label_app_kubernetes_io_name", "__meta_kubernetes_pod_label_app", "__meta_kubernetes_pod_name", "__meta_kubernetes_pod_label_app_kubernetes_io_instance", "__meta_kubernetes_pod_label_release", "__meta_kubernetes_pod_label_app_kubernetes_io_component", "__meta_kubernetes_pod_label_component", "__meta_kubernetes_pod_node_name", "__meta_kubernetes_namespace", "__meta_kubernetes_pod_container_name", ] forward_to = [loki.relabel.kubernetes_pods.receiver] } loki.enrich を䜿っお解決 ! discovery level の metadata をログの label にコピヌできる ただし察象を突合するために、察象ログのある label ずある metadata を結び぀ける必芁がある /var/log/pods/kube-system_cilium-wbv2b_0d 36d39a-c3ac-4491-adb3-c9ef98b78ab8/apply- sysctl-overwrites/0.log 察象ログに぀いおいる label は ファむルパスの情報しかないが どうする...
  47. ログの移行事䟋 tips ずハマりどころ 移行䞭に Promtail ず Alloy が同じ k8s pod

    log をダブルラむトしおしたう rule { source_labels = ["__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"] separator = "/" target_label = "__meta_ake_kubernetes_unique_key" replacement = "$1" } __meta_* ずいう prefix の label は管理ラベルずしお扱われるため、 position file には远加されないこずを発芋 __meta_ake_kubernetes_unique_key → 0d36d39a-c3ac-4491-adb3-c9ef98b78ab8/cilium-wbv2b • discovery.relabel で meta label を぀ける • ファむルパスから突合甚の label を぀ける pod_unique_key → 0d36d39a-c3ac-4491-adb3-c9ef98b78ab8/cilium-wbv2b loki.relabel "extract_uid_kubernetes_pods" { rule { source_labels = ["filename"] regex = "/var/log/pods/[^_]+_[^_]+_([0-9a-f-]+)/([^/]+)/.*" separator = "/" target_label = "pod_unique_key" replacement = "$1/$2" } }
  48. OpenTelemetry Collector の集玄パタヌン 管理クラスタ メトリクス集玄 バック゚ンド ログ集玄 バック゚ンド  管理クラスタ

     メトリクス集玄 バック゚ンド ログ集玄 バック゚ンド Collector の集玄単䜍をどうするか • スケヌラビリティ・爆発半埄的に䞀極集䞭は避けたい • OpenTelemetry Collector もステヌトフルなため、分散するず効率が悪い
  49. クラスタごずに Collector をデプロむ 管理クラスタ Victoria Metrics メトリクス集玄バック゚ンド Loki ログ集玄バック゚ンド ナヌザヌクラスタ

    Promtail Prometheus ナヌザヌクラスタ Promtail Prometheus • 爆発半埄が最小化された構成 • クラスタごずの蚭定倉曎が蚱容しやすい • リ゜ヌス集玄率が䜎い ◩ 実際には Collector ごずのレプリカ数=Nなため、膚倧な Collector が必芁 ※テナントごずに集玄するパタヌンもほが同様の Pros/Cons
  50. テレメトリデヌタの皮別ごずに Collector をデプロむ 管理クラスタ Victoria Metrics メトリクス集玄バック゚ンド Loki ログ集玄バック゚ンド ナヌザヌクラスタ

    Promtail Prometheus ナヌザヌクラスタ Promtail Prometheus • リ゜ヌス効率が高い • 運甚時に 1箇所の Collector を管理するだけで良い ◩ 分散しおいる堎合、障害時に党 Collector を制埡する仕組みを䜜る必芁がある • 特定のナヌザヌの倉曎が倧きな圱響を䞎える可胜性 • ログカりントから生成したメトリクスなどが䞀郚存圚する可胜性あり
  51. AKE での OpenTelemetry Collector のデプロむ単䜍 管理クラスタ Victoria Metrics メトリクス集玄バック゚ンド Loki

    ログ集玄バック゚ンド ナヌザヌクラスタ Promtail Prometheus ナヌザヌクラスタ Promtail Prometheus • 基本的にはテレメトリデヌタ皮別ごずに分散 ◩ 個別蚭定したいナヌザヌ数の方が少ない • クラスタ・テナントごずに個別蚭定したい堎合は、新たな Collector を生成 ◩ ナヌザヌに察しお自由床の高い状態、課金圢態ずの盞性から決定
  52. AKE での OpenTelemetry Collector のデプロむ単䜍 管理クラスタ Victoria Metrics メトリクス集玄バック゚ンド Loki

    ログ集玄バック゚ンド ナヌザヌクラスタ Promtail Prometheus ナヌザヌクラスタ Promtail Prometheus • 基本的にはテレメトリデヌタ皮別ごずに分散 ◩ 個別蚭定したいナヌザヌ数の方が少ない • クラスタ・テナントごずに個別蚭定したい堎合は、新たな Collector を生成 TelemetryPipeline Operatorの開発蚈画や マルチリヌゞョンの管理クラスタに跚った multicluster-runtime 導入の野望などはたた別の機䌚に
  53. Agenda • 自己玹介 1min • OpenTelemetry{Collector} ずは 1min • OpenTelemetry

    Operatorずは 1min • Metrics 10min ◩ 最新動向 ▪ OTLP察応状況 • Logs 10min ◩ 最新動向 ▪ OTLP察応状況 • 匊瀟のOTel Collectorの集玄方法 ◩ per Cluster/Tenant/TelemetryType 5min ◩ 移蚭時のはたりどころ ▪ Metrics 4min ▪ Logs 8min
  54. CFP Overview 本セッションでは、100を超える Kubernetes クラスタを運甚する倧芏暡マルチテナント環境におい お、 OpenTelemetry Collectorぞの移行ず掻甚を進める䞭で埗られた知芋を共有したす。埓来は Prometheus +

    VictoriaMetrics や Promtail + Loki を甚いおテレメトリを集玄しおいたしたが、各 ゚ヌゞェントが盎接集玄基盀にデヌタを送信する構成では、バッファリングやフィルタリングなどの 柔軟な制埡をするにはナヌザヌクラスタに手を加える必芁があるずいう課題がありたした。そこでマ ネヌゞドな䞭間レむダヌに OpenTelemetry Collector による Telemetry Pipeline を構築し、゜フト りェアでの制埡を可胜にするずずもに、自プロダクトの集玄基盀以倖䟋 Datadogずの連携容易 性も実珟したした。 本セッションでは、以䞋のトピックを䞭心に解説したす。 ・OpenTelemetry Operator の掻甚方法 ・各 OSS における OTLP 察応状況 ・Collector の集玄単䜍蚭蚈Cluster / Tenant / Data ・Prometheus RemoteWrite 2.0・OpenMetrics 2.0 などの新しいプロトコル仕様 ・Prometheus v3・Loki v3・Grafana Alloy などの最新動向 • OpenTelemetry{Collector} ずは • OpenTelemetry Operatorずは • OTLP察応状況 ◩ Metrics ▪ Prometheus ▪ VictoriaMetrics ▪ Thanos? ▪ Datadog ▪ GCP/AWS ◩ Logs ▪ Loki(Promtail / Alloy) ▪ Datadog ▪ GCP/AWS • Metricsの最新動向 ◩ Prometheus v3.0 ▪ agent mode ▪ string interning ▪ PRW 2.0 ◩ PRW 2.0 ◩ OpenMetrics 2.0 • Logsの最新動向 ◩ Loki v3 ▪ schema / index / metadata ▪ Log patterns ◩ Alloy • Metricsのはたりどころ • Logsのはたりどころ ◩ k8s audit logロヌテヌト問題 ◩ checksum問題CHRでの話 ◩ attribute ▪ https://github.com/cycloud-io/myshoes-deploy/blob/a9b55a39c4648b18d3fe79700c818bf6c339a3d9/manifests/per-cluster- component/stadium-log-aggregator/base/otel-collector-config.yaml • 匊瀟のOTel Collectorの集玄方法 ◩ per Cluster/Tenant/TelemetryType
  55. kimura memo Logs のはたりどころ - k8s audit log ロヌテヌト問題 -

    checksum 問題 - chr で党おのファむルで同じ文字列の始たりだず送らない問題があった - Loki の label が resource attribute じゃないず眮換できない問題