1. #!trpst#trp-gettext data-...
  2. #!trpst#trp-gettext data-...
  3. Linux
  4. Servisler
  5. journalctl ile Sistem ve Servis Loglarını Analiz Etmek

journalctl ile Sistem ve Servis Loglarını Analiz Etmek

Print

Modern Linux dağıtımlarında systemd başlatma sisteminin gelişiyle birlikte, geleneksel düz metin /var/log/syslog veya /var/log/messages dosyalarının yerini ikili (binary) formatta saklanan ve indekslenen systemd-journald almıştır. Bir servis çöktüğünde veya sistem beklenmedik şekilde yeniden başladığında, journalctl ile log analizi yapmak sorunun kaynağına saniyeler içinde ulaşmanızı sağlar.

Bu rehberde; journalctl komutunun temel filtreleme yeteneklerini, belirli bir servisin loglarını izlemeyi (-u), canlı log takibini (-f), zaman aralıklarına göre sorgulamayı ve logların kapladığı disk alanını yönetmeyi öğreneceğiz.


journald Mimarisi Neden İkili (Binary) Format Kullanır?

Klasik syslog metin dosyalarında milyonlarca satır arasında arama yapmak grep veya awk gerektirir ve disk I/O yükü fazladır. Journald ise logları yapılandırılmış (structured) meta verilerle (PID, UID, Systemd Unit, Zaman Damgası, Öncelik Seviyesi) ikili formatta indeksler.

Bu sayede:

  • Loglar arasında milisaniyeler içinde hassas zaman ve servis filtrelemesi yapılabilir.
  • Log manipülasyonu (silme/tahrifat) engellenir.
  • Çekirdek (Kernel) logları (dmesg) ile kullanıcı alanı (userspace) servis logları tek bir tutarlı veritabanında birleştirilir.

1. Belirli Bir Servisin Loglarını İncelemek (-u)

En sık ihtiyaç duyulan işlem çöken veya hata veren belirli bir servisi sorgulamaktır:

# Nginx web sunucusunun tüm loglarını listele
sudo journalctl -u nginx

# Çoklu servisleri birlikte incele (Örn: Nginx ve PHP-FPM)
sudo journalctl -u nginx -u php8.2-fpm

2. Canlı Log Takibi: tail -f Davranışı (-f)

Geliştirme yaparken veya bir hatayı anlık olarak tetiklerken logların akışını canlı izlemek için -f (follow) parametresi kullanılır:

# Nginx loglarını canlı olarak terminale akıt
sudo journalctl -u nginx -f

# Son 50 satırı göster ve canlı takibe devam et
sudo journalctl -u nginx -n 50 -f

3. Zamana Göre Log Filtreleme (--since ve --until)

Bir çökme belirli bir saatte gerçekleştiyse tüm geçmişi okumak yerine zaman penceresi belirleyebilirsiniz:

# Bugüne ait logları göster
sudo journalctl --since today

# Dün saat 14:00 ile 16:00 arasındaki logları sorgula
sudo journalctl --since "2026-10-11 14:00:00" --until "2026-10-11 16:00:00"

# Son 30 dakikaya ait logları getir
sudo journalctl --since "30 min ago"

# Son 2 saatin SSH yetkilendirme loglarını incele
sudo journalctl -u ssh --since "2 hours ago"

4. Sistem Açılışlarına (Boot) Göre Filtreleme (-b)

Sunucunuz beklenmedik şekilde yeniden başladıysa, önceki oturumun kapanmadan hemen önceki loglarını görmek hayati önem taşır:

# Mevcut (en son) açılışa ait loglar
sudo journalctl -b

# Bir önceki açılışa ait loglar (Sistem çökmeden hemen önceki kayıtlar)
sudo journalctl -b -1

# İki önceki açılışa ait loglar
sudo journalctl -b -2

# Sistemdeki tüm kaydedilmiş boot listesini gör
sudo journalctl --list-boots

5. Öncelik Seviyesine (Hata Derecesine) Göre Filtreleme (-p)

Standart bilgi ve debug mesajlarını eleyip yalnızca kritik hatalara ve uyarılara odaklanmak için -p (priority) bayrağı kullanılır. Standart syslog öncelikleri (0-7 arası veya isimle) geçerlidir:

SeviyeİsimAnlamı
0emergSistem kullanılamaz durumda
1alertAcil müdahale gerekli
2critKritik donanım/çekirdek hatası
3errHata (Error)
4warningUyarı (Warning)
5noticeNormal ama önemli durum
6infoBilgilendirme mesajı
7debugGeliştirici hata ayıklama mesajı
# Sadece Hata (err) ve daha kritik seviyedeki logları göster
sudo journalctl -p err..emerg

# Son açılıştaki tüm uyarı ve hataları listele
sudo journalctl -b -p warning

6. Çekirdek (Kernel) Logları: dmesg Alternatifi (-k)

Donanım aygıtları, USB tak-çıkar olayları veya Out-Of-Memory (OOM-Killer) bellek yetersizliği durumlarını yakalamak için:

# Sadece Linux çekirdeğine ait kayıtları getir
sudo journalctl -k

# Son açılıştaki çekirdek hatalarını listele
sudo journalctl -k -b -p err

7. Çıktı Formatını Değiştirmek: JSON Formatı (-o)

Logları ElasticSearch, Graylog veya harici bir log analiz sistemine aktarmak istiyorsanız yapılandırılmış JSON çıktısı alabilirsiniz:

# Logları tek satırlık JSON formatında dök
sudo journalctl -u nginx -n 5 -o json-pretty

8. Journal Disk Alanını Yönetmek ve Temizlemek

Logların diski doldurmasını önlemek için df, du ve ncdu rehberimizde bahsettiğimiz vacuum komutları uygulanır:

# Mevcut journal boyutunu öğren
journalctl --disk-usage

# 500 MB'tan büyük eski logları temizle
sudo journalctl --vacuum-size=500M

# 14 günden eski kayıtları sil
sudo journalctl --vacuum-time=14d

Yapılandırmayı kalıcı kılmak için /etc/systemd/journald.conf dosyasında SystemMaxUse=1G ayarı tanımlanabilir.


Özet

journalctl, Linux sunucularında hata teşhisi için en güçlü ve modern araçtır. Servis adıyla (-u), anlık akışla (-f), zamanla (--since) ve hata ciddiyetiyle (-p) filtreleme yaparak karmaşık sistem problemlerini hızla çözebilirsiniz.

Tags , , , ,

How can we help?