この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
こんにちは。中川です。 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は、今後もますます機能追加が期待できるため、引き続き注目していきたいです。