Ana içeriğe geç

systemd'de journalctl ile oturum açma

Bu makalede

Modern Linux dağıtımlarında (Ubuntu ≥ 16.04, Debian ≥ 8, RHEL/CentOS ≥ 7, Alma/Rocky ≥ 8), systemd yalnızca servisleri yönetmekle kalmaz—aynı zamanda journald aracılığıyla merkezi günlükleme sağlar ve journalctl kullanır.

The systemd journal collects:
- çekirdek mesajları (dmesg),
- nginx, sshd, docker ve diğerleri gibi servislerden gelen günlükler,
- standart stdoutstderr akışları daemon'lardan,
- denetim olayları (eğer auditd ile entegre ise).

Not

journald syslog ile paralel olarak çalışabilir (örneğin rsyslog veya syslog-ng)—günlükler çoğaltılabilir. Ancak journald genellikle klasik syslog'u tamamen değiştirir.

Hızlı Başlangıç: Temel Komutlar

Task Command
Tüm günlükleri (sayfalayıcı ile) görüntüle journalctl
Son 10 giriş journalctl -n
Günlükleri gerçek zamanlı takip et journalctl -f (analog of tail -f)
Son önyüklemeden beri günlükler journalctl -b
Belirli bir servis için günlükler journalctl -u nginx
Çekirdek günlükleri journalctl -k
Jurnal tarafından kullanılan disk alanı journalctl --disk-usage

Zaman ve Saat Dilimleri

Varsayılan olarak, journalctl yerel zamanı gösterir. Doğru yapılandırıldığını doğrulayın:

timedatectl status  

Çıktıyı aşağıdaki gibi satırlar için kontrol edin:

Local time: Thu 2025-11-07 15:32:11 
Time zone: Europe/Paris (PAR, +0100)

Saat Dilimini Yönetme

# Tüm mevcut saat dilimlerini listele
timedatectl list-timezones

# Ayarlayın (örneğin, Berlin için)
sudo timedatectl set-timezone Europe/Berlin

UTC'de Günlükleri Görüntüleme

journalctl --utc           # her zaman UTC
journalctl -b --utc        # mevcut önyükleme, UTC'de

Önyükleme Geçmişi

Varsayılan olarak, önceki önyüklemlerin günlükleri saklanmaz (yalnızca /run/log/journal/ içinde saklanır, yeniden başlatıldığında temizlenir). Onları saklamak için kalıcı depolamayı etkinleştirin:

sudo mkdir -p /var/log/journal
sudo systemd-tmpfiles --create --prefix /var/log/journal
sudo systemctl restart systemd-journald

Ya da yapılandırmayı manuel olarak düzenleyin:

sudo nano /etc/systemd/journald.conf

Yorum satırlarını kaldırın ve değiştirin:

[Journal]
Storage=persistent

Önyüklemelerle Çalışma

# Tüm kaydedilmiş önyüklemeleri listele
journalctl --list-boots

# Çıktı:
#  -2 abc123... Wed 2025-11-05 10:00:00 MSK—Wed 12:30:45 MSK
#  -1 def456... Thu 2025-11-06 09:15:22 MSK—Thu 18:44:10 MSK
#   0 xyz789... Fri 2025-11-07 08:20:05 MSK—running

# Önceki önyüklemin günlükleri
journalctl -b -1

# Önyükleme kimliğine göre günlükler
journalctl -b xyz789...

Log Filtreleme

Zamanla

# Belirtilen bir noktadan şu ana kadar
journalctl --since "2025-11-07 14:00:00"

# Bir dönem için
journalctl --since "2025-11-06" --until "2025-11-07 09:00:00"

# Kolaylaştırıcı anahtar kelimeler
journalctl --since today
journalctl --since yesterday
journalctl --since "2 hours ago"
journalctl --until now

Not

Desteklenen formatlar: YYYY-MM-DD, YYYY-MM-DD HH:MM:SS, today, yesterday, 1 hour ago, 5min ago.

Servis (unit) ile

# Nginx günlükleri
journalctl -u nginx

# .service uzantısı ile (isteğe bağlı ama doğru)
journalctl -u nginx.service

# Birden fazla servis aynı anda
journalctl -u nginx -u php-fpm --since today

# Sadece son 2 saatlik nginx hataları
journalctl -u nginx -p err --since "2 hours ago"

İşlem, kullanıcı, grup ile

# PID ile (örneğin nginx ana süreci)
journalctl _PID=12345

# Kullanıcının UID'si ile
journalctl _UID=33          # örneğin www-data
journalctl _UID=$(id -u nginx)

# Girişleri olan tüm UID'leri listele
journalctl -F _UID

# GID için de aynı
journalctl -F _GID

Öncelik seviyesi (ciddiyet) ile

Level Code Description
emerg 0 Sistem kullanılamaz
alert 1 Hemen harekete geçilmesi gerekir
crit 2 Kritik hatalar
err 3 Hatalar
warning 4 Uyarılar
notice 5 Önemli olaylar
info 6 Bilgilendirici mesajlar
debug 7 Hata ayıklama

Örnekler:

# Sadece hatalar ve üstü (err, crit, alert, emerg)
journalctl -p err

# Aynı şekilde sayısal kodla
journalctl -p 3

# Mevcut önyükleme için nginx hataları
journalctl -u nginx -p err -b

Çıktı Biçimlendirme

Temel seçenekler

--no-pager       # çıktı stdout'a (grep, tee, yönlendirme için)
--no-full        # uzun satırları kesme (varsayılan kesilmiş)
-n 50            # son 50 giriş
-f               # takip et (yeni girişlerin canlı görünümü)

Çıktı Biçimlendirme

Biçimler -o

Biçim Kullanım
short (varsayılan) Klasik syslog stili
short-iso ISO 8601 zaman: 2025-01-07T15:30:45+03:00
short-precise Mikro saniye ile zaman
cat Sadece mesaj metni (metadatasız) — betikler için kullanışlı
json JSON, satır başına bir giriş (makine tarafından okunabilir)
json-pretty İnsan okunabilir JSON (hata ayıklama/analiz için)
verbose Tüm alanlar, gizli _SOURCE_REALTIME_TIMESTAMP, _BOOT_ID vb. dahil

Örnekler:

# nginx için insan okunabilir JSON  
journalctl -u nginx -o json-pretty --since today  
# Sadece mesaj metni  
journalctl -u nginx -p err -o cat  
# Analiz için dosyaya aktar  
journalctl -b -u docker --no-pager > docker_boot.log  

Günlük boyutunu yönetme

Geçerli boyut

# --vacuum-size=100M  
journalctl --vacuum-size=100M  

Günlük temizleme

Boyutuna göre

# --vacuum-files=5  
journalctl --vacuum-files=5  

Zamana göre

# --vacuum-time=1d  
journalctl --vacuum-time=1d  

Not

Desteklenen ekler:
s, m, h, days, weeks, months, years.

Kalıcı sınırlar (yapılandırmada)

/etc/systemd/journald.conf dosyasını düzenleyin:

- SystemMaxUse=1G  
+ SystemMaxUse=500M  

Değişikliklerden sonra:

systemctl restart systemd-journald  

Not

journald.conf'daki değişiklikler zaten biriktirilmiş günlükleri etkilemez — temizlemek için --vacuum-* kullanın.

Gelişmiş Teknikler

İçerik ile arama (grep ile)

journalctl -u nginx | grep "error"

Olay sıklığı analizi

journalctl --since "2023-01-01" --until "2023-01-31" | grep "error" | wc -l

Dışa aktar ve yedekle

journalctl -b -u docker --no-pager > docker_boot.log

Sıkça Sorulan Sorular

Neden journalctl önceki yeniden başlatmalardan gelen günlükleri göstermez? A: Kontrol edin Storage=persistent etkinleştirilmiş mi ve /var/log/journal/ var mı. Bu yoksa, günlükler yalnızca RAM'de /run içinde saklanır.

Journald'ı nasıl devre dışı bırakırım ve rsyslog'a geri dönerim? A: Journald'ı tamamen devre dışı bırakamazsınız (systemd'in bir parçasıdır), ancak yapabilirsiniz: - /etc/systemd/journald.conf üzerinden veya systemd-journaldSystemMaxUse=0 ile kullanarak günlükleri rsyslog'a yönlendirin. - Veya journald'ı rsyslog için kaynak olarak devre dışı bırakın, yalnızca onu bırakın.

Günlükler şifrelenebilir mi? A: journald varsayılan olarak şifreleme desteklemez. Bunun için kullanabilirsiniz: - logrotate + gpg, - Veya üçüncü taraf SIEM sistemleri (Graylog, ELK, Loki + Promtail).