Splunkでエラーメッセージを元にアラートを送る

## はじめに

Splunkに取り込んでいるログからキーワードで検知してアラートを送る方法を（今さら）まとめます。


## 基本パターン
### 対象ログをサーチ

まずはSPLでアラート対象にしたいログを検索します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1218403/8b624888-2226-f56d-c822-129100535998.png)


### アラートルールの作成

名前を付けて保存 > アラート
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1218403/81bb6926-429c-d241-08e1-5c109e8ddc2f.png)


アラート定義していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1218403/847cae0d-923b-8a88-874b-90912b1778dd.png)


設定において重要なポイント

- 権限
アラート定義を他の人にも共有したければ「App内で共有」にします。

- アラートタイプ
「スケジュール済み」にします。「リアルタイム」はサーチヘッドへの負荷がとてもとても上がってしまいますので基本的には選ばないです。
実行間隔はいくつか選べます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1218403/91b68d82-6975-9e1f-62a1-c8a4272b0625.png)

ログ検知したいのでCronスケジュールで例えば5分置きとか15分置きが良いかと思います。
例えば15分置きは`*/15 * * * *`でcron式を書けます。
その場合に「時間範囲」は実行間隔と合わせましょう。15分置きであれば過去15分（Last 15 minutes）です。
これにより15分ごとに過去15分のログをサーチする動きになります。

- 生成条件
結果数が0より大きい（つまり1件以上検知した場合）に通知させます。
「生成条件」については「1回」は複数イベント検知しても通知はまとめて、「各結果に対して」は検知したイベント数分だけ通知されます。

- 抑制
一度通知した後に通知抑制できます。

- アクション生成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1218403/99575fef-efc5-4ef5-c386-1e939f432e41.png)

ここで通知アクション（メール送信やSlack送信など）を選択します。

通知アクションによって設定できる内容は異なります。
メール送信の場合は宛先、件名、本文などなどを設定できます。
各項目にはサーチ結果のフィールドの内容を変数で指定できます。

詳細はこちら。
※「email」というタイトルですが、メール以外のアクションでも同様に使えます

https://docs.splunk.com/Documentation/Splunk/latest/Alert/EmailNotificationTokens


## 諸々

### アラート定義の編集
作成したアラートは設定 > サーチ、レポート、アラートから見れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1218403/e66c1485-d56a-e1ac-45e4-cd278108d6c6.png)

編集 > アラートの編集 から編集画面が開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1218403/cabc70f3-3743-4876-016d-ad55d68186b8.png)


### アラートをSplunk上で確認したい

アクション生成で「[生成アラートに加える](https://docs.splunk.com/Documentation/Splunk/latest/Alert/Reviewtriggeredalerts)」を追加することでSplunk上でも確認できます。
（アクション生成は複数定義することができます）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1218403/343a2d9e-9348-cf64-1393-fa3e64fcd7d7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1218403/97f40e8b-a4b3-0480-b855-4220083df332.png)

生成アラートはアクティビティ > 生成されたアラートから確認できます。
デフォルトで24時間（[個別設定で最長7日](https://docs.splunk.com/Documentation/Splunk/latest/Alert/Updatealerts#Update_triggered_alert_record_lifespans)）利用できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1218403/fb817ecd-2210-fb7d-d378-15dacb37cffd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1218403/96b582ba-7745-09d1-d295-3559ea971f71.png)


もしくは「[Log Event](https://docs.splunk.com/Documentation/Splunk/latest/Alert/LogEvents)」を使うとイベントとしてSplunkに記録できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1218403/ce740d4d-6ce1-e589-7b34-5ec1b7e799e0.png)

こっちであれば長期間保存できたり更に加工したりできるので便利ですね。



### 通知アクションの追加

通知アクションはSplunkbaseで拡張することができます。
（例：MS Teams, Slack, ServiceNow, Jira etc）
「Notification」や「Alert」で検索したり、好みのツールがないか調べてみましょう。

https://splunkbase.splunk.com/apps?keyword=notification


### 条件付けアラート送信

条件（検知時刻やホスト名など）に応じてアラート送信先を変えたりアラート抑止したい場合もやりようはあります。
こちらでまとめています。

https://qiita.com/symmr/items/01e2d05ca6850bc1c6a6


### その他FAQ

Q: 自動アクション取れる？
A: 例えばAnsibleと連携して自動アクションできます

https://qiita.com/symmr/items/e1428fc4a1c89da68c59

Q: 欲しいアクションがSplunkbaseにもないんだけど
A: 対向システムがWebhookに対応していれば[Better Webhooks](https://splunkbase.splunk.com/app/7450)で任意のフォーマットでWebhook送れます。
※デフォルトでWebhookありますがフォーマットが固定されています。[AWS Lambdaに送って加工する](https://qiita.com/symmr/items/0819a2947435a84b0042)とかはできますけど。
もしくは[Add-on Builder](https://splunkbase.splunk.com/app/2962)で作りましょう！


Q: 通知済みのログをフラグ付けとかできる？
A: いやー厳しいです



## まとめ

取り込み済みのログからアラートを送る方法をまとめました。

Happy Splunking!