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ğlama
  • CollectionSpec, Program, Map type’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