आप सिस्टमड के जर्नल पैटर्न का उपयोग कैसे करते हैं


21

मैं journalctlपर मिलान के पैटर्न का उपयोग करने की कोशिश कर रहा हूँ SYSLOG_IDENTIFIERS। एक उदाहरण के रूप में, मेरे पास एक टन का संदेश है sshd:

$ journalctl -t sshd | wc -l
987

लेकिन अगर मैं उन्हें खोजने के लिए पैटर्न मिलान का उपयोग करने की कोशिश करता हूं:

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

Journalctl मैन पेज का कहना है कि पैटर्न को काम करना चाहिए, लेकिन मुझे इस बारे में कुछ और नहीं पता कि पैटर्न का उपयोग कैसे किया जाता है / सिस्टमड में परिभाषित किया गया है।

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

मैं आर्चलिनक्स चला रहा हूं:

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

5
आईआरसी पर चर्चा के आधार पर, ऐसा लगता है कि यह एक बग (या प्रलेखन के साथ एक समस्या) है। बग दर्ज किया गया है ।
मार्क ग्रिम्स

1
realtime के लिए यह प्रयास करें: journalctl -f | grep sshd
नेक्सोमा

यदि आप सूट करते हैं तो आप वास्तव में एकाधिक -t <पहचानकर्ता> जोड़ सकते हैं।
सिवनी

जवाबों:


15

यह एक डॉक बग था जो manपेज में टाइपो अपडेट होने पर बंद हो गया था।

बग रिपोर्ट ने कोड में निम्नलिखित टिप्पणियों का नेतृत्व किया :

हम वास्तव में पैटर्न स्वीकार नहीं करते हैं, इसलिए ऐसा दावा नहीं करते हैं।

वर्कअराउंड के रूप में, आप grepअपने प्रश्न के टिप्पणियों में सुझाए अनुसार उपयोग कर सकते हैं । कुछ इस तरह:

journalctl | grep sshd

0

मूल प्रश्न शीर्षक "आप सिस्टमड के जर्नल पैटर्न का उपयोग कैसे करते हैं "। यह एक सामान्य नियमित अभिव्यक्ति फ़िल्टरिंग के बजाय "MATCHES" नामक जर्नल की एक बहुत विशिष्ट विशेषता को इंगित करता है।

"MATCHES" सुविधा अपने अनुकूल मैन पेज पर अन्य सभी विशेषताओं के साथ पूरी तरह से विस्तृत है जो इसकी शुरुआत में बताता है:

यदि एक या अधिक मिलान तर्क पास किए जाते हैं, तो आउटपुट उसी के अनुसार फ़िल्टर किया जाता है।

"मैच" सुविधा कई संभावित फिल्टर के आधार पर लॉग प्रविष्टियों को फ़िल्टर करने के लिए है।

मूल प्रश्न में एक जैसे मामलों के लिए, यह है कि मैं कैसे (मैं आर्कलिनक्स भी चलाता हूं)।

सबसे पहले, आपको उस सेवा का नाम जानना होगा, जिसमें आप रुचि रखते हैं। मैं आमतौर पर ऐसा करता हूं:

systemctl | grep sshd

मैंने इसे प्राप्त किया:

sshd.service       loaded active running   OpenSSH Daemon

फिर आप journalctl"systemd unit name" को इस तरह से फ़िल्टर करने के लिए कह सकते हैं :

journalctl _SYSTEMD_UNIT=sshd.service

इसे "माचिस छानने" कहा जाता है। वह यह होगा।

मामले में मूल प्रश्न के बजाय " जर्नल वर्कआउट कैसे लागू grepकिया जाए " लिखा गया था , तो आप या तो grep"अब तक" संग्रहीत लॉग पर लागू कर सकते हैं

journalctl | grep ssh

या वर्तमान में आने वाली लॉग प्रविष्टियों को देखें

journalctl -f | grep ssh

और प्रवाह को रोकने के लिए CTRL-C मारा। बेशक, आप महीन दाने वाले नियमित पैटर्न या कई grepकमांड के साथ अधिक जटिल पाइप का उपयोग कर सकते हैं ।


प्रतिक्रिया के लिए धन्यवाद, लेकिन _SYTEMD_UNIT पैटर्न स्वीकार नहीं करता है। जैसा कि मेरी टिप्पणी और @ टिम के जवाब में बताया गया है, यह डॉक्स में एक बग था।
मार्क ग्रिम्स

@MarkGrimes, कम से कम मेरे लिए (सिस्टमड 239) यह काम करता है। मैं हमेशा परीक्षण करता हूं कि इसे लिखने से पहले मैं क्या कहता हूं। यह दस्तावेज के रूप में काम करता है।
EnzoR

उदाहरण के लिए प्रश्न पैटर्न का उपयोग करने के बारे में है ssh*। जर्नलक्ट डॉक्स ने कहा कि यह एक समय में संभव था। डॉक्स गलत थे और उन्हें अपडेट कर दिया गया है।
मार्क ग्रिम्स

@MarkGrimes प्रश्न प्रणाली के जर्नल पैटर्न के बारे में है, जिसमें कोई चरित्र पैटर्न नहीं है । कृपया मेरा अद्यतन उत्तर देखें। और यह बिलकुल डॉक्यूमेंट के रूप में आर्कलिनक्स के तहत काम करता है।
EnzoR

-2

जब आप चलाते हैं तो आप यूनिट फ़ाइल को परिभाषित कर सकते हैं journalctl

journalctl -f -u sshd.service

मैं केवल पत्रिका दिखाऊंगा sshd


यह उत्तर प्रश्न को संबोधित नहीं करता है। उपयोगकर्ता फ़िल्टर में पैटर्न का उपयोग करने के लिए कह रहा है।
मैरलिज़न सेब्रेट्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.