Ileri Konular ve Go Entegrasyonu
Go Entegrasyonu
Go ile eBPF program yönetimi - userspace controller pattern.
cilium/ebpf Temelleri
Döküman: ebpf-go.dev
Öğrenecekleriniz:
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go- BPF programını Go’ya bağlamaCollectionSpec,Program,Maptype’ları- Program attach/detach
- Map operasyonları (Go tarafından)
bpf2go İş Akışı
//go:generate go run github.com/cilium/ebpf/cmd/bpf2go counter xdp_prog.c
func main() {
objs := counterObjects{}
if err := loadCounterObjects(&objs, nil); err != nil {
log.Fatal(err)
}
defer objs.Close()
link, err := link.AttachXDP(link.XDPOptions{
Program: objs.XdpProg,
Interface: ifindex,
})
// ...
}
Pratik Proje
Building an eBPF Process Monitor with Go
- Process monitor: execve syscall hook
- Tracepoint kullanımı (
sys_enter_execve) - Perf buffer ile event okuma
- bpf2go ile Go binding oluşturma
- Repo
Userspace Controller Pattern
Bir production eBPF uygulamasının Go tarafı:
Map Management
// Map'e yazma
key := uint32(ipAddr)
value := uint32(1) // blocked
err := objs.Blocklist.Put(key, value)
// Map'ten okuma
var val uint32
err := objs.Blocklist.Lookup(key, &val)
// Map'ten silme
err := objs.Blocklist.Delete(key)
Ring Buffer Consumer
rd, err := ringbuf.NewReader(objs.Events, nil)
for {
record, err := rd.Read()
// record.RawSample işle
}
Production Gereksinimleri
- Graceful shutdown (signal handling)
- Prometheus metric’leri sunma
- Config hot-reload (map update)
- Health check endpoint