Systemd'nin günlük kalıplarını nasıl kullanıyorsunuz


21

journalctl'Nın desen eşleşmesini kullanmaya çalışıyorum SYSLOG_IDENTIFIERS. Örnek olarak, bir ton mesaj var etiketli sshd:

$ journalctl -t sshd | wc -l
987

ancak bunları bulmak için kalıp eşleşmesini kullanmaya çalışırsam:

$ journalctl -t 'ssh*'
-- No Entries --
$ journalctl -t 'ssh.*'
-- No Entries --

Journalctl man sayfası, kalıpların çalışması gerektiğini söylüyor, ancak kalıpların sistemde nasıl kullanıldığı / tanımlandığı hakkında başka bir şey bulamıyorum.

$ man journalctl
....
-t, --identifier=SYSLOG_IDENTIFIER|PATTERN
       Show messages for the specified syslog identifier SYSLOG_IDENTIFIER,
       or for any of the messages with a "SYSLOG_IDENTIFIER" matched by PATTERN.

ArchLinux kullanıyorum:

$ journalctl --version
systemd 225
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS +ACL +XZ +LZ4 +SECCOMP +BLKID -ELFUTILS +KMOD +IDN

5
IRC ile ilgili tartışmalara dayanarak, bunun bir hata (veya belgelerle ilgili bir sorun) olduğu anlaşılıyor. Bir hata olmuştur açtı .
Mark Grimes

1
gerçek zamanlı olarak deneyin: journalctl -f | grep sshd
nexoma

Size uygunsa, birden çok -t <tanımlayıcı> ekleyebilirsiniz.
sivann

Yanıtlar:


15

Bu, sayfadaki yazım hatası güncellendiğinde kapatılan bir doktor hatasıydı man.

Hata raporu kodda aşağıdaki yorumlara yol açtı :

Aslında kalıpları kabul etmiyoruz, dolayısıyla bunu iddia etmiyoruz.

Geçici bir çözüm olarak, grepsorunuzun yorumlarında önerildiği gibi kullanabilirsiniz . Bunun gibi bir şey:

journalctl | grep sshd

0

Orijinal soru " systemd'nin günlük kalıplarını nasıl kullanıyorsunuz? " Bu, journalctl'in genel bir düzenli ifade filtrelemesi yerine "MATCHES" adlı çok özel bir özelliğine işaret eder.

"MAÇLAR" özelliği, başlangıçta belirttiği dostça adam sayfasında diğer tüm özelliklerle birlikte tamamen ayrıntılıdır :

Bir veya daha fazla eşleşme argümanı iletilirse, çıktı buna göre filtrelenir.

"Eşleşmeler" özelliği, günlük girişlerini bir dizi olası filtreye göre filtrelemek içindir.

Orijinal sorudaki gibi durumlar için, ben böyle yapıyorum (ArchLinux'u da çalıştırıyorum).

İlk olarak, ilgilendiğiniz hizmet adını bilmeniz gerekir. Genellikle bunu yaparım:

systemctl | grep sshd

Bunu anladım:

sshd.service       loaded active running   OpenSSH Daemon

Daha sonra şu şekilde journalctl"systemd birim adı" na göre filtrelemeyi isteyebilirsiniz :

journalctl _SYSTEMD_UNIT=sshd.service

Buna "filtreleme eşleşmeleri" denir. Bu kadar.

Bunun yerine orijinal sorunun " journalctl çıktısına nasıl başvurulacağıgrep " anlamına gelmesi durumunda , grepşu ana kadar "şimdiye kadar" saklanan günlüklere başvurabilirsiniz .

journalctl | grep ssh

veya şu anda gelen günlük girişlerine

journalctl -f | grep ssh

ve akışı durdurmak için CTRL-C tuşlarına basın. Tabii ki, daha ince taneli düzenli desenlere veya çoklu grepkomutlara sahip daha karmaşık borular kullanabilirsiniz .


Yanıtınız için teşekkürler, ancak _SYTEMD_UNIT kalıpları kabul etmiyor. Yorumumda ve @ Tim'in cevabında belirtildiği gibi, bu dokümanlardaki bir hataydı.
Mark Grimes

@MarkGrimes, En azından benim için (systemd 239) işe yarıyor. Söylediklerimi yazmadan önce her zaman test ederim. Belgelendiği gibi çalışır.
EnzoR

Soru, örneğin kalıpları kullanmakla ilgilidir ssh*. Journalctl belgeleri bunun bir zamanlar mümkün olduğunu belirtti. Dokümanlar yanlış ve güncellendi.
Mark Grimes

@MarkGrimes Soru, herhangi bir karakter deseni değil, systemd'nin günlük desenleriyle ilgili . Lütfen güncellenmiş cevabıma bakın. Ve ArchLinux altında tam olarak belgelendiği gibi çalışır.
EnzoR

-2

Çalıştırdığınızda birim dosyasını tanımlayabilirsiniz journalctl.

journalctl -f -u sshd.service

Sadece dergisini göstereceğim sshd


Bu cevap soruyu ele almıyor. Kullanıcı bir filtrede kalıp kullanmayı istiyor.
Merlijn Sebrechts
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.