rsyslog(RainerScript)で定数を設定して使用する方法は?

rsyslog(RainerScript)で定数を設定して使用する方法は?

.rsyslog設定を含むアプリケーションを作成しています/etc/rsyslog.d/

特定のログメッセージは、次のように名前付きパイプにリダイレクトする必要があります。

template (name="my_fmt" type="string" string="<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag% %msg%\n")
if ( ... ) then {
    action(type="ompipe" Pipe="/tmp/SITENAME/pipe" Template="my_fmt")
    stop
}

これは期待どおりに機能します。残念ながら、上記のパイプ名のSITENAMEは事前に不明であり、顧客が設定する必要があります。

このような指示を書くことができます。「ファイル内のSITENAMEという単語を見つけて、特定の$ sitenameに置き換えてください。」コマンドを発行しても、sedこの方法は気に入らない。代わりに、ファイルの先頭に定数を設定し、必要に応じて使用したいと思います。このように:

set ACTUAL_SITE = "foo";

template (name="my_fmt" type="string" string="<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag% %msg%\n")
if ( ... ) then {
    action(type="ompipe" Pipe="/tmp/$ACTUAL_SITE/pipe" Template="my_fmt")
    stop
}

どうすればいいですか?私は(私が思うように)$、と%…%のすべてのバリエーションを試しましたが、そのうちの何も%$…%動作しませんでしたPipe="…"ACTUAL_SITE初期インストール後、値は変更されません。顧客のために構成を簡素化したいと思います。"ACTUAL_SITEの値を実際のサイト名に設定してください。"その人がファイルの残りの部分に触れないようにしてください。

ベストアンサー1

古いrsyslogバージョン(8.32以下)は実行したい操作をサポートしていません。

現在のrsyslogバージョンでは、バックティック定数を介してこれを行うことができます。ここ

そのために:

  • rsyslog が起動する前に、通常、ターゲット コンピュータにインストールするときに起動スクリプトに環境変数を追加して、環境変数を定義またはファイルに書き込みます。私たちはこれをSITE_PIPEと呼び、次のことを行います。

    export SITEPIPE="/tmp/mysite/pipe"
    
  • その後、バックティックを使用します。

    action(type="ompipe" Pipe=`echo $SITEPIPE` Template="my_fmt")
    

ファイルに書き込む場合は、次の構造を使用できます。

action(type="ompipe" Pipe=`cat pipenamefile` Template="my_fmt")

これらはすべてbashの仕組みに精通しているはずです。

実際の例はDockerコンテナにあります。コンテナへのリンクは次のとおりです。rsyslog.conf

しかし、残りのDocker定義を見て、全体像を得ることもできます。

おすすめ記事