Systemd
systemd 的 journalctl:如何按消息過濾?
journalctl看起來像是一個查看日誌的好工具,但我被困在一個簡單的問題上:我想查看所有包含片語的 cron 消息
update-ipsets
。我當然可以
journalctl -u cron.service | grep update-ipsets
但是你失去了 journalctl 輸出的所有其他好處(顏色編碼、自動分頁、實時視圖等)
我試過了:
journalctl -u cron.service MESSAGE=update-ipsets journalctl -u cron.service "MESSAGE=*update-ipsets*" journalctl -u cron.service "MESSAGE=.*update-ipsets.*" journalctl -u cron.service "MESSAGE=/.*update-ipsets.*/"
而且您不想通過點擊
tab
後進行試驗MESSAGE=
- 掛起 (zsh/Debian Jessie) shell 並且Ctrl-C
也沒有幫助!我有點不敢相信它沒有內置這個基本功能,所以我確定我一定錯過了什麼?
謝謝。
目前,journalctl 不支持欄位匹配中的模式或萬用字元。
grep
是您的最佳選擇。我遇到了同樣的問題,我認為只有在作為參數傳遞
journalctl
時才搜尋 VALUE 的完全匹配。NAME=VALUE
我的調查:
- 手冊頁
從
journalctl(1)
匹配的描述中沒有提到該模式:
[...] A match is in the format "FIELD=VALUE", e.g. "_SYSTEMD_UNIT=httpd.service", referring to the components of a structured journal entry. [...]
-u
手冊頁僅在描述選項時引用模式。-u, --unit=UNIT|PATTERN Show messages for the specified systemd unit UNIT (such as a service unit), or for any of the units matched by PATTERN.
- 原始碼
函式
fnmatch
insrc/journal
僅在搜尋單位時使用。 3. 調試日誌ctl啟用調試輸出,您可以看到模式僅在使用
-u
.$ SYSTEMD_LOG_LEVEL=debug journalctl -n1 -u gdm* ... Matched gdm.service with pattern _SYSTEMD_UNIT=gdm* Matched gdm.service with pattern UNIT=gdm* Journal filter: ((OBJECT_SYSTEMD_UNIT=gdm.service AND _UID=0) OR (UNIT=gdm.service AND _PID=1) OR (COREDUMP_UNIT=gdm.service AND _UID=0 AND MESSAGE_ID=fc2e22bc6ee647b6b90729ab34a250b1) OR _SYSTEMD_UNIT=gdm.service) ...
所有匹配都被視為精確匹配,包括
UNIT
:$ SYSTEMD_LOG_LEVEL=debug journalctl -n1 UNIT=gdm.* ... Journal filter: UNIT=gdm* ...