業務でSplunkのアラート時にスクリプトを実行したいという要件があり、その際にカスタムアラートアクションを利用したので、動作確認の内容を記載していきます。
カスタムアラートアクション用のApp構成
※動作確認のために必要なもので対応してます。
test_alert
┣bin
┃ ┗test.py
┣defaut
┃ ┣alert_actions.conf
┃ ┗app.conf
┗metadata
┗default.meta
app.confの記載
アプリに関するパッケージとUIの情報を記載します。
[package]
check_for_updates = false : Splunkbaseへのアップデートチェックの無効化
[ui]
is_visible = false : SplunkWeb上のGUI表示の無効化
alert_actions.confの記載
このファイルでアラート時のアクション内容を設定します。
アラートアクションの名前であったり、アラート時にスクリプトを連携したい場合はここで定義したりしていきます。
以下のような設定をすることでスクリプトに渡すパラメータを設定することが可能です。
param.[パラメータ名] = [パラメータ値]
尚、パラメータ値に「SPLUNK_ARG environment variable」で準備されている環境変数をいれることで検索結果のイベント数等をパラメータ値として指定することが可能です。
デフォルトで準備されているパラメータもあります。
[test_alert]
is_custom = 1 :カスタムアラートアクションを利用する場合は1にする
label = My Alert Action :SplunkWeb上でのカスタムアラートアクションの名前
payload_format = json :スクリプトへ渡される場合のペイロード形式
disabled = 0 :スタンザの有効化(有効にする場合は0にする)
alert.execute.cmd = test.py :アラート発生時に実行するスクリプト名
# Custom params
param.result_count = $job.resultCount$ :「result_count」パラメータ名で値に検索結果のイベント数を設定
param.search_query = $job.search$ :「search_query」パラメータ名で値に検索クエリを設定
param.test = abc :「test」パラメータ名で値に「abc」を設定
準備されている環境変数は下記を参照
https://docs.splunk.com/Documentation/Splunk/latest/AdvancedDev/CustomAlertConvertScripted#Accessing_script_argument_values_in_a_custom_alert_action
default.metaの記載
Appの権限の定義を記載します。
下記は作成Appに対してすべてのユーザから読み込みを許可、書き込みはadminユーザのみに許可を設定しています。
[]
access = read : [ * ], write : [ admin ]
export = system
スクリプトの記載(test.py)
アラート時に実行するスクリプトを作成していきます。
今回は、Splunkからの渡されたパラメータの値を確認しやすくするためだけに
「/tmp/test.txt」のテキストにパラメータ値を記載するだけのスクリプトになっています。
import sys
import os
import json
path = "/tmp/test.txt"
d = json.loads(sys.stdin.read())
file = open(path, 'w', encoding='utf-8')
file.write(str(d['configuration']['result_count'])+'\n')
file.write(str(d['configuration']['search_query'])+'\n')
file.write(str(d['configuration']['test'])+'\n')
file.close()
Appを適用してアラートを設定する
カスタムアラートアクションのAppが作成されたら、AppをSplunkに適用してアラート作成時にアクションでに作成したカスタムアクションが表示されているので適用するだけとなります。
GUI上での表示名は「alert_actions.conf」の「label」で設定した名前が表示されます。
さいごに
実際にカスタムアラートアクションで利用するスクリプトでは、Splunkで用意されているライブラリではがなかったので、App内にライブラリを準備して読み込ませてからスクリプトを実行させるみたいないことも実施してました。
今後、機会があればその辺も記載したいなと思います。