GraylogとRundeckを連携させて特定のログ発生時にジョブをキックさせる

GraylogでStreamで定義したログを検知した際、Rundeckの特定のジョブをキックさせるようにさせたい。
そんな時は、Graylog側にこちらのプラグインを導入し諸々の設定をしてやればよい。

今回は、Graylogからログ内の特定の値をRundeckに連携して、任意のジョブを実行させるよう設定してみる。

1.Graylogへプラグインのインストール

まずは、以下のコマンドを実行してGraylogにプラグインのインストールを行う。
ダウンロードするjarファイルのURLについては、こちらで最新のものを確認しておく。

cd /usr/share/graylog-server/plugin/
sudo wget https://github.com/Graylog2/graylog-plugin-rundeck/releases/download/1.1.1/graylog-plugin-rundeck-1.1.1.jar
sudo systemctl restart graylog-server

これで、プラグインのインストール・有効化がされた。

2.Rundeck側での設定

次に、Rundeck側でAPIキーの払い出しや実行するジョブの設定を行う。
まず、ジョブを実行させるユーザ(今回はとりあえずadmin)でログインしProfile画面に遷移し、「API Tokens」からキーを払い出す。

次に、Graylog側から実行させるジョブを作成する。
この際、ステップにはスクリプトを指定してやることで引数を利用できる。
ここでは、既存のスクリプトではなく簡単なスクリプトをRundeck側で記述してやってジョブを作成した。

なお、オプションの変数名にはGraylog側のフィールド名を指定すること(今回は、Graylog側でSplitして作成した項目「TEST_ARGS」を指定している)。
ジョブの作成後、払いだされたUUIDを控えておく。

3.Graylog側での設定

次に、Graylog側の設定を行う。
対象のStreamで[Manage Alerts]をクリックしてalert conditionを定義したら、CallbackでRundeckの設定をする。
※このとき、RundeckのURLは基本的には「http://IPアドレスorホスト名:4440」となる。

また、GraylogからRundeckに値を連携するログの項目名を「Field arguments」に入力してやる(複数渡す場合は,(カンマ)区切りで入力する)。
なお、sourceやmessageといった項目は最初から対応しているので、それらだけ入力してやればRundeck側のオプション変数「source」「message」に連携がされる。

これで、連携設定が完了。

4.ログの検知・ジョブ実行の確認

最後に、実際にログを検知させてジョブがキックされることを確認してみよう。
ログ監視をしているノードで以下のようにコマンドを実行する(Streamの条件が項目「TEST_USER」がrootの場合となっているので、下のログならキックされる。)。

logger USER=\"root\" COMMAND=\"grep\" ARGS=\"aaa_args\"

無事、指定したログの項目が連携されたことが確認できた。
これで、特定のログが来た際には、そのログの値に応じたジョブを自動的に実行させることができる。