[アップデート] Amazon Elasticsearch Service でアラート機能がサポートされました

はじめに

こんにちは。中川です。
Amazon Elasticsearch Service で、アラート機能がサポートされましたので、試してみました。

Amazon Elasticsearch Service でイベント監視およびアラートのサポートを開始

先月、AWSはElasticearchの新しいディストリビューション"Open Distro for Elasticsearch"を公開しました。
このディストリビューションによって追加される機能が、今回のアップデートで追加された形になります。
ディストリビューションの詳細については、以下の記事を参考にしていただければと思います。

AWSがElasticsearchの新ディストリビューションをApacheライセンスで公開

なお、アラート機能を利用するにあたって、以下の点には注意しましょう。

  • Elasticsearchのバージョンが6.2以上であること(本ブログでも6.2を使用)
  • ソフトウェアリリースは、R20190221以上であること
  • SNS連携はOpen Distro for Elasticsearchには無く、Amazon Elasticsearch Serviceの独自機能であること

やってみた

環境

構成はこのようになっており、WebサーバーのアクセスログをElasticsearchに収集しています。
今回は、HTTPステータスコードが200以外で、一定回数発生した場合に、メール通知します。

SNSを作成

通知するためのSNSトピックを作成します。
メールで通知するため、ここではEmailを選択しています。

IAMロールを作成

ElaticsearchがSNSを使用するため、以下のロールを作成します。
ポリシーは、公式ドキュメントに記載されています。

ロール

ポリシー

信頼関係

通知先を設定

いよいよElasticsearchの設定に入っていきます。
まず、通知先の設定をします。
Alerting > Destinationsと選択し、[Add destionation]をクリックします。

各項目を入力し、[Create]をクリックします。

監視を設定

続いて監視の設定をします。
Monitorsを選択し、[Create monitor]をクリックします。

監視設定の項目を入力します。
ここでは監視間隔を5分で設定しています。

監視定義を設定します。
今回はクエリを使用して定義をするため、Define using extraction queryを選択し、Indexではアクセスログのインデックスを指定しています。
クエリでは、ステータスコードが200以外であることをカウント対象にしています。

使用したクエリは以下のとおりです。

{
    "size": 0,
    "query": {
        "bool": {
            "filter": [
                {
                    "range": {
                        "@timestamp": {
                            "from": "{{period_end}}||-5m",
                            "to": "{{period_end}}",
                            "include_lower": true,
                            "include_upper": true,
                            "format": "epoch_millis",
                            "boost": 1
                        }
                    }
                }
            ],
            "must_not": [
                { 
                    "match": {
                      "response": "200" 
                    } 
                }
            ],
            "adjust_pure_negative": true,
            "boost": 1
        }
    },
    "aggregations": {}
}

トリガーを設定

最後にトリガーの設定です。
トリガー名と重要度を設定します。

上のExtraction query responseでは、設定時におけるクエリ結果が表示されており、下のTrigger conditionでトリガーの条件を設定しています。
ここでは、10回以上ヒットした場合を条件にしています。

さきほど設定した通知先をトリガーに設定し、[Create]をクリックすると設定は完了になります。

動作確認

Webサーバーで504エラーを返しました。

メールが届くことを確認できました。

さいごに

Elasticsearch上でログ監視とアラートをやってみました。
以前は、Elasticsearchにログを収集していても、監視は他のサーバーやサービスで実装する必要がありました。
Elasticsearchでは、検索クエリを用いた複雑な監視ができたり、他のデータストアを使用しない分のコスト削減をできるので、ログ監視の選択肢は増えたと思います。
Amazon Elasticsearch Serviceは、今後もますます機能追加が期待できるため、引き続き注目していきたいです。