systemd logları: sade dille journalctl
Logda bir servis hatasının nedenini nasıl bulursun, ihtiyacın olanı zamana ve seviyeye göre nasıl filtreler ve logların tüm diski yemesini nasıl önlersin.
23 Ağustos 2026 tarihinde güncellendi
Sistemde olan neredeyse her şey systemd journal'a kaydedilir. Bir servis başlamaz, makine kendi kendine yeniden başlar, site 502 döner — cevap genellikle çoktan kaydedilmiştir, sadece nasıl soracağını bilmen gerekir.
Yeterli olan beş komut
journalctl -u nginx -n 50 --no-pager # last 50 lines of one service
journalctl -u nginx -f # follow in real time
journalctl -p err -b # only errors since boot
journalctl --since "10 min ago" # everything for the last ten minutes
journalctl -b -1 -e # previous boot log, end of file
Sonuncusu özellikle ani bir yeniden başlatmadan sonra çok değerlidir: -b -1 önceki oturumu açar ve sonunda bunun bir kernel panic mi, OOM killer mı yoksa temiz bir kapanma mı olduğunu görebilirsin.
-p içindeki seviyeler: emerg, alert, crit, err, warning, notice, info, debug. Belirtilen seviye, daha önemli olanların tümünü kapsar.
Başarısız bir servisi teşhis etme
systemctl status myapp
journalctl -u myapp --since today -p warning
systemctl status çıkış kodunu ve son satırları verir, journalctl ise tam resmi gösterir. Şunlara bak:
Main process exited, code=exited, status=1— uygulama kendi kendine hata vererek kapandı, sebep bir üst satırda;Failed to start ... Permission denied— bir dosya, dizin veya 1024 altı bir port üzerindeki izinler;- Çekirdekten gelen
Killed process ... (java) total-vm...— OOM killer devreye girdi, Bellek yetersiz yazısını oku; Start request repeated too quickly— servis crash döngüsünde, systemd onu başlatmayı bıraktı; sebebi düzelt vesystemctl reset-failed myappkomutunu çalıştır.
Sistemdeki bozuk her şeyin listesi: systemctl --failed.
Zaman kazandıran filtreler
journalctl --since "2026-08-22 03:00" --until "2026-08-22 04:00"
journalctl -u nginx -u php-fpm # several services at once
journalctl _PID=1432 # by specific process
journalctl -k # only kernel messages
journalctl -u sshd | grep "Failed password" | tail -20
grep ile birleştir, ama unutma: --no-pager olmadan journalctl bir pager açar, q ile çık.
Journal'ın diski yemesini engelleme
Varsayılan olarak journal, bölümün %10'una kadar büyür. 40 GB diskli VDS-1'de bu dört gigabayt eder — fark edilir bir miktar.
journalctl --disk-usage
journalctl --vacuum-size=200M
journalctl --vacuum-time=14d
Kalıcı sınır /etc/systemd/journald.conf içindedir:
[Journal]
SystemMaxUse=300M
MaxRetentionSec=1month
Sonra systemctl restart systemd-journald.
Sık yapılan hatalar
- Journal'ı
-uolmadan okumak. Genel akış servis kayıtlarıyla dolar ve aradığın satır kaybolur. Her zaman bir servise veya seviyeye daralt. - Yeniden başlatmadan sonra geçmişi kaybetmek.
/var/log/journaldizini yoksa journal yalnızca bellekte yaşar. Oluştur:mkdir -p /var/log/journal && systemd-tmpfiles --create --prefix /var/log/journal. - Uygulama hatalarını orada aramak. Nginx, PostgreSQL ve benzerleri kendi dosyalarına da
/var/logiçine yazar. Journal boşsa oraya bak.
Disk dolduğunda journalctl, yer açılana kadar çalışmayı reddedebilir. Bu durum Disk alanı yetersiz yazısında ele alınmıştır.