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で処理が行えるようになる。