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基準