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

Kubernetes における OpenTelemetry 活用 ~ OTel Operato...

逆井(さかさい)
December 10, 2024
190

Kubernetes における OpenTelemetry 活用 ~ OTel Operator と otel-go-instrumentation をふんわり理解する編 ~ / getting-started-opentelemetry-operator-on-kubernetes

Kubernetes Novice Tokyo #35 in Datadog オフィスの登壇スライドです。
https://k8s-novice-jp.connpass.com/event/334349/

逆井(さかさい)

December 10, 2024
Tweet

More Decks by 逆井(さかさい)

Transcript

  1. Kubernetes Novice Tokyo #35 @ Datadog Kubernetes における OpenTelemetry 活用

    ~ OTel Operator と otel-go-instrumentation をふんわり理解する編 ~ #k8snovice 逆井(さかさい) @ k6s4i53rx
  2. 逆 井 啓 佑 さかさい • 所属:Datadog Japan • コミュニティ: ◦

    OpenTelemetry Meetup ◦ Google Cloud Champion Innovators • クラウドネイティブ界隈に生息しています 自己紹介 CNDT2022 CNDT2023 CNDW2024 ー 2024-12-10 Kubernetes Novice Tokyo #35 ー
  3. イントロの前 ー 2024-12-10 Kubernetes Novice Tokyo #35 ー K8s Novice

    #33 の ry さんセッションで軽く参照していただいたので
  4. イントロの前 ー 2024-12-10 Kubernetes Novice Tokyo #35 ー K8s Novice

    の発表で "eBPF ネタで繋いでいく" eBPF リレーというものがあったので バトンがまだあまり回ってなさそうだったので 受け取りました!
  5. 今日の話 ー 2024-12-10 Kubernetes Novice Tokyo #35 ー 今日の話は Kubernetes

    + OpenTelemetry + Go ゼロコード計装 です。 ふんわり
  6. OpenTelemetry とは • Cloud Native Computing Foundation(CNCF) の Incubating プロジェクト

    ◦ cncf/toc には Graduation に向けた Issue が既に立っている #1271 • テレメトリー(Primary Signals)のデータモデルや送信プロトコルの標準仕様(OTLP)策定 • 様々な言語向けに計装ライブラリの提供 ◦ Go、Java、Python、C++、JavaScript、... https://opentelemetry.io/docs/instrumentation/ ◦ 言語によっては(コードに手を加えないで計装できる)ゼロコード計装ツールも提供 • OpenTelemetry Collector の仕様策定、開発 OpenTelemetry 周り ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Ref: https://opentelemetry.io/
  7. OpenTelemetry におけるゼロコード計装 OpenTelemetry 周り ー 2024-12-10 Kubernetes Novice Tokyo #35

    ー Ref: https://opentelemetry.io/ja/docs/concepts/instrumentation/zero-code/ • ゼロコード計装 ◦ アプリケーション手を加えない計装 • (当たり前だけど) 言語によって仕組みが異なる • ゼロコード計装ツール側に、 計装ライブラリやテレメトリプロバイダが存在
  8. OpenTelemetry Operator OpenTelemetry Operator 周り ー 2024-12-10 Kubernetes Novice Tokyo

    #35 ー Ref: https://github.com/open-telemetry/opentelemetry-operator OpenTelemetry Operator は以下のカスタムリソースを管理 • OpenTelemetryCollector • Instrumentation • OpAMPBridge
  9. OpenTelemetry Operator OpenTelemetry Operator 周り ー 2024-12-10 Kubernetes Novice Tokyo

    #35 ー Ref: https://github.com/open-telemetry/opentelemetry-operator OpenTelemetry Operator は以下のカスタムリソースを管理 • OpenTelemetryCollector • Instrumentation • OpAMPBridge • ゼロコード計装ツールを、 アプリケーション(Pod)に注入(Inject)する • Admission Webhook の Mutating を用いる kind: Pod spec: containers: - name: cndt-app image: nginx kind: Pod spec: containers: - name: cndt-app image: nginx - name: cndt-sidecar image: envoy Mutating ※ Mutating の一例
  10. Instrumentation を使ったゼロコード計装をもう少し詳しく OTel Operator と Instrumentation ー 2024-12-10 Kubernetes Novice

    Tokyo #35 ー Ref: https://opentelemetry.io/ 登場人物は主に 3 つ • Instrumentation カスタムリソース • アプリケーション Pod • ゼロコード計装ツール(この後の説明では Go を使います)
  11. Instrumentation を使ったゼロコード計装をもう少し詳しく OTel Operator と Instrumentation ー 2024-12-10 Kubernetes Novice

    Tokyo #35 ー OTel の設定値 Instrumentation (OTel の設定値) opentelemetry- operator-mutation
  12. Instrumentation を使ったゼロコード計装をもう少し詳しく OTel Operator と Instrumentation ー 2024-12-10 Kubernetes Novice

    Tokyo #35 ー アプリケーション Pod 側に annotation で "inject-go" = "true" とする Instrumentation (OTel の設定値) opentelemetry- operator-mutation APP
  13. Instrumentation を使ったゼロコード計装をもう少し詳しく OTel Operator と Instrumentation ー 2024-12-10 Kubernetes Novice

    Tokyo #35 ー アプリケーション Pod 側に annotation で "inject-go" = "true" とする Instrumentation (OTel の設定値) opentelemetry- operator-mutation APP Mutating APP ゼロコード 計装ツール Init Container として ゼロコード計装ツールが Inject
  14. Instrumentation を使ったゼロコード計装をもう少し詳しく OTel Operator と Instrumentation ー 2024-12-10 Kubernetes Novice

    Tokyo #35 ー アプリケーション Pod 側に annotation で "inject-go" = "true" とする Instrumentation (OTel の設定値) opentelemetry- operator-mutation APP Mutating APP ゼロコード 計装ツール トレース
  15. 実際に見てもらって ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Ref: https://opentelemetry.io/

    opentelemetry-go-instrumentation というツールが inject されて、Go がゼロコード計装されている
  16. opentelemetry-go-instrumentation をふんわり理解する ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Ref:

    https://github.com/open-telemetry/opentelemetry-go-instrumentation • Go のゼロコード計装ツール ◦ https://github.com/open-telemetry/opentelemetry-go-instrumentation ◦ eBPF を用いている ◦ ステータスは "This project is currently work in progress." • いくつかのライブラリをサポートしている ◦ google.golang.org/grpc/client ◦ google.golang.org/grpc/server ◦ net/http/client ◦ net/http/server ◦ etc... internal/pkg/instrumentation/manager.go
  17. opentelemetry-go-instrumentation をふんわり理解する ー 2024-12-10 Kubernetes Novice Tokyo #35 ー •

    extended Berkeley Packet Filter の略 • プログラムを Kernel 上で動作させることができる仕組み • システムコールや、Kernel イベント、uprobe(User Probe) にアタッチし、それらが起動したタイミングでイ ベント駆動で実行される • eBPF マップ と呼ばれる、eBPF プログラムとユーザ空間 の両方からアクセス可能なデータ構造を定義できる User空間 Kernel空間 eBPF Program eBPF Map プロセス A プロセス B ① 検証と コンパイルをし Kernel Load プロセスAの 特定の関数をフック データ保管 データ参照
  18. 実際に見てもらって ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Ref: https://opentelemetry.io/

    Go ゼロコード計装の otel-go-instrumentation は eBPF を使って実現されているらしい。なるほどなぁ。
  19. opentelemetry-go-instrumentation をふんわり理解する ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Ref:

    https://opentelemetry.io/ コードを ふんわり読みました が、量多いので掻い摘んで...
  20. opentelemetry-go-instrumentation をふんわり理解する ー 2024-12-10 Kubernetes Novice Tokyo #35 ー •

    計装したいアプリケーション (メインプロセス) の外部プロセス (計装プロセス) として起動 • http や DB とやり取りをする関数に uprobes を使って eBPF プログラムをアタッチ • メインプロセスで特定の関数が呼ばれたときに eBPF プログラムが動き、 計装に使う情報を eBPF Maps に保存 • 計装プロセスが eBPF Maps を読み、OpenTelemetry のライブラリを使ってテレメトリーを送信 Kernel空間 HTTPリクエスト メイン プロセス 計装 プロセス eBPF eBPF Map User空間 リクエスト受信をフック eBPF プログラム実行 eBPF 検証 / ロード トレースに使う情報を 取り出し Map に保存 Map からトレース 情報を読み出し モニタリング バックエンドに送信 メインプロセスが サーバーアプリの 場合の処理フロー概要
  21. opentelemetry-go-instrumentation をふんわり理解する ー 2024-12-10 Kubernetes Novice Tokyo #35 ー 留意点:

    • opentelemetry-go-instrumentation を注入する Pod には特権を与える必要がある • 計装したいコンテナと、プロセス名前空間を共有するため
  22. 最後に ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Datadog にも

    Go のゼロコード計装ツールがある(for Datadog です) • DataDog/orchestrion • 2week 前くらいに GA 🎉 サポートしているライブラリも ~ 40 程度 • 仕組みはふんわりにいうと「コンパイル前に自動的に計装コードを追加する」 ◦ otel-go-inst のような eBPF の仕組みは使ってない ◦ 予定だけど Datadog アドカレで仕組みを詳しく解説予定(予定)
  23. まとめ ー 2024-12-10 Kubernetes Novice Tokyo #35 ー • OTel

    のゼロコード計装や Operator、Instrumentation リソースに触れました • 合わせて、Go のゼロコード計装ツールである opentelemetry-go-instrumentation をふんわりご紹介しました (Go のゼロコード計装はむずい!)
  24. まとめ ー 2024-12-10 Kubernetes Novice Tokyo #35 ー • OTel

    のゼロコード計装や Operator、Instrumentation リソースに触れました • 合わせて、Go のゼロコード計装ツールである opentelemetry-go-instrumentation をふんわりご紹介しました (Go のゼロコード計装はむずい!) • eBPF リレーを次の方にお渡します! ?