Skip to content
VDS · İzleme ve performans

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 ve systemctl reset-failed myapp komutunu ç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'ı -u olmadan 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/journal dizini 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/log iç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.