Journalctl Kullanarak Systemd Altındaki Günlük Mesajlarını Yönetme [Kapsamlı Kılavuz]


Systemd, Linux sistemleri için son teknoloji ürünü bir sistem ve hizmet yöneticisidir: sistem önyüklemesinde işlemleri paralel olarak başlatmayı amaçlayan bir init arka plan programı değişimi. Artık Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS vb. dahil olmak üzere bir dizi mevcut ana dağıtım tarafından desteklenmektedir.

Daha önce 'init' ve 'systemd'nin arkasındaki hikayeyi açıklamıştık; burada iki arka plan programının ne olduğunu, 'init'in neden teknik olarak 'systemd' ile değiştirilmesi gerektiğini ve ayrıca systemd'nin temel özelliklerini tartıştık.

Systemd'nin diğer yaygın init sistemlerine göre ana avantajlarından biri, sistemin merkezi yönetimini ve bir günlük kullanarak süreç kaydının tutulmasını desteklemesidir. Bu yazımızda Linux'ta journalctl komutunu kullanarak systemd altında log mesajlarının nasıl yönetileceğini ve görüntüleneceğini öğreneceğiz.

Önemli: Bu kılavuzda daha fazla ilerlemeden önce, 'Systemd' hizmetlerini ve birimlerini 'Systemctl' komutunu kullanarak nasıl yöneteceğinizi ve ayrıca yeni hizmetler oluşturup çalıştıracağınızı öğrenmek isteyebilirsiniz. Linux'ta kabuk komut dosyalarını kullanan systemd'deki hizmet birimleri. Ancak yukarıdakilerin hepsinden memnunsanız okumaya devam edin.

Journald'ı Systemd Altında Günlük Mesajlarını Toplayacak Şekilde Yapılandırma

journald tüm sistemdeki günlük girişlerini toplayan ve yazan bir arka plan programıdır; bunlar aslında önyükleme mesajları, çekirdekten ve sistem günlüğünden veya çeşitli uygulamalardan gelen mesajlardır ve tüm mesajları merkezi bir konumda, günlük dosyasında saklar.

journald'ın davranışını varsayılan yapılandırma dosyası aracılığıyla kontrol edebilirsiniz: derleme zamanında oluşturulan /etc/systemd/journald.conf. Bu dosya, değerlerini yerel ortam gereksinimlerinize uyacak şekilde değiştirebileceğiniz seçenekleri içerir.

Aşağıda cat komutu kullanılarak görüntülenen dosyanın neye benzediğine dair bir örnek verilmiştir.

cat /etc/systemd/journald.conf 
See journald.conf(5) for details.

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg

/usr/lib/systemd/*.conf.d/ dosyasında çeşitli paket kurulumlarının ve kullanım yapılandırma özetlerinin ve /run/systemd/journald.conf dosyasında çalışma zamanı yapılandırmalarının bulunabileceğini unutmayın. d/*.conf'u mutlaka kullanmayabilirsiniz.

Diskte Günlük Veri Depolamasını Etkinleştir

Ubuntu ve Linux Mint gibi türevleri de dahil olmak üzere bir dizi Linux dağıtımı, varsayılan olarak önyükleme mesajlarının diskte kalıcı olarak depolanmasına izin vermez.

Aşağıda gösterildiği gibi “Depolama” seçeneğini “kalıcı” olarak ayarlayarak bunu etkinleştirmek mümkündür. Bu, /var/log/journal dizinini oluşturacak ve tüm günlük dosyaları onun altında saklanacaktır.

sudo vi /etc/systemd/journald.conf 
OR
sudo nano /etc/systemd/journald.conf 
[Journal]
Storage=persistent

Ek ayarlar için “[Journal]” bölümünün altına yapılandırılması gereken tüm seçeneklerin anlamını yazarak bulabilirsiniz.

man journald.conf

Timedatectl Komutunu Kullanarak Doğru Sistem Saatini Ayarlama

Journald hizmetini kullanarak systemd altında güvenilir günlük yönetimi için, sistemdeki saat dilimi de dahil olmak üzere zaman ayarlarının doğru olduğundan emin olun.

Sisteminizdeki güncel tarih ve saat ayarlarını görüntülemek için yazın.

timedatectl 
OR
timedatectl status

Local time: Thu 2017-06-15 13:29:09 EAT
Universal time: Thu 2017-06-15 10:29:09 UTC
RTC time: Thu 2017-06-15 10:29:09
Time zone: Africa/Kampala (EAT, +0300)
Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

Doğru saat dilimini ve muhtemelen sistem saatini ayarlamak için aşağıdaki komutları kullanın.

sudo timedatectl set-timezone  Africa/Kampala
sudo timedatectl set-time “13:50:00”

Journalctl Komutunu Kullanarak Günlük Mesajlarını Görüntüleme

journalctl, systemd günlüğünün (journald hizmeti tarafından yazılan) içeriğini görüntülemek için kullanılan bir yardımcı programdır.

Toplanan tüm günlükleri herhangi bir filtreleme olmadan göstermek için yazın.

journalctl
-- Logs begin at Wed 2017-06-14 21:56:43 EAT, end at Thu 2017-06-15 12:28:19 EAT
Jun 14 21:56:43 tecmint systemd-journald[336]: Runtime journal (/run/log/journal
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuset
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpu
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuacct
Jun 14 21:56:43 tecmint kernel: Linux version 4.4.0-21-generic (buildd@lgw01-21)
Jun 14 21:56:43 tecmint kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-
Jun 14 21:56:43 tecmint kernel: KERNEL supported cpus:
Jun 14 21:56:43 tecmint kernel:   Intel GenuineIntel
Jun 14 21:56:43 tecmint kernel:   AMD AuthenticAMD
Jun 14 21:56:43 tecmint kernel:   Centaur CentaurHauls
Jun 14 21:56:43 tecmint kernel: x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x01: 'x87 flo
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x02: 'SSE reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x04: 'AVX reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Enabled xstate features 0x7, context si
Jun 14 21:56:43 tecmint kernel: x86/fpu: Using 'eager' FPU context switches.
Jun 14 21:56:43 tecmint kernel: e820: BIOS-provided physical RAM map:
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000000000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000090000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000100000-0x000000001ff
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020000000-0x00000000201
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020200000-0x00000000400

Önyüklemeye Dayalı Günlük mesajlarını görüntüle

--list-boots seçeneğiyle önyükleme numaralarının bir listesini (mevcut önyüklemeye göre), kimliklerini ve önyüklemeye karşılık gelen ilk ve son mesajın zaman damgalarını görüntüleyebilirsiniz.

journalctl --list-boots

-1 9fb590b48e1242f58c2579defdbbddc9 Thu 2017-06-15 16:43:36 EAT—Thu 2017-06-15 1
 0 464ae35c6e264a4ca087949936be434a Thu 2017-06-15 16:47:36 EAT—Thu 2017-06-15 1 

Geçerli önyüklemedeki (sayı 0) günlük girişlerini görüntülemek için -b anahtarını şu şekilde kullanın (yukarıdaki örnek çıktıyla aynı).

journalctl -b

ve önceki önyüklemeden bir günlüğü görmek için aşağıdaki gibi -1 göreceli işaretçisini -b seçeneğiyle birlikte kullanın.

journalctl -b -1

Alternatif olarak, önyükleme kimliğini şu şekilde kullanın.

journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Günlük Mesajlarını Zamana Göre Filtreleme

Saati Koordineli Evrensel Saat (UTC) formatında kullanmak için --utc seçeneklerini aşağıdaki gibi ekleyin.

journalctl --utc

Belirli bir tarih ve saatten bu yana yapılan tüm girişleri görmek için; 15 Haziran 2017, 08:15'te bu komutu yazın.

journalctl --since "2017-06-15 08:15:00"
journalctl --since today
journalctl --since yesterday

Son Günlük Mesajlarını Görüntüleme

En son günlük mesajlarını (varsayılan olarak 10) görüntülemek için aşağıda gösterildiği gibi -n işaretini kullanın.

journalctl -n
journalctl -n 20 

Çekirdek Tarafından Oluşturulan Günlük Mesajlarını Görüntüleme

Yalnızca çekirdek mesajlarını görmek için, dmesg komutunun çıktısına benzer şekilde -k işaretini kullanabilirsiniz.

journalctl -k 
journalctl -k -b 
journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9

Birimlere Göre Oluşturulan Günlük Mesajlarını Görüntüleme

Belirli bir birime ait tüm günlük girişlerini görüntülemek için -u anahtarını aşağıdaki gibi kullanın.

journalctl -u apache2.service

Geçerli önyüklemeyi sıfırlamak için bu komutu yazın.

journalctl -b -u apache2.service

Önceki önyüklemenin günlüklerini göstermek için bunu kullanın.

journalctl -b -1 -u apache2.service

Aşağıda diğer bazı yararlı komutlar verilmiştir:

journalctl -u apache2.service  
journalctl -u apache2.service --since today
journalctl -u apache2.service -u nagios.service --since yesterday

İşlemler Tarafından Oluşturulan Günlük Mesajlarını Görüntüleme

Belirli bir işlem tarafından oluşturulan günlükleri görüntülemek için bunun PID'sini şu şekilde belirtin.

journalctl _PID=19487
journalctl _PID=19487 --since today
journalctl _PID=19487 --since yesterday

Kullanıcı veya Grup Kimliği Tarafından Oluşturulan Günlük Mesajlarını Görüntüleme

Belirli bir kullanıcı veya grup tarafından oluşturulan günlükleri görüntülemek için kullanıcı veya grup kimliğini şu şekilde belirtin.

journalctl _UID=1000
journalctl _UID=1000 --since today
journalctl _UID=1000 -b -1 --since today

Bir Dosya Tarafından Oluşturulan Günlükleri Görüntüleme

D-Bus yürütülebilir dosyası veya bash yürütülebilir dosyaları gibi bir dosya (muhtemelen yürütülebilir dosya) tarafından oluşturulan tüm günlükleri göstermek için yazmanız yeterlidir.

journalctl /usr/bin/dbus-daemon
journalctl /usr/bin/bash

Günlük Mesajlarını Önceliğe Göre Görüntüleme

-p işaretini kullanarak çıktıyı mesaj önceliklerine veya öncelik aralıklarına göre de filtreleyebilirsiniz. Olası değerler şunlardır: 0 – acil durum, 1 – uyarı, 2 – kritik, 3 – hata, 4 – uyarı, 5 – bildirim, 6 – bilgi, 7 – hata ayıklama):

journalctl -p err

Bir aralık belirtmek için aşağıdaki formatı kullanın (uyarıya çıkma).

journalctl -p 1..4
OR
journalctl -p emerg..warning

Günlük Mesajlarını Gerçek Zamanlı Olarak Görüntüleyin

-f seçeneğiyle (tail -f işlevine benzer) günlükleri yazılırken pratik olarak izleyebilirsiniz.

journalctl -f

Günlük Görüntüleme Formatını Kullanma

Günlük girişlerinin çıktı formatını kontrol etmek istiyorsanız -o bayrağını ekleyin ve şu seçenekleri kullanın: cat, Export, json, json-pretty, json-sse, short, short-iso, kısa monoton, kısa kesin ve ayrıntılı (kılavuz sayfasındaki seçeneklerin anlamını kontrol edin:

cat seçeneği, her günlük girişinin gerçek mesajını herhangi bir meta veri (zaman damgası vb.) olmadan gösterir.

journalctl -b -u apache2.service -o cat

Dergileri Sistem Üzerinden Yönetme

Günlük dosyasının iç tutarlılığını kontrol etmek için --verify seçeneğini kullanın. Her şey yolundaysa, çıktıda bir PASS belirtilmelidir.

journalctl --verify

PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system.journal                               
491f68: Unused data (entry_offset==0)                                                                
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000003184-000551f9866c3d4d.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000001fc8-000551f5d8945a9e.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000d4f-000551f1becab02f.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000001-000551f01cfcedff.journal

Eski Günlük Dosyalarının Silinmesi

Ayrıca --disk-usage seçenekleriyle tüm günlük dosyalarının geçerli disk kullanımını da görüntüleyebilirsiniz. Tüm arşivlenmiş ve etkin günlük dosyalarının disk kullanımının toplamını gösterir:

journalctl --disk-usage

Eski (arşivlenmiş) günlük dosyalarını silmek için aşağıdaki komutları çalıştırın:

sudo journalctl --vacuum-size=50M  #delete files until the disk space they use falls below the specified size
sudo journalctl --vacuum-time=1years	#delete files so that all journal files contain no data older than the specified timespan
sudo journalctl --vacuum-files=4     #delete files so that no more than the specified number of separate journal files remain in storage location

Günlük Dosyalarını Döndürme

Son fakat bir o kadar da önemlisi, Journald'a günlük dosyalarını --rotate seçeneğiyle döndürme talimatı verebilirsiniz. Döndürme işlemi bitene kadar bu yönergenin geri dönmeyeceğini unutmayın:

sudo journalctl --rotate

Ayrıntılı bir kullanım kılavuzu ve seçenekler için aşağıdaki şekilde Journalctl kılavuz sayfasını görüntüleyin.

man journalctl

Bazı yararlı makalelere göz atın.

  1. Sistem Başlatma Sürecini ve Hizmetlerini Yönetme (SysVinit, Systemd ve Upstart)
  2. Petiti – Linux SysAdmins için Açık Kaynak Günlük Analiz Aracı
  3. Linux'ta Logrotate Kullanarak Günlük Döndürmeyi Kurma ve Yönetme
  4. lnav – Bir Linux Terminalinden Apache Günlüklerini İzleyin ve Analiz Edin

Şimdilik bu kadar. Bu konuyla ilgili soru sormak veya düşüncelerinizi eklemek için aşağıdaki geri bildirimi kullanın.