No.396
【rsyslog+Docker】rsyslogからコンテナのプログラムを呼び出す
binary="/bin/docker exec xxx"
するときの注意事項
重要な注意事項はただひとつ。
-i
オプションを忘れないこと。
これに尽きる。
rsyslogでomprog
を使用して外部プログラムを呼び出すとき、メッセージ内容は標準入力で渡される。
そのため、-i
オプションでSTDINを渡してやらないと、プログラムにメッセージが送られないのだ。
[docker exec - Options(]https://docs.docker.com/engine/reference/commandline/exec/#options)
--interactive , -i Keep STDIN open even if not attached
これを失念しているとかなりハマる。というかハマった。猛省。
記述例
説明するときコピペで渡せるように、簡単なrsyslogのconfファイルの記述例を書いておく。
/etc/rysylog.d/setting.conf
のように.d
ディレクトリに配置する。
module(load="omprog")
template(name="テンプレート名" type="string" string="メッセージの変換テンプレート\n")
if (条件1) then {
if (条件2) then {
action(type="omprog" binary="/usr/bin/sudo -uユーザー名 /bin/bash -l /bin/docker exec -i -u ユーザー名 コンテナ名 実行コマンド" template="テンプレート名")
}
}
※パスなどはCentOS7基準