Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
5分でわかるGoの自動計装
Search
ryuichi1208
February 15, 2024
6
2.2k
5分でわかるGoの自動計装
ryuichi1208
February 15, 2024
Tweet
Share
More Decks by ryuichi1208
See All by ryuichi1208
AI前提のサービス運用について再考する
ryuichi1208
5
1.3k
A Shallow Dive into the World of TCP
ryuichi1208
1
600
入門リトライ
ryuichi1208
20
7.6k
超入門SRE 2025
ryuichi1208
4
1.4k
Goで作って学ぶWebSocket
ryuichi1208
5
3.9k
コード化されていない稼働中のサーバを移設_再構築する技術
ryuichi1208
20
14k
AI前提のサービス運用ってなんだろう?
ryuichi1208
9
1.9k
入門 バックアップ
ryuichi1208
22
11k
効果的なオンコール対応と障害対応
ryuichi1208
9
4.1k
Featured
See All Featured
How STYLIGHT went responsive
nonsquared
100
5.9k
Facilitating Awesome Meetings
lara
57
6.6k
Into the Great Unknown - MozCon
thekraken
40
2.2k
The Invisible Side of Design
smashingmag
302
51k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
70
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
700
Optimising Largest Contentful Paint
csswizardry
37
3.5k
The Cult of Friendly URLs
andyhume
79
6.7k
Designing Experiences People Love
moore
142
24k
Done Done
chrislema
186
16k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
370
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 ご静聴ありがとうございました