Slide 5
Slide 5 text
現時点でのgobpfでPostgreSQLのUSDTを触る(面倒)
BPF Map
BPF Program
Go
Frontend
query_blk_read.go
---
// cgoでごりごり書く必要がある
/*
#cgo CFLAGS: -I/usr/include/bcc/compat
#cgo LDFLAGS: -lbcc
#include
#include
*/
import "C"
// インラインでCのBPF Program(query_blk_read)を書く
int query_blk_read(struct pt_regs *ctx) {…}
・・・
// BPF Programの結果を受け取る structを書く
type readlineEvent struct {…}
・・・
// プローブ(smgr__md__read__done)にたいしてフックする関数(query_blk_read)をアタッチする
context := C.bcc_usdt_new_frompid(C.int(2228), nil)
C.bcc_usdt_enable_probe(context, C.CString("smgr__md__read__done"), C.CString("query_blk_read"))
usdt_text := C.bcc_usdt_genargs(&context, 1)
m := C.bpf_module_create_c_from_string(usdt_text, C.uint(0), nil, C.int(0), C.bool(false)
①
②
③