Slide 1

Slide 1 text

Kubernetes Novice Tokyo #35 @ Datadog Kubernetes における OpenTelemetry 活用 ~ OTel Operator と otel-go-instrumentation をふんわり理解する編 ~ #k8snovice 逆井(さかさい) @ k6s4i53rx

Slide 2

Slide 2 text

逆 井 啓 佑 さかさい ● 所属:Datadog Japan ● コミュニティ: ○ OpenTelemetry Meetup ○ Google Cloud Champion Innovators ● クラウドネイティブ界隈に生息しています 自己紹介 CNDT2022 CNDT2023 CNDW2024 ー 2024-12-10 Kubernetes Novice Tokyo #35 ー

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

今日の話 ー 2024-12-10 Kubernetes Novice Tokyo #35 ー 今日の話は Kubernetes + OpenTelemetry + Go ゼロコード計装 です。 ふんわり

Slide 6

Slide 6 text

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/

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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 の一例

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

実際に見てもらったほうが早い ー 2024-12-10 Kubernetes Novice Tokyo #35 ー

Slide 16

Slide 16 text

実際に見てもらって ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Ref: https://opentelemetry.io/ opentelemetry-go-instrumentation というツールが inject されて、Go がゼロコード計装されている

Slide 17

Slide 17 text

実際に見てもらって ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Ref: https://opentelemetry.io/ What is opentelemetry-go-instrumentation ??

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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の 特定の関数をフック データ保管 データ参照

Slide 20

Slide 20 text

実際に見てもらって ー 2024-12-10 Kubernetes Novice Tokyo #35 ー Ref: https://opentelemetry.io/ Go ゼロコード計装の otel-go-instrumentation は eBPF を使って実現されているらしい。なるほどなぁ。

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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 からトレース 情報を読み出し モニタリング バックエンドに送信 メインプロセスが サーバーアプリの 場合の処理フロー概要

Slide 23

Slide 23 text

opentelemetry-go-instrumentation をふんわり理解する ー 2024-12-10 Kubernetes Novice Tokyo #35 ー 留意点: ● opentelemetry-go-instrumentation を注入する Pod には特権を与える必要がある ● 計装したいコンテナと、プロセス名前空間を共有するため

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

記載されている会社名、商品名、 またはサービス名は、各社の商標登録または商標です。