Bash

如何按標籤過濾 rsyslog 消息

  • May 4, 2020

我有幾個應用程序和腳本,我想將輸出重定向到自定義文件。

我使用啟動這些應用程序

command | logger -t TAG

我想根據它們的標籤過濾這些消息並將它們重定向到不同的文件。我不想使用 bash 重定向,因為這些應用程序主要是長時間執行的程序並且需要適當的日誌輪換。

我試圖在 /etc/rsyslog.d/60-myfilter.conf 添加自定義過濾器;

if $syslogtag == 'giomanager' then /var/log/giomanager.log

我究竟做錯了什麼 ?根據標籤進行過濾的正確方法是什麼,或者是否有更好的選擇來獲得類似的結果?

所以我終於找到了解決我問題的方法。

非常感謝@lain 帶領我前進。

如前所述,解決方案是在標籤名稱中包含一個“:”。另外,這很重要,文件名必須50-default.conf按字母順序排列在前面。

要恢復,請將以下內容放入30-giomanager.conf

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

請注意,該文件/var/log/giomanager.log應可由“syslog”使用者寫入。

如果這樣(或系統日誌標籤)我沒有使用過,但我已經使用過:<blah>,<condition> ...(特別是:msg,包含,…)但嘗試

:syslogtag, isequal, "giomanager:" /var/log/giomanager.log
& stop

& stop或者,& ~在 rsyslog v6 和更早版本(例如在 RHEL6 上))導致匹配的消息在記錄後被丟棄,否則它將被其他規則進一步解析。


更新:經過測試和

syslogtag 包含一個:並且應該包含在""而不是''

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