Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
5分でわかるGoの自動計装
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ryuichi1208
February 15, 2024
2.3k
6
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
5分でわかるGoの自動計装
ryuichi1208
February 15, 2024
More Decks by ryuichi1208
See All by ryuichi1208
そのasync、止まってない? ”鉄板”イベントループ ブロッキング処理検出術
ryuichi1208
1
2.3k
AIでサービス運用はどう変わるのか
ryuichi1208
0
210
入門 再発防止策
ryuichi1208
17
7.8k
SREの組織構造と実践.
ryuichi1208
0
320
信頼性・システムの観測・障害対応
ryuichi1208
1
4
障害対応からの学びと体制づくり
ryuichi1208
0
1.2k
金曜日デプロイ、するかしないか.pdf
ryuichi1208
1
490
会話で作る信頼性
ryuichi1208
0
200
シグナル(Unix)と仲良くなる
ryuichi1208
1
210
Featured
See All Featured
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
450
Darren the Foodie - Storyboard
khoart
PRO
4
4k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
560
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.4k
RailsConf 2023
tenderlove
30
1.6k
Mind Mapping
helmedeiros
1
400
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Believing is Seeing
oripsolob
1
240
The Limits of Empathy - UXLibs8
cassininazir
2
710
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.9k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
50
10k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
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 ご静聴ありがとうございました