はじめに
あるアラートが発生したときに自動でアクションを行いたい、という要件はよくあります。
例えば、ディスク容量不足を予測して事前に容量拡張したり不要ファイルを削除する、メモリ逼迫時にプロセス再起動するなどです。
Splunk自身には自動でアクションを取るための機能はありませんが、自動化の一つの方法としてAnsible Tower/AWSとインテグレーションすることで実現できます。
ということで「やってみた」の記事です。
Ansible Tower/AWX Alert Action
このようなAdd-onがありAlert ActionからAnsible Tower/AWXのTemplateをキックできます。
使わせていただきましょう。
注意なのはSplunk Enterpriseのみ対応というところです。
(Splunk Cloud利用の場合は後述)
内部的にはAnsible Tower APIの/api/v2/job_templates/{id}/launch/
と/api/v2/workflow_job_templates/{id}/launch/
を使っているようです。
セットアップ
Ansible AWXの準備
今回用に立ててみました。
基本的にこの手順に従えばKubernetesにデプロイできます(Kubernetesがお勧めだそうです)。
この手順を解説されている記事もありました。
なんやかんやあって立ち上がりました。
AWXテンプレート
最初から入っているDemo Job Templateを使わせていただきましょう。
Ansible Tower/AWX Alert Action
Splunk EnterpriseにAdd-onをインストールした後に設定をします。
[設定 > Add-on Settings]からAWXホストの情報をいれます。
[入力 > Create New Input]から、Parse Ansible Queue
とParse Ansible Results Queue
を適当に作ります。
これは実行時と結果のQueue情報を任意のIndexに格納するものです。
Template実行結果を確認するための重要な情報です。
Alert Action設定
アクションを起こしたいSPLを書いてアラートを作成します。
アクションに「Execute Ansible Playbook」が追加されていますので情報を埋めます。
結果を変数で渡すこともできます。Template側でextra_varsが必要な場合はこのように渡しましょう。
(今回はTemplate側でextra_varsは不要なので弾かれるだけですが)
変数についての詳細はこちら。
結果の確認
アラートが実行されるまでしばし待つと、無事AWX側でジョブが実行されました。やったね。
Splunk側でも「入力」で定義したIndexにQueue情報が出力されています。
これで成功したかどうかが分かります。
拡張性について
今回はIDを決め打ちにしちゃいましたが、アラートメッセージとIDやParmの組み合わせをLookupにして、変数で渡すようにするとアラートをいくつも作らなくてすむかと思います。
Splunk Cloud使っているんだけど?
その場合はSplunk Enterpriseは個別に立ててSplunk EnterpriseからSplunk CloudへのFederated Searchを行う方法が考えられます。
Federated Searchのセットアップ手順はこちら。
https://docs.splunk.com/Documentation/Splunk/latest/FederatedSearch/fss2sAbout
ざっくり説明すると、
Splunk Cloud側:ロールとユーザーを作成。
Splunk Enterprise側:設定 > 統合サーチからSplunk Cloudの情報を入力。Standard modeの場合は取得対象のindexを指定。
これによりSplunk Enterprise上のSPLでSplunk CloudのIndexのデータをクエリし、Ansibleアラートアクションを実行することができます。
Splunk Observability Cloud使っているんだけど?
Splunk Infrastructure Monitoring Add-onを使うことでSplunk Observability Cloud上のアラートやメトリクスを拾うことができるので何とかなるでしょう。
https://splunkbase.splunk.com/app/5247
まとめ
Ansible Tower/AWXを使っている場合にSplunkからキックするAdd-onを試してみました。
Happy Automating!