Graylogから特定のログをトリガーにアラートをStackStormのWebHookにポストさせる

Graylogで、StreamのCallbackで「HTTP Alarm Callback」というのがバンドルされているのだが、これを使うことでStackStormのWebHookにログの内容をポストできるようなので使ってみることにした。
なお、StackStormのある環境はLAN内となるので、事前にプライベート認証局で証明書を発行してStackStormに設定しておく必要がある。
プライベート認証局を用いたSSL証明書の発行については、こちらを参考に設定してもらいたい。

1.ルートCA証明書のインストール

まずは、StackStorm側で設定したSSLをGraylogで利用できるよう、Javaが信頼できる証明書としてCA証明書を登録してやる必要がある。

sudo keytool -importcert -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts -storepass changeit -alias stackstorm_ca -file cacert.crt # ルートCA証明書
sudo keytool -importcert -keystore /usr/lib/jvm/java-8-oracle/jre/lib/security/cacerts -storepass changeit -alias stackstorm_ica -file icacert.crt # 中間CA証明書
sudo systemctl restart graylog-server

これで、GraylogからStackStormのWebHookにポストができるようになった。

2.『HTTP Alerm Callback』の設定

次に、任意のStreamのアラートで『HTTP Alerm Callback』の設定を行う。
Callbacksで『HTTP Alerm Callback』を選択し、Post先のURLとして以下を指定してやる。

https://BS-PUB-STACKSTORM.BLACKNON.LOCAL/api/v1/webhooks/WebHook名?st2-api-key=APIキー

あとは、アラート対象となるログが発生したら自動的にStackStormのWebHookにJSON形式でポストされるようになる。
ポストされるJSONについては、こちらを参考にするとよいだろう。

3.StackStorm側でのRules作成

StackStormのWebHookを使ったRuleの作成については、以前こちらに記述しているのでそれを元に作成すればよい。
GraylogからPostされたjsonの形式からデータを抽出する場合は、「trigger.body.~」を頭に追加してやればよい。

これで、GraylogのログをトリガーにStackStormで処理が行えるようになる。