Share
Embed
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
Transcript
27 slides
-
Kubernetes Novice Tokyo #35 @ Datadog Kubernetes における OpenTelemetry 活用
~ OTel Operator と otel-go-instrumentation をふんわり理解する編 ~ #k8snovice 逆井(さかさい) @ k6s4i53rx -
逆 井 啓 佑 さかさい • 所属:Datadog Japan • コミュニティ: ◦
OpenTelemetry Meetup ◦ Google Cloud Champion Innovators • クラウドネイティブ界隈に生息しています 自己紹介 CNDT2022 CNDT2023 CNDW2024 ー 2024-12-10 Kubernetes Novice Tokyo #35 ー -
イントロの前 ー 2024-12-10 Kubernetes Novice Tokyo #35 ー K8s Novice
#33 の ry さんセッションで軽く参照していただいたので -
イントロの前 ー 2024-12-10 Kubernetes Novice Tokyo #35 ー K8s Novice
の発表で "eBPF ネタで繋いでいく" eBPF リレーというものがあったので バトンがまだあまり回ってなさそうだったので 受け取りました! -
今日の話 ー 2024-12-10 Kubernetes Novice Tokyo #35 ー 今日の話は Kubernetes
+ OpenTelemetry + Go ゼロコード計装 です。 ふんわり -
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/ -
OpenTelemetry におけるゼロコード計装 OpenTelemetry 周り ー 2024-12-10 Kubernetes Novice Tokyo #35
ー Ref: https://opentelemetry.io/ja/docs/concepts/instrumentation/zero-code/ • ゼロコード計装 ◦ アプリケーション手を加えない計装 • (当たり前だけど) 言語によって仕組みが異なる • ゼロコード計装ツール側に、 計装ライブラリやテレメトリプロバイダが存在 -
OpenTelemetry Operator OpenTelemetry Operator 周り ー 2024-12-10 Kubernetes Novice Tokyo
#35 ー Ref: https://github.com/open-telemetry/opentelemetry-operator OpenTelemetry Operator は以下のカスタムリソースを管理 • OpenTelemetryCollector • Instrumentation • OpAMPBridge -
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 の一例 -
Instrumentation を使ったゼロコード計装をもう少し詳しく OTel Operator と Instrumentation ー 2024-12-10 Kubernetes Novice
Tokyo #35 ー Ref: https://opentelemetry.io/ 登場人物は主に 3 つ • Instrumentation カスタムリソース • アプリケーション Pod • ゼロコード計装ツール(この後の説明では Go を使います) -
Instrumentation を使ったゼロコード計装をもう少し詳しく OTel Operator と Instrumentation ー 2024-12-10 Kubernetes Novice
Tokyo #35 ー OTel の設定値 Instrumentation (OTel の設定値) opentelemetry- operator-mutation -
Instrumentation を使ったゼロコード計装をもう少し詳しく OTel Operator と Instrumentation ー 2024-12-10 Kubernetes Novice
Tokyo #35 ー アプリケーション Pod 側に annotation で "inject-go" = "true" とする Instrumentation (OTel の設定値) opentelemetry- operator-mutation APP -
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 -
Instrumentation を使ったゼロコード計装をもう少し詳しく OTel Operator と Instrumentation ー 2024-12-10 Kubernetes Novice
Tokyo #35 ー アプリケーション Pod 側に annotation で "inject-go" = "true" とする Instrumentation (OTel の設定値) opentelemetry- operator-mutation APP Mutating APP ゼロコード 計装ツール トレース -
実際に見てもらって ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Ref: https://opentelemetry.io/
opentelemetry-go-instrumentation というツールが inject されて、Go がゼロコード計装されている -
実際に見てもらって ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Ref: https://opentelemetry.io/
What is opentelemetry-go-instrumentation ?? -
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 -
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の 特定の関数をフック データ保管 データ参照 -
実際に見てもらって ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Ref: https://opentelemetry.io/
Go ゼロコード計装の otel-go-instrumentation は eBPF を使って実現されているらしい。なるほどなぁ。 -
opentelemetry-go-instrumentation をふんわり理解する ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Ref:
https://opentelemetry.io/ コードを ふんわり読みました が、量多いので掻い摘んで... -
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 からトレース 情報を読み出し モニタリング バックエンドに送信 メインプロセスが サーバーアプリの 場合の処理フロー概要 -
opentelemetry-go-instrumentation をふんわり理解する ー 2024-12-10 Kubernetes Novice Tokyo #35 ー 留意点:
• opentelemetry-go-instrumentation を注入する Pod には特権を与える必要がある • 計装したいコンテナと、プロセス名前空間を共有するため -
最後に ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Datadog にも
Go のゼロコード計装ツールがある(for Datadog です) • DataDog/orchestrion • 2week 前くらいに GA 🎉 サポートしているライブラリも ~ 40 程度 • 仕組みはふんわりにいうと「コンパイル前に自動的に計装コードを追加する」 ◦ otel-go-inst のような eBPF の仕組みは使ってない ◦ 予定だけど Datadog アドカレで仕組みを詳しく解説予定(予定) -
まとめ ー 2024-12-10 Kubernetes Novice Tokyo #35 ー • OTel
のゼロコード計装や Operator、Instrumentation リソースに触れました • 合わせて、Go のゼロコード計装ツールである opentelemetry-go-instrumentation をふんわりご紹介しました (Go のゼロコード計装はむずい!) -
まとめ ー 2024-12-10 Kubernetes Novice Tokyo #35 ー • OTel
のゼロコード計装や Operator、Instrumentation リソースに触れました • 合わせて、Go のゼロコード計装ツールである opentelemetry-go-instrumentation をふんわりご紹介しました (Go のゼロコード計装はむずい!) • eBPF リレーを次の方にお渡します! ?