Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
5分でわかるGoの自動計装
Search
ryuichi1208
February 15, 2024
5
1.6k
5分でわかるGoの自動計装
ryuichi1208
February 15, 2024
Tweet
Share
More Decks by ryuichi1208
See All by ryuichi1208
入門 バックアップ
ryuichi1208
19
7.7k
AI前提のサービス運用ってなんだろう?
ryuichi1208
8
1.4k
効果的なオンコール対応と障害対応
ryuichi1208
8
3.4k
コロナ禍とその後:地方エンジニアが学んだキャリア戦略の変遷
ryuichi1208
5
310
入門オンコール対応
ryuichi1208
9
3.4k
MySQLのOOMと戦った話
ryuichi1208
6
2.8k
障害対応を楽しむ7つのコツ
ryuichi1208
8
4.6k
超入門 SRE
ryuichi1208
9
3.7k
SLO Docsのすゝめ
ryuichi1208
8
3.1k
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
Product Roadmaps are Hard
iamctodd
PRO
48
10k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
43
6.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
32
1.8k
The Cost Of JavaScript in 2023
addyosmani
45
6.2k
How to Think Like a Performance Engineer
csswizardry
19
1.1k
Music & Morning Musume
bryan
46
6.1k
Code Review Best Practice
trishagee
64
17k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
92
16k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
131
33k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
Rails Girls Zürich Keynote
gr2m
93
13k
Transcript
1 5分でわかるGoの⾃動計装 渡部 ⿓⼀ OpenTelemetry Meetup 2024-02
技術部プラットフォームグループ 2021年 中途入社 2 自己紹介 渡部 龍一 Watanabe Ryuichi •
ロール: SRE • Otel歴: 半年 • SRE NEXTスタッフ 8/3~4で今年もやります! • SNS: @ryuichi_1208
Goでも⾃動計装されたい! 3
opentelemetry-go-instrumentation 4
5 OpenTelemetryにおける⾃動計装とは https://speakerdeck.com/k6s4i53rx/getting-started-auto-instrumentation-with-opentelemetry
6 • open-telemetry/opentelemetry-go-instrumentation ◦ 2024年2⽉15⽇の時点でも開発中のステータス • Go⾔語で書かれたアプリケーションやライブラリに⾃動的に観測可能性(オブザーバ ビリティ)を提供するプロジェクト • eBPFを使⽤して実装されている
◦ アプリケーションには⼿を加えずに外部のプロセスとして起動するだけでよい • 以下のライブラリに対応している ◦ database/sql ◦ github.com/gin-gonic/gin ◦ google.golang.org/grpc ◦ net/http opentelemetry-go-instrumentationとは
使ってみる 7
8 httpリクエスト httpリクエスト こんなアプリを想定 レスポンスを作って返す
9 こんなアプリを想定
10 こんなアプリを想定
11 • アプリケーションには⼿を⼊れずに分散トレーシングができる • Docker / docker-compose / Kubernetes(kind)で動かす環境が提供されている •
⾃前ビルドでも動かせるのでこれをやってみる opentelemetry-go-instrumentationを使う
12 • Linux with kernel version 4.19 or higher •
x64 or ARM processor • Go 1.18 or higher 制約
13
14
15
どういう仕組み?🤔 16
17 • 引数で渡されたTARGETの⽂字列から/procを検索する • eBPFを⽤いてhttpやDBとのやりとりするuprobesを使って関数にアタッチする ◦ 実⾏時にユーザー空間アプリケーションの任意の部分に動的にフックする ◦ ユーザ空間のアプリケーションに処理を差し込むための仕組み •
httpならリクエストにtraceIDを追記しつつspanを⽣成する ◦ go build -ldflags ʻ-s -w’とかで作られたバイナリでも対応している ◦ offsets-trackerを使ってデバッグ情報なしでも構造体のオフセットを知る仕組み • 内部的にはcilium/ebpfが使われている ◦ eBPF プログラムのロード、コンパイル、デバッグのためのユーティリティを提供するpure Go ライブラリ 仕組み
18 internal/pkg/instrumentation/bpf/net/http/client/bpf/probe.bpf.c
デメリット 19
20 • 関数ごとにトレースを取りたいとかは現状不可能 • 個別のsetAttributeとかもできない ◦ ⼿動軽装のissueはある ◦ https://github.com/open-telemetry/opentelemetry-go-instrumentation/issues/352 •
sampling設定なども現時点ではできない デメリット
⽤途 21
22 • シンプルなネットワークIOのみのサービスで複雑な処理をしない場合 ◦ 画像変換するだけ、外部APIを叩いてProxyするだけ • 複数サービスのうち⼀部のサービスの開発者が不在みたいなケースで⼀時的に伝播を させたい • eBPFプログラミングの練習によさそう
◦ シンボルテーブル⾒てアタッチしてinjectするみたいなのやれば⼀応実現はできるはず ◦ internal/pkg/instrumentation/bpf/net/http/client/probe.go ⽤途
eBPFにはロマンがある 23
24 ご静聴ありがとうございました