Red hat tabanlı sistemlerde sistem ve arka planda çalışan her programın log kayıtlarına bu komut üzerinden ulaşabiliriz. Journalctl’in en büyük faydalarından biri log kayıtlarını istenilen saat dilimine göre gösterebilmesi, bunun için sistemden timedatectl komutu ile tarih/saat ayarını yapmış olmanız gerekiyor.
Temel olarak journalctl komutu sistemdeki tüm logları önümüze serer. Buradan aradığımız özel bir kısım var ise grep komuyula birlikte çalıştırdığımızda direk onlara ulaşabilir yahut head, less gibi komutlarla sadece baş ve sondan kesme işlemi yapabiliriz.
Son boot işleminden sonra oluşan logları görmek için journalctl komutuna -b parametresini eklememiz gerekir. Daha önceki loglar için ise parametrenin yanına ilgili boot kaydının referans değerinigirerek çağırabiliriz. Geçmiş boot loglarını görmek, açılışta karılaşılan bir sorun olduğunda log kayıtlarını karşılaştırıp durumu hakkında fikir yürütmemizi sağlayabilir.
Geçmiş bootları görüntülemek için kullanacağımız komut journalctl –list-boots komutudur. Bu komuttan önce sistem tarafında /var/log içerisine journal dizini oluşturulmalı ve journalctl’in konfigürasyon dosyasında saklama ayarları yapılmalıdır.
mkdir -p /var/log/journal
vi /etc/systemd/journald.conf
[Journal] alanı altındaki Storage alanının yanına persistent yazılmalı
Belirli zaman aralığında logları görmemiz de mümkün. Bunun için since ve until komutlarını kullanıyoruz. Gireceğimiz zaman dilimi sadece tarih veya tarih/saat olabilir. Format olarak YYYY-MM-DD HH:MM:SS şekildedir.
journalctl --since yesterday
journalctl --since 10:00 --until "1 hour ago"
Servis durumlarını kontrol etmek için o alanda da filtreleme yapmamız gerekebilir. Bunun için -u parametresini kullanacağız.
journalctl -u nginx.service
Aynı zamanda bu parametreleri beraber de kullanabiliriz.
journalctl -u nginx.service --since 06:00
Servisleri kontrol etmenin yanı sıra bu servislerin oluşturduğu child processleri de kontrol edebiliriz. Bunun için _PID parametresini kullanıyoruz. İlgili process’e ait PID değeri üzerinden filtreleme yapılabiliyor.
journalctl _PID=12555
Ayrıca belirli kullanıcılar ve grublar bazında bakmak istenirse _UID ve _GID komutlarıyla bu loglara da ulaşılabilir.
journalctl _UID=1000
Journal tarafında hangi user ve grupların loglandığı görmek için -F parametresini kullanmamız gerekiyor. Bu konuda daha fazla bilgi almak için man systemd.journal-fields komutu yeterli olacaktır.
Journalctl –F _UID –> journal’da depolanan kullanıcı id’lerini getirir.
Patika vererek filtreleme yapmamız mümkün.
journalctl /usr/bin/bash
Kernelden gelen mesajları görüntülemek için -k yahut bu mesajlar dmegs içerisinde toplandığı için -dmegs komutunu kullanabiliriz.
journalctl -k
journalctl -k -b 5
5 boot önceki kernel mesajlarını okumamızı sağlar
Logları tek tek okumak ve ayıklamak yerine öncelik verip sadece o öncelik üzerindeki kayıtları okumamız mümkün. Bunun için -p parametresini kullanıyoruz.
journalctl –p err –b
boot sırasındaki error ve üstü etikete sahip kısımları okumamızı sağlar. Öncelik sırası şu şekildedir.
0 | Emerg |
1 | Alert |
2 | Crit |
3 | Err |
4 | Warning |
5 | Notice |
6 | Info |
7 | Debug |
Yaptığımız log aramalarını json formatında çıktı olarak alabiliriz. Bunun için -o komutu ile json yazmamız yeterli. Hatta daha güzel formatta bir çıktı almak istiyorsak json-prety kullanabiliriz.
journalctl -b -u firewalld -o json
cat | Mesaj alanında kendisini gösterir. |
export | Taşıma yahut yedeklemede kullanılabilecek binary format |
json | Tek satırsa standart JSON dosyası |
json-prety | Daha okunabilir JSON formatı |
json-sse | Server-Sent ile uyumlu JSON formatı |
short | Default syslog çıktı stili |
short-iso | ISO 8601 wallclock zaman damgalı çıktı formatı |
short-monotonic | Tekdüze zaman damgaları ile birlikte standart format |
short-precise | Mikro saniyekesinliği ile default format |
verbose | Girdi için uygun tüm journal alanlarını gösteren format |
Loglar üzerinde yapılan son işlemleri izlemek için -n komutu kullanılır. Bu komut tail komutu ile benzerlik gösterir.
journalctl -n
journalctl -n 20
son 20 kayıtı gösterir. Devam eden logları takip etmek için -f komutunu kullanmamız yeterli, bu komut sayesinde akışı (flow) yakalayabiliriz.
journalctl -f
Logların disk üzerinde ne kadar alan işgal ettiğinini –disk-usage komutu ile inceleyebiliriz.
journalctl --disk-usage
Logların büyümesi ile ilgili seçeneklere /etc/systemd/journald.conf doyasında ayar yapamız yeterli olacaktır.
SystemMaxUse=: Logların kaplayacağı maksimum disk alanını belirler.
SystemKeepFree=: Loglar kayıt edilirken sistemde bırakılması gereken boş alan miktarıdır.
SystemMaxFileSize=: Dosyalar rotate olmadan önce ilgili dosyaların ne kadar büyüyebileceğini belirler.
RuntimeMaxUse=: Geçici hafıza /run üzerinde kullanılabilir maksimum disk kapasitesini belirler.
RuntimeKeepFree=: Diğer kullanıcılar için geçici hafıza üzerine veri yazılırken ayrı tutulacak alanı belirler.
RuntimeMaxFileSize=: Geçici hafıza /run üzerinde yer alan log dosyasının rotate edilmeden önce ulaşabileceği maksimum kapasiteyi belirler.