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:
Çıktıyı aşağıdaki gibi satırlar için kontrol edin:
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¶
Ö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:
Yorum satırlarını kaldırın ve değiştirin:
Ö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¶
Günlük temizleme¶
Boyutuna göre¶
Zamana göre¶
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:
Değişikliklerden sonra:
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)¶
Olay sıklığı analizi¶
Dışa aktar ve yedekle¶
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-journald'ı SystemMaxUse=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).