.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定義を見て、全体像を得ることもできます。