はじめに
Splunk利用方法の一つとして、スケジュールサーチ(アラート)機能を利用して定期的にログを確認し、条件に合致した場合はアクション実行…といった使い方があります。
このスケジュールサーチですが、同時実行サーチ数の上限に到達する等の様々な要因により、サーチ実行に失敗したり、スキップされる場合があります。
スケジュールサーチの実行状況はMonitoring Console上で確認出来ますが、Splunk内部ログに対して任意のサーチを実行することでも確認することが出来ます。
注意事項
Splunk内部ログにおける詳細な出力条件や各フィールドの情報等に関する仕様等は、Splunk Documentation上では公開されておりません。
あくまで、筆者の経験値的なナレッジとしてのご紹介となります。
構成
- Splunk Enterpriseバージョン
- v8.2.2
- Splunk構成
- Standalone構成
- 分散構成(Distributed Environment)
- Search Head Cluster構成
Splunk内部ログを用いたスケジュールサーチ実行状況確認サーチ文
各サーチは、Splunk内部ログをサーチ可能なSplunkコンポーネント上にて実施します。
各スケジュールサーチにおけるスキップ発生確認
index=_internal sourcetype=scheduler app=(確認対象のスケジュールサーチ/アラートを設定したApp) status=skipped
| eval scheduled_time = strftime(scheduled_time,"%Y/%m/%d %H:%M:%S")
| table _time savedsearch_name scheduled_time status reason
上記サーチにより、実行がスキップされたスケジュールサーチ/アラートの名称(savedsearch_name)、実行予定時刻(scheduled_time)、実行ステータス(status)、スキップ理由(reason)を結果として得ることが出来ます。
各スケジュールサーチにおける失敗発生確認
index=_internal sourcetype=scheduler app=(確認対象のスケジュールサーチ/アラートを設定したApp) success=0
| eval scheduled_time = strftime(scheduled_time,"%Y/%m/%d %H:%M:%S")
| table _time savedsearch_name scheduled_time errmsg
上記サーチにより、実行が失敗したスケジュールサーチ/アラートの名称(savedsearch_name)、実行予定時刻(scheduled_time)、エラーメッセージ(errmsg)を結果として得ることが出来ます。
各スケジュールサーチ実行時における発生待ち時間確認
index=_internal sourcetype=scheduler app=(スケジュールサーチ/アラートを設定したApp) status=success
| eval wait_time=dispatch_time-scheduled_time
| search wait_time>=60
| eval scheduled_time = strftime(scheduled_time,"%Y-%m-%d %H:%M:%S")
| eval dispatch_time = strftime(dispatch_time,"%Y-%m-%d %H:%M:%S")
| table _time savedsearch_name scheduled_time dispatch_time wait_time
上記サーチにより、60秒以上の待ち時間が発生したスケジュールサーチ/アラートの名称(savedsearch_name)、実行予定時刻(scheduled_time)、実際に実行された時刻(dispatch_time)、発生した待ち時間(wait_time)を結果として得ることが出来ます。待ち時間の検索条件を変更したい場合は、3行目の条件式を変更します。
同時実行サーチ数上限到達事象の発生確認
index=_internal (sourcetype=splunkd OR sourcetype=scheduler) "The maximum number of concurrent"
上記サーチを実行して1件以上の結果が得られた場合、同時実行サーチ数の上限に抵触した状況が発生していたことになります。
各スケジュールサーチ実行におけるサーチ所要時間
index=_audit source=audittrail savedsearch_name=(調査対象のスケジュールサーチ名)
| stats values(user) as user max(total_run_time) as total_run_time by savedsearch_name exec_time
| eval exec_time = strftime(exec_time,"%Y/%m/%d %H:%M:%S")
| sort - total_run_time
上記サーチにより、スキップされたスケジュールサーチ/アラートの名称(savedsearch_name)、実行された時刻(exec_time)、サーチ所要時間(total_run_time)を、所要時間が長い順に結果として得ることが出来ます。