如何使用 rsyslog 模板基於萬用字元 syslog 工具編寫日誌文件?
我的 systemd 目標/服務設計有多個唯一標識的子服務。我的
test.target
需要 10 個test-@.service
實例。結果是目標執行,並且有 10 個已辨識的服務。例如test-@0.service, test-@1.service, etc...
,這是讓目標控制一堆類似服務的常用方法。每個服務都將 Systemd SyslogIndentifer 設置為
SyslogIdentifier=test-%i
。因此,當它記錄到 syslog/journald 時,設施名稱是test-0,test-1, etc...
這是一個範例日誌記錄,請注意設施
test-0
:Oct 29 03:32:35 black-node.local test-0[5015]: 1603942355636701,CON,192.168.10.151:57458,4,12,1,-,-,-,timeout expired; UDP connection assumed closed.
現在,我需要/想要將所有生成的
test-*
syslog 消息記錄到單獨的日誌文件中。我嘗試在 `/etc/rsyslog.d/test.conf 中添加以下內容:$template TestFile,"/var/log/test-%syslogfacility-text%.log" test-*.* ?TestFile
但我在恢復 rsyslogd ( ) 時收到以下錯誤
sudo systemctl restart rsyslog
:Message from syslogd@black-node at Oct 29 03:19:22 ... rsyslogd:file './.* ? TestFile': open error: Permission denied [v8.24.0-52.el7 try http://www.rsyslog.com/e/2433 ] Message from syslogd@black-node at Oct 29 03:19:22 ... rsyslogd:action 'action 2' resumed (module 'builtin:omfile') [v8.24.0-52.el7 try http://www.rsyslog.com/e/2359 ]
這不是文件權限,rsyslog 錯誤 2359 頁面說它可能與 selinux (!!!) 有關。所以我嘗試關閉 selinux (
sudo setenforce 0
) 並再次重新啟動 rsyslogd:Message from syslogd@black-node at Oct 29 03:18:07 ... systemd:Started System Logging Service. Message from syslogd@black-node at Oct 29 03:18:07 ... rsyslogd:error during parsing file /etc/rsyslog.d/test.conf, on or before line 7: warnings occured in file '/etc/rsyslog.d/transfers.conf' around line 7 [v8.24.0-52.el7 try http://www.rsyslog.com/e/2207 ] Message from syslogd@black-node at Oct 29 03:18:07 ... rsyslogd:action '*' treated as ':omusrmsg:*' - please use ':omusrmsg:*' syntax instead, '*' will not be supported in the future [v8.24.0-52.el7 try http://www.rsyslog.com/e/2184 ]
是不是有點鼓舞人心?我不知道如何或是否應該申請 :omusrmsg: 但我試過了:
$template TestFile,"/var/log/test-%syslogfacility-text%.log" test-:omusrmsg:*.* ?TestFile
現在 rsyslog 重新啟動正常,沒有錯誤或投訴,但也沒有新的日誌文件。
在這一點上我快瘋了,所以我隔離了第一個服務設施
test-0
:$template TestFile,"/var/log/test-%syslogfacility-text%.log" test-0.* ?TestFile
我在消息/日誌中看到日誌,但我的日誌文件沒有創建,並且在重新啟動時沒有任何 rsyslog 錯誤。
如何簡單地將多個日誌設施聚合到一個日誌文件中?我什至似乎無法讓一般的動態日誌文件類型的情況起作用?!任何提示將非常感謝。謝謝你。
SyslogIdentifier=
並且test-0
不是設施,而是程序名稱。替換%syslogfacility-text%
為%programname%
並使用舊的屬性過濾器選擇器,例如:programname, startswith, "test-" ?TestFile