คุณใช้รูปแบบ journalctl ของ systemd อย่างไร


21

ฉันพยายามที่จะใช้journalctlการจับคู่แบบ SYSLOG_IDENTIFIERS'บน ตัวอย่างเช่นฉันมีข้อความจำนวนมากติดแท็กsshd:

$ journalctl -t sshd | wc -l
987

แต่ถ้าฉันพยายามใช้การจับคู่รูปแบบเพื่อค้นหา:

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

หน้า manctctctl บอกว่ารูปแบบควรใช้งานได้ แต่ฉันไม่สามารถหาสิ่งอื่นใดเกี่ยวกับวิธีการใช้ / กำหนดรูปแบบใน systemd

$ 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:

$ 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 ดูเหมือนว่านี่เป็นข้อผิดพลาด (หรือปัญหาเกี่ยวกับเอกสารประกอบ) ข้อผิดพลาดได้รับการยื่น
Mark Grimes

1
ลองใช้เรียลไทม์: journalctl -f | grep sshd
nexoma

คุณสามารถเพิ่ม -identifier ได้หลายตัวหากเหมาะสมกับคุณ
sivann

คำตอบ:


15

นี่เป็นข้อผิดพลาดของ docที่ถูกปิดเมื่อการพิมพ์ผิดในmanหน้าได้รับการปรับปรุง

รายงานข้อผิดพลาดนำไปสู่ความคิดเห็นต่อไปนี้ในรหัส :

เราไม่ยอมรับรูปแบบที่แท้จริงดังนั้นจึงไม่เรียกร้องเช่นนั้น

คุณสามารถใช้grepตามคำแนะนำในข้อคิดเห็นของคำถามของคุณได้ บางสิ่งเช่นนี้

journalctl | grep sshd

0

ชื่อคำถามดั้งเดิม "คุณใช้รูปแบบ journalctlของ systemd ได้อย่างไร " สิ่งนี้ชี้ไปที่คุณลักษณะเฉพาะของ journalctl ที่เรียกว่า "MATCHES" มากกว่าการกรองนิพจน์ทั่วไปทั่วไป

คุณสมบัติ "ตรงกับ" มีรายละเอียดพร้อมกับคุณสมบัติอื่น ๆ ทั้งหมดที่หน้าคนที่เป็นมิตรซึ่งระบุไว้ที่จุดเริ่มต้น:

หากมีอาร์กิวเมนต์ที่ตรงกันตั้งแต่หนึ่งข้อขึ้นไปเอาต์พุตจะถูกกรองตามลำดับ

คุณลักษณะ "การจับคู่" มีไว้เพื่อกรองรายการบันทึกตามตัวกรองที่เป็นไปได้จำนวนมาก

สำหรับกรณีเช่นเดียวกับคำถามเดิมนี่คือสิ่งที่ฉันทำ (ฉันเรียกใช้ ArchLinux ด้วย)

ก่อนอื่นคุณต้องรู้ชื่อบริการที่คุณสนใจฉันมักจะทำสิ่งนี้:

systemctl | grep sshd

ฉันได้รับสิ่งนี้:

sshd.service       loaded active running   OpenSSH Daemon

จากนั้นคุณสามารถขอjournalctlให้กรองโดย "systemd unit name" ดังนี้:

journalctl _SYSTEMD_UNIT=sshd.service

มันเรียกว่า "การกรองการจับคู่" ไม่ว่าจะเป็น

ในกรณีที่คำถามต้นฉบับถูกเขียนขึ้นแทนหมายถึง " วิธีการใช้grepกับ journalctlเอาท์พุท" จากนั้นคุณสามารถนำgrepไปใช้กับบันทึกที่เก็บไว้ "จนถึง" ด้วย

journalctl | grep ssh

หรือดูรายการบันทึกที่เข้ามาในปัจจุบันด้วย

journalctl -f | grep ssh

และกด CTRL-C เพื่อหยุดการไหล แน่นอนคุณสามารถใช้ท่อที่ซับซ้อนมากขึ้นด้วยรูปแบบปกติที่ละเอียดยิ่งขึ้นหรือgrepคำสั่งหลายคำสั่ง


ขอบคุณสำหรับการตอบกลับ แต่ _SYTEMD_UNIT ไม่ยอมรับรูปแบบ ดังที่ได้กล่าวไว้ในความคิดเห็นของฉันและคำตอบของ @ Tim นี่เป็นข้อผิดพลาดในเอกสาร
Mark Grimes

@ MarkGrimes อย่างน้อยสำหรับฉัน (systemd 239) มันใช้งานได้ ฉันมักจะทดสอบสิ่งที่ฉันพูดก่อนที่จะเขียนลง มันทำงานเป็นเอกสาร
EnzoR

คำถามคือเกี่ยวกับการใช้รูปแบบssh*เช่น journalctl docs ระบุว่าเป็นไปได้ในครั้งเดียว เอกสารไม่ถูกต้องและได้รับการปรับปรุง
Mark Grimes

@MarkGrimes คำถามที่เป็นเรื่องเกี่ยวกับsystemd รูปแบบการ journalctlไม่ได้รูปแบบตัวอักษรใดโปรดดูคำตอบที่อัปเดตของฉัน และใช้งานได้ภายใต้ ArchLinux
EnzoR

-2

journalctlคุณสามารถกำหนดไฟล์หน่วยเมื่อคุณเรียกใช้

journalctl -f -u sshd.service

ฉันจะแสดงเฉพาะวารสารของ sshd


คำตอบนี้ไม่ได้ตอบคำถาม ผู้ใช้กำลังขอใช้ลวดลายในตัวกรอง
Merlijn Sebrechts
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.