rainerscript:$programname substringというファイルにどのようにログインしますか?

rainerscript:$programname substringというファイルにどのようにログインしますか?

rainerscriptという部分文字列を含むファイルにログするルールをどのように作成できますか$programname

私は次のような擬似規則に従うことを望みます。

if $programname startswith "foo" then /path/to/<substring of $programname from 4 to end>

$programnameまた:ファイルに書き込まれたテキストから「foo」プレフィックスを削除する方法はありますか?

ベストアンサー1

実際、OPの意見は役に立たないと思います。いくつかの追加テストを行った結果、共有したいと思う確かな答えは次のとおりです。

次の内容で/etc/rsyslog.d/00-local.confを作成します。

template(name="AdminLog" type="string" string="/var/log/admin_%syslogtag:R,ERE,1,ZERO::(.*):--end%")

if ($programname == "admin") then {
  action(type="omfile" dynaFile="AdminLog")
  stop
}

systemctl restart rsyslog
logger -t admin:backup starting

これにより、/var/log/admin_backup がログを取得します。

メモ:

  • 私はUbuntu 20.04を実行しています。プラットフォーム/バージョン別の微妙な違いが結果に影響を与える可能性があります。
  • 以下ですべての変更とコマンドが完了しましたsudo -s
  • このテンプレートに正規表現を使用する必要はありません。 '%property:Field' 表記法がより効率的です。これは、より複雑な正規表現の使用方法を示すためです。両方の構文を参照してください。不動産代替品操作。
  • %syslogtag の末尾にコロンが追加され、解析時にこれを受け入れる必要があります。
  • 使用に非常に役立ちます正規表現テストページRsyslogの場合。
  • /var/log以外のフォルダに新しいファイルを作成すると、既知の問題が発生し、これはOP要求の範囲外です。 /var/logにあるファイルに対して機能するように作成し、別のフォルダに対して機能するように別々の課題を実行します。
  • 参考にしてください行動使用動的ファイルオプション。
  • これは結果を変換することによっても実行できます。テンプレートを変数としてexec_template を使用してさらに操作します。これはサンプルページ
  • Rainerscriptで正規表現を実行する別の方法は、次を使用することです。再抽出機能。例:
    set $.thefunction = re_extract($syslogtag,...)

おすすめ記事