sysdig ile Konteyner ve Süreç Davranışını Gerçek Zamanlı Olarak İzleme ve Kaydetme
Üretim ortamında beklenmedik bir şey olduğunda, ilk içgüdün top ya da ps açmak olur. Ama bu araçlar sana sadece o anın fotoğrafını gösterir. Bir konteynerin neden CPU’yu %99’a çıkardığını, hangi prosesin o gece 03:00’te /etc/passwd dosyasını okuduğunu ya da bir Java uygulamasının hangi sistem çağrısıyla takılıp kaldığını anlamak istiyorsan, farklı bir araca ihtiyacın var. İşte tam bu noktada sysdig devreye giriyor.
sysdig, Linux kernel seviyesinde sistem çağrılarını (syscall) yakalayan, bunları anlamlı bir şekilde filtreleyip sunan ve bunu hem gerçek zamanlı hem de kayıt/tekrar oynatma modunda yapabilen bir araç. strace’den güçlü, tcpdump’ın kavramsal kardeşi ama sistem çağrıları için. Konteyner farkındalığı built-in olarak geliyor, yani Docker, containerd veya Kubernetes pod’larını doğrudan izleyebiliyorsun.
sysdig’i Tanımak: Kurulum ve İlk Adımlar
Çoğu dağıtımda paket yöneticisi üzerinden kurabilirsin ama kernel modülüne ihtiyaç duyduğu için biraz dikkat gerekiyor.
# Ubuntu/Debian için
curl -s https://s3.amazonaws.com/download.draios.com/stable/install-sysdig | sudo bash
# RHEL/CentOS/Rocky için
sudo rpm --import https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public
sudo curl -s -o /etc/yum.repos.d/draios.repo
https://s3.amazonaws.com/download.draios.com/stable/rpm/draios.repo
sudo yum install sysdig -y
# Kernel modülünü yükle
sudo modprobe sysdig-probe
Kurulumdan sonra sysdig komutunu çalıştırdığında ekran hızla dolmaya başlar, bu normal. Her satır bir sistem çağrısını temsil ediyor. Panik yapma, filtreleri öğrendikten sonra bu ham veri altın madeni haline geliyor.
# Temel çalıştırma, tüm sistem çağrılarını gösterir
sudo sysdig
# Çıktıyı daha okunabilir yapmak için basit bir format
sudo sysdig -p "%evt.time %proc.name %evt.type %evt.args"
Temel Filtreler ve Sözdizimi
sysdig’in filtreleme dili, Wireshark’ı kullananlar için oldukça tanıdık gelecektir. Mantıksal operatörler, karşılaştırmalar, alan adları. Öğrenme eğrisi var ama bir kez oturursa artık onsuz çalışamıyorsun.
Temel alan adları:
- proc.name: Proses adı
- proc.pid: Proses ID
- evt.type: Sistem çağrısı türü (open, read, write, connect vs.)
- evt.dir: Sistem çağrısı yönü,
>giriş<çıkış - fd.name: Dosya tanımlayıcı adı (dosya yolu, soket adresi)
- container.name: Konteyner adı
- container.id: Konteyner ID
- user.name: Kullanıcı adı
# Sadece nginx prosesinin sistem çağrılarını izle
sudo sysdig proc.name=nginx
# Belirli bir PID'yi izle
sudo sysdig proc.pid=1234
# Sadece dosya açma işlemlerini göster
sudo sysdig evt.type=open
# Belirli bir dosyaya erişimi izle
sudo sysdig "fd.name contains /etc/passwd"
# Birden fazla koşul
sudo sysdig "proc.name=python and evt.type=connect"
Konteyner Ortamlarında Kullanım
Asıl güç burada ortaya çıkıyor. Docker soketine erişimle sysdig, konteyner metadata’sını otomatik olarak enriche ediyor. Konteyner adı, image adı, container ID bilgileri syscall verisiyle birleşiyor.
# Tüm konteynerlerin ağ bağlantılarını izle
sudo sysdig -p "%container.name %proc.name %fd.name"
"container.id != host and evt.type=connect"
# Sadece belirli bir konteyneri izle
sudo sysdig "container.name=my-nginx-container"
# Bir konteynerdeki tüm dosya yazma işlemleri
sudo sysdig -p "%container.name %proc.name %fd.name"
"container.name=my-app and evt.type=write and fd.type=file"
Bir keresinde staging ortamında bir Java servisinin ara sıra yavaşladığını görmüştük. JVM heap dump almak, GC logları açmak, her şeyi denedik. sysdig ile baktığımızda, konteynerin belirli aralıklarda /tmp dizinine sürekli büyük dosyalar yazdığını ve bunun aslında bir konfigürasyon yükleyicisinin periyodik olarak çalışmasından kaynaklandığını fark ettik. Beş dakikada çözdük, önceki iki günü harcamıştık.
Kubernetes Pod İzleme
Kubernetes ortamında çalışıyorsan, pod ve namespace bilgilerine de erişebilirsin:
# Belirli bir Kubernetes namespace'indeki tüm aktiviteyi izle
sudo sysdig "k8s.ns.name=production"
# Belirli bir pod'u izle
sudo sysdig "k8s.pod.name=my-api-pod-7d9f8b-xkp2q"
# Tüm pod'larda dış ağ bağlantılarını izle
sudo sysdig -p "%k8s.pod.name %proc.name %fd.rip"
"k8s.ns.name=production and evt.type=connect"
Kayıt Almak ve Tekrar Oynatmak
sysdig’i tcpdump’tan ayıran en pratik özelliklerinden biri kayıt/tekrar mekanizması. Üretim ortamında bir sorunu an itibariyle yakalayıp sonra sakin kafayla inceleyebiliyorsun.
# Belirli bir konteynerin aktivitesini kaydet
sudo sysdig -w /tmp/container-capture.scap
"container.name=payment-service"
# Belirli bir süre kayıt al (30 saniye)
sudo timeout 30 sysdig -w /tmp/incident-$(date +%Y%m%d-%H%M%S).scap
# Dosya boyutunu sınırla ve döndür (100MB'lık dosyalar)
sudo sysdig -W 5 -C 100 -w /tmp/sysdig-capture.scap
Kayıt parametreleri:
- -w dosya.scap: Çıktıyı dosyaya yaz
- -r dosya.scap: Kaydedilmiş dosyayı oku
- -W sayı: Döndürülecek maksimum dosya sayısı
- -C megabyte: Her dosyanın maksimum boyutu
- -G saniye: Zaman bazlı döndürme
Kaydedilen dosyayı daha sonra okumak için:
# Kaydı tekrar oynat
sudo sysdig -r /tmp/container-capture.scap
# Kaydı filtrele
sudo sysdig -r /tmp/container-capture.scap
"evt.type=open and fd.name contains /etc"
# Kaydı okunabilir formatta göster
sudo sysdig -r /tmp/incident.scap
-p "%evt.time %proc.name(%proc.pid) %evt.type %fd.name"
Güvenlik Odaklı Kullanım Senaryoları
sysdig’in en değerli olduğu yer güvenlik olaylarını tespit etmek ve forensic analiz yapmak. Özellikle konteyner güvenliğinde bu araç gerçekten fark yaratıyor.
Şüpheli Dosya Erişimlerini İzleme
# /etc altındaki tüm okuma/yazma işlemlerini izle
sudo sysdig -p "%evt.time %proc.name %user.name %fd.name"
"evt.type in (open, openat) and fd.name startswith /etc"
# Özellikle hassas dosyalara erişim
sudo sysdig -p "%evt.time %container.name %proc.name %fd.name"
"(fd.name=/etc/passwd or fd.name=/etc/shadow or fd.name=/etc/sudoers)
and evt.type=open"
# Yeni çalıştırılabilir dosya oluşturma
sudo sysdig -p "%evt.time %proc.name %fd.name"
"evt.type=open and evt.arg.flags contains O_CREAT
and (fd.name contains /bin or fd.name contains /usr/bin)"
Geçen yıl bir müşteri ortamında ilginç bir durum yaşadık. Bir Python konteynerinde kimse fark etmemişti ama sysdig kaydı incelendiğinde, konteynerin curl ile dış bir IP’ye bağlandığını ve ardından bir script indirip çalıştırdığını gördük. Supply chain attack’ın erken tespitiydi bu.
Ağ Aktivitesini İzleme
# Tüm outbound bağlantılar
sudo sysdig -p "%proc.name %container.name %fd.rip:%fd.rport"
"evt.type=connect and evt.dir=<"
# Beklenmedik portlara bağlantı
sudo sysdig -p "%evt.time %proc.name %container.name %fd.rip:%fd.rport"
"evt.type=connect and not fd.rport in (80, 443, 53, 22)"
# DNS sorgularını izle
sudo sysdig -p "%proc.name %fd.rip"
"evt.type=connect and fd.rport=53"
chisels: sysdig’in Hazır Analiz Modülleri
sysdig, Lua ile yazılmış hazır analiz modülleri sunuyor. Bu modüllere “chisel” adı veriliyor. Ham veriyi sindirmek yerine doğrudan anlamlı çıktı almak istiyorsan bunları kullan.
# Mevcut chiselleri listele
sysdig -cl
# Bir chisel hakkında detaylı bilgi
sysdig -i topprocs_cpu
# En fazla CPU kullanan prosesleri göster
sudo sysdig -c topprocs_cpu
# En fazla ağ trafiği üreten prosesler
sudo sysdig -c topprocs_net
# En fazla disk I/O yapan prosesler
sudo sysdig -c topprocs_file
# Konteyner bazlı I/O özeti
sudo sysdig -c topcontainers_file
# Belirli bir konteynerin yaptığı tüm sistem çağrıları özeti
sudo sysdig -c topscalls "container.name=my-api"
Sık kullanılan chisels:
- topprocs_cpu: CPU kullanan top prosesler
- topprocs_net: Ağ trafiği bazında top prosesler
- topprocs_file: Dosya I/O bazında top prosesler
- topcontainers_cpu: Konteyner bazlı CPU kullanımı
- topcontainers_net: Konteyner bazlı ağ kullanımı
- spy_users: Kullanıcı aktivitelerini izle
- shellshock_detect: Shellshock saldırı tespiti
- httptop: HTTP istek özeti
# HTTP trafiğini izle
sudo sysdig -c httptop
# Belirli bir konteynerde açılan dosyaları göster
sudo sysdig -c topfiles_bytes "container.name=nginx"
# Kullanıcıların yaptığı komutları izle
sudo sysdig -c spy_users
Gerçek Dünya Senaryosu: Konteyner Forensic Analizi
Diyelim ki bir üretim olayı yaşandı ve “payment-api” konteyneriniz anormallik gösterdi. Olay anında sysdig çalışmıyordu ama şimdi aynı davranışı reproduce etmeye çalışıyorsun. İşte tipik bir forensic akışı:
# 1. Konteyneri izlemeye başla, kayıt al
sudo sysdig -w /tmp/payment-api-$(date +%s).scap
"container.name=payment-api" &
SYSDIG_PID=$!
# 2. Olayı reproduce et veya bekle
# 3. Kaydı durdur
kill $SYSDIG_PID
# 4. Kaydı analiz et - ağ bağlantıları
sudo sysdig -r /tmp/payment-api-*.scap
-p "%evt.time %proc.name %fd.rip:%fd.rport"
"evt.type=connect"
# 5. Dosya erişimlerini incele
sudo sysdig -r /tmp/payment-api-*.scap
-p "%evt.time %proc.name %fd.name"
"evt.type in (open, openat) and fd.type=file"
# 6. Yeni proses başlatmalarını kontrol et
sudo sysdig -r /tmp/payment-api-*.scap
-p "%evt.time %proc.name %proc.cmdline"
"evt.type=execve"
Proses Ağaç Analizi
Bir konteynerde beklenmedik bir proses görüyorsan, onun nasıl başlatıldığını anlamak kritik:
# Belirli bir prosesi spawn eden parent prosesleri bul
sudo sysdig -p "%evt.time %proc.pname -> %proc.name %proc.cmdline"
"evt.type=execve and proc.name=curl"
# Shell spawn etme girişimlerini izle (güvenlik açısından kritik)
sudo sysdig -p "%evt.time %container.name %proc.pname %proc.cmdline"
"evt.type=execve and proc.name in (bash, sh, zsh, dash)"
Performans Analizi için sysdig
Güvenliğin dışında, performans sorunlarını da derinlemesine inceleyebilirsin.
# Yavaş sistem çağrılarını bul (100ms üzeri)
sudo sysdig -p "%evt.time %proc.name %evt.type %evt.latency"
"evt.latency > 100000000"
# Disk I/O gecikmesi
sudo sysdig -p "%evt.time %proc.name %fd.name %evt.latency"
"evt.type=read and evt.latency > 50000000 and fd.type=file"
# Bağlantı kurma süreleri
sudo sysdig -c proc_exec_time "proc.name=java"
Performans analizi için sık kullanılan parametreler:
- evt.latency: Sistem çağrısının tamamlanma süresi (nanosaniye)
- evt.count: Belirli bir zaman dilimindeki çağrı sayısı
- thread.exectime: İş parçacığı çalışma süresi
- proc.vmrss: Proses resident memory kullanımı
csysdig: Terminal UI ile Etkileşimli İzleme
Ham komut satırı çıktısı her zaman yeterli olmayabilir. csysdig, sysdig’in ncurses tabanlı etkileşimli arayüzü. htop’u seviyorsan, csysdig’i de seveceksin.
# csysdig'i başlat
sudo csysdig
# Belirli bir görünümle başlat
sudo csysdig -v containers
# Sadece belirli bir konteyneri göster
sudo csysdig "container.name=my-app"
csysdig içinde F2 ile görünüm listesini açabilirsin. Containers, Processes, Network Connections, Files gibi hazır görünümler var. Bir konteynere odaklanıp içinde drill-down yapabilir, hangi proseslerin çalıştığını, hangi bağlantıları kurduğunu görebilirsin.
Falco ile Entegrasyon: Kural Tabanlı Tespit
sysdig projesinin bir parçası olan Falco, sysdig’in veri akışı üzerine kural motorunu koyuyor. Basit shell komutları yerine, “bir konteyner içinden başka konteynere yazma”, “sistemde yeni bir kullanıcı oluşturuldu” gibi karmaşık davranışları tespit edebiliyorsun. Ama bu başlı başına ayrı bir yazı konusu.
Pratik İpuçları ve Dikkat Edilmesi Gerekenler
Birkaç şeyi baştan söylemek lazım. sysdig kernel modülü gerektiriyor ve bu modül her kernel güncellemesinde yeniden derlenmesi gerekebiliyor. Yönetilen Kubernetes ortamlarında (GKE, EKS gibi) kernel modülü yüklemek her zaman mümkün olmayabiliyor. Bu durumlar için eBPF tabanlı modu mevcut:
# eBPF modunda çalıştır (kernel modülü gerektirmez)
sudo SYSDIG_BPF_PROBE="" sysdig
# Ya da
sudo sysdig --bpf
Dikkat edilmesi gereken noktalar:
- Performans etkisi: sysdig her sistem çağrısını yakaladığı için yüksek trafikli sistemlerde CPU overhead yaratabilir. Üretimde filtre olmadan çalıştırma.
- Disk alanı: Kayıt alırken scap dosyaları hızla büyüyebilir. -C ve -W parametrelerini kullan.
- Güvenlik: sysdig root yetkisi gerektiriyor ve çok hassas veriler yakalayabiliyor. Kayıt dosyalarını şifreli disklerde sakla.
- Kernel uyumluluğu: Kernel versiyon güncellemelerinde sysdig-probe’un da güncellenmesi gerekiyor.
Sonuç
sysdig, sistem yöneticisi toolbox’ının en güçlü ama maalesef en az tanınan araçlarından biri. strace tek bir prosese bakıyor, tcpdump sadece ağa bakıyor, perf performansa odaklanıyor. sysdig tüm bu perspektifleri tek çatı altında topluyor ve bunu konteyner farkındalığıyla yapıyor.
Özellikle konteynerli ortamlarda, “bu konteyner içinde tam olarak ne oluyor?” sorusunun cevabını vermek artık çok daha kolay. Bir güvenlik olayında forensic analiz yapmak, performans sorunlarını syscall seviyesinde incelemek, beklenmedik davranışları kayıt altına alıp sakin kafayla incelemek gibi senaryolarda sysdig’in değeri hemen ortaya çıkıyor.
Başlangıç olarak tavsiyem şu: önce geliştirme ortamında bir konteyner çalıştır, sysdig ile izle, ne kadar derin bilgiye ulaşabildiğini gör. Sonra chiselleri keşfet. Sonra bir kayıt al ve tekrar oynat. Bu üç adımı geçtiğinde, bir dahaki üretim olayında “acaba ne oluyor” diye değil, “hadi bakalım tam olarak ne olmuş” diye yaklaşacaksın.
