Centos7

如何使用 rsyslog 模板基於萬用字元 syslog 工具編寫日誌文件?

  • October 29, 2020

我的 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

引用自:https://serverfault.com/questions/1040467