- Konu sahibi
- #1
Journalctl ile servis logları nasıl filtrelenir?
Bir systemd servisinin loglarını görmek için terminalde
journalctl -u servis-adi.service komutunu çalıştırın. Bu komut systemd/journald kullanan Linux içindir; servis adı dağıtıma göre değişebilir. Örneğin Nginx kayıtları için journalctl -u nginx.service, yalnız mevcut açılıştan sonraki kayıtlar için journalctl -b -u nginx.service kullanılır. Çıktıyı daraltmak için zaman, öncelik, işlem kimliği veya canlı takip seçenekleri ekleyebilirsiniz.Temel filtreler nasıl çalışır?
-u systemd birimine, yani servisin adına göre filtreler. Servis adını bilmiyorsanız systemctl list-units --type=service veya systemctl status servis-adi.service ile kontrol edin. journalctl kayıtları varsayılan olarak en eskiden yeniye doğru gösterir; yalnız son kayıtları almak için -n kullanılır.
Kod:
journalctl -u ssh.service -n 50 --no-pager
journalctl -u ssh.service --since "1 hour ago"
journalctl -u ssh.service -p err
journalctl -u ssh.service -f
Bazı dağıtımlarda ssh.service yerine sshd.service bulunur; gerçek birim adını önce doğrulayın. İlk komut son 50 kaydı gösterir ve ekranı etkileşimli okuyucuya açmaz. İkinci komut son bir saatlik kayıtlarla sınırlar. Üçüncü komutta tek err düzeyi, emerg (0) ile err (3) arasını kapsar. err..alert aralığı emerg düzeyini dışarıda bırakacağından aynı anlamda kullanılmaz. Dördüncü komut yeni kayıtları oluştukça izler; izlemeyi
Ctrl+C ile durdurabilirsiniz.Filtre seçerken amaçla eşleşen en dar komutu kullanmak, sorunun kaynağını daha hızlı ayırır:
| Amaç | Komut | Ne gösterir? |
|---|---|---|
| Servisin tüm kayıtları | journalctl -u app.service | Birime ait journal kayıtları |
| Son açılıştaki kayıtlar | journalctl -b -u app.service | Mevcut sistem açılışından sonraki kayıtlar |
| Yalnız hatalar | journalctl -u app.service -p err | Hata ve daha ciddi öncelikler |
| Canlı takip | journalctl -u app.service -f | Yeni gelen kayıtlar |
Servis adı yerine işlem kimliğiyle arama yapmak gerektiğinde
_PID, program adına göre arama yapmak gerektiğinde _COMM alanları kullanılabilir:
Kod:
journalctl _PID=1234
journalctl _COMM=sshd
Bu alanlar ancak ilgili kayıt gerçekten bu metadata ile yazılmışsa sonuç verir. Servisin tamamını incelemek için önce
-u ile başlayın; daha sonra grep ile serbest metin aramak yerine journal alanlarını kullanmak, yanlış eşleşmeleri azaltır.Uygulanabilir teşhis örneği
Örnek olarak
worker.service başlatılamıyor olsun. Önce son açılıştaki son kayıtları ve servis durumunu birlikte inceleyin:systemctl status worker.servicekomutuyla servisin mevcut durumunu ve gerçek birim adını doğrulayın.journalctl -b -u worker.service -n 100 --no-pagerkomutuyla son açılıştaki son 100 kaydı alın.- Çıktıda yalnız önemli olayları ayırmak için
journalctl -b -u worker.service -p warning --no-pagerkomutunu çalıştırın. - Sorunu yeniden üretirken
journalctl -u worker.service -file yeni kayıtları izleyin. - Hata satırında belirtilen dosya, izin, yapılandırma veya bağımlılık sorununu düzelttikten sonra
systemctl status worker.serviceile sonucu yeniden kontrol edin.
Başarılı sonuçta servis durumu çalışıyor olarak görünür ve canlı takip sırasında yeni başlatma ya da işlem kayıtları gelir.
--since ile zaman aralığını daha da daraltabilirsiniz:
Kod:
journalctl -u worker.service --since "2026-01-01 10:00:00" --until "2026-01-01 11:00:00" --no-pager
Bu örnekte tarih ve saatleri incelemek istediğiniz gerçek aralıkla değiştirin. Sistem saat dilimi veya saat ayarı yanlışsa zaman filtresi beklediğiniz satırları dışarıda bırakabilir.
Sonuç yoksa veya çıktı anlaşılmıyorsa
No entries görülmesi mutlaka servisin sorunsuz olduğu anlamına gelmez. Önce birim adının doğru olduğunu, servisin gerçekten systemd tarafından yönetildiğini ve ilgili zaman aralığında kayıt üretildiğini kontrol edin. Uygulama kendi dosyasına yazıyorsa kayıtlar journal yerine o dosyada bulunabilir.Yetki hatası alırsanız aynı sorguyu uygun yönetici yetkisiyle çalıştırın. Ancak
sudo kullanmak, yanlış servis adını veya hiç kayıt üretilmemesini düzeltmez. Çok fazla çıktı varsa -n, --since, -p ve --no-pager seçeneklerini birlikte kullanın. Satırları daha sonra başka araçlarla işlemek gerekiyorsa -o short-iso gibi açık bir çıktı biçimi seçebilirsiniz.Sık sorulan sorular
Journal kayıtlarının kalıcı tutulup tutulmadığını nasıl anlarım?
journalctl --list-boots komutu geçmiş sistem açılışlarını listeler. Yalnız mevcut açılış görünüyorsa journal verileri kalıcı olmayabilir veya eski kayıtlar temizlenmiş olabilir.Bir servisin hata kodunu log içinde nasıl ayırt ederim?
systemctl status servis-adi.service çıktısındaki çıkış durumu ve son journal satırlarını birlikte değerlendirin. Journal satırı nedeni açıklar; hata kodu ise servis sürecinin nasıl sonlandığını gösterir.