Giriş
eBPF (extended Berkeley Packet Filter), modern Linux çekirdeğinde çalışan küçük programlar yazarak sistem davranışını güvenli ve yüksek performanslı şekilde gözlemleme imkânı sunar. Bu rehber, temel kavramlardan başlayıp pratik izleme örneklerine ve üretimde kullanılabilecek yaklaşımlara kadar adım adım ilerler. Hedef okuyucu; kernel gözlemi, uygulama performansı analizi veya ağ izleme gibi ileri seviye konulara girmek isteyen geliştirici/operasyon ekipleridir.
Ön Koşullar ve Araçlar
Başlamadan önce gereksinimler: Linux çekirdeğinizin 4.9+ veya modern dağıtımlarda güncel bir kernel olması, clang ve llvm ile derleme araçları, bpftool, libbpf veya hızlı prototip için bpftrace/bcc paketleri. Ayrıca root yetkisi veya CAP_BPF/CAP_PERFMON benzeri yetkiler gerekecektir. Dağıtımınıza göre örnek kurulum: sudo apt install clang llvm libbpf-dev bpftool bpftrace.
Temel Kavramlar
eBPF programları kernel içinde güvenli bir şekilde çalışır; verifier adı verilen bir doğrulayıcı potansiyel tehlikeli işlemleri engeller. Programlar, kprobe/uprobes ile fonksiyon başlangıç/sonlarına, tracepoint'lere, ve XDP ile ağ katmanına bağlanabilir. Verileri kullanıcı alanına aktarmak için BPF haritaları (maps) ve perf buffer gibi mekanizmalar kullanılır. Map tipleri: hash, array, percpu, ring buffer vb.; her biri farklı senaryolara uygundur.
Hızlı Başlangıç: bpftrace ile Bir Satırlık İzleme
Hızlı prototip için bpftrace mükemmeldir. Örneğin dosya açma süresini görmek için: bpftrace -e 'kprobe:vfs_open { @[comm] = count(); }'. Bu komut, kernel'in vfs_open kancasına takılarak süreç başına açma sayısını sayar. Daha gelişmiş, gecikme histogramı için: bpftrace -e 'kprobe:do_sys_open { @t[tid] = nsecs; } kretprobe:do_sys_open /@t[tid]/ { @lat[hist(nsecs - @t[tid])] = count(); delete(@t[tid]); }'.
Üretim İçin: Libbpf ile eBPF Programı Yazmak
Üretim ortamında bpftrace rahat fakat sınırlıdır; libbpf ile C tabanlı eBPF programları daha kontrollü ve performanslıdır. Tipik akış: eBPF C kodu yazılır, clang -O2 -target bpf -c program.c -o program.o ile derlenir; kullanıcı alanı yükleyici ise libbpf kullanarak program.o'yu kernel'e yükler, map'lerle iletişim kurar. Map üzerinden histogram veya sayaçları okuyup JSON/Prometheus formatına çevirebilirsiniz. Önemli nokta: verifier hatalarını çözmek için kodu küçük parçalara bölün ve helper fonksiyonları kullanın.
Pratik Örnek: Bir Uygulamanın Fonksiyon Gecikmesini Ölçme (uprobes)
Kendi uygulamanızın belirli bir fonksiyonunun gecikmesini ölçmek için uprobe kullanın. Adımlar: (1) hedef ikili dosyanın yolunu ve sembolü belirleyin; (2) eBPF programında uprobe ile girişte timestamp kaydedin; (3) uretprobe ile çıkışta farkı hesaplayıp perf buffer ile kullanıcı alanına gönderin. Kullanıcı alanı Python veya C ile perf buffer'dan veriyi alıp histogram oluşturur. Bu yöntem, GC/pthread gibi uygulama içi etkileşimleri ölçmede çok yararlıdır.
Ağ Gözlemi: XDP ve TC Karşılaştırması
Ağ seviyesinde düşük gecikmeli filtreleme/ölçüm için XDP uygundur; paketler çekirdeğe bile ulaşmadan işlenir. Ancak XDP'nin kısıtlamaları vardır (örneğin skb erişimi yok). TC (cls_bpf) ise daha esnektir fakat biraz daha yüksek maliyetlidir. Üretimde, DDoS mitigasyonu veya L7 yük dengeleme öncesi hızlı ön filtreleme için XDP tercih edilirken, detaylı paket analizleri için TC kullanılabilir.
Gözlemleme Yöntemleri ve En İyi Uygulamalar
Performans açısından eBPF programları minimal iş yapmalı; ağır hesaplamalar kullanıcı alanına bırakılmalı. Map boyutlarını ve per-CPU kullanımını dikkatle planlayın. Verifier hatalarını azaltmak için bellek erişimlerini sınırlandırın ve helper fonksiyonları tercih edin. Güvenlik için yalnızca gerekli kapasiteleri verin ve production'da testlemeyi aşamalı yapın. Ayrıca bpftool ile yüklü programları ve map'leri takip etmek işleri kolaylaştırır: bpftool prog show, bpftool map dump.
Sırada Ne Var?
eBPF ekosistemi hızla büyüyor: libbpf, bpftool, bpftrace ve yüksek seviye kütüphanelerle (örn. gobpf, iovisor) entegrasyon artıyor. Sonraki adım olarak, sisteminiz için spesifik metrikleri belirleyip küçük eBPF programlarıyla prototip oluşturun, ardından performans testleri ve güvenlik incelemeleriyle üretime taşıyın. eBPF öğrenirken çekirdek logları, verifier çıktılarını ve bpftool'u etkin kullanmak başarıyı hızlandırır.
.png)


.jpg)
.jpg)
.jpg)
.jpg)
.jpg)

