Elastalert を MailCatcher で動作確認
MailCatcher とは
シンプルなSMTPサーバ、ただし実際にはメールを宛先に転送せずに、WebUI上で一覧することができるもの。
ローカル環境でメール送信のテストをするのに便利そうです。
また、Docker のイメージも(何方かが)作成されたものがあります。今回はそれを使って Elastalert のテストをしてみます。
mailcatcher.me
元にするDocker Image
docker-compose.xml
(抜粋)MailCatcher の設定
smtp: image: schickling/mailcatcher hostname: doc-smtp101 container_name: smtp1 networks: elk_nw: ipv4_address: 172.60.0.7 ports: - 1080:1080 - 1025:1025
WebUI 用として1080番ポート、SMTP用として1025番ポートを使用するみたいですので、バインドしておきます。
(抜粋)elastalert の設定
elastalert のコンテナから、MailCatcher のコンテナにアクセスさせる必要があります。
そのため、elastalert の extra_hosts に MailCatcher の IPアドレス情報を追記しておきます。
extra_hosts: - "doc-elastic101:172.60.0.2" - "doc-logstash101:172.60.0.3" - "doc-kibana101:172.60.0.4" - "doc-smtp101:172.60.0.7"
起動
docker-compose up --build -d
動作確認
1) MailCatcher WebUI にアクセス (http://localhost:1080/)
以下のような画面が表示されます。
2) ElastAlert ルールの設定
es_host: doc-elastic101 es_port: 9200 name: Rule find error type: frequency index: filebeat-* is_enabled: true num_events: 1 timeframe: hours: 1 filter: - query: query_string: query: "message: *ERROR*" #subject to email alert_subject: "Found ERROR" alert: - "email" email: "xxx@example.com" smtp_host: "172.60.0.7" smtp_port: 1025 smtp_ssl: false from_addr: "elastalert@mailcatcher"
3. ERROR メッセージの投入
docker で filebeat を動作させており、"filebeat/logs/sample.log" を監視するようにしています。
そこに "ERROR" と書いたメッセージを投入することで、アラートの検知対象になります。
echo "[ERROR] this is error message." >> filebeat/logs/sample.log
4) MailCatcher WebUI にアクセス (http://localhost:1080/)
改めてMailCatcher WebUI にアクセスしてみると、メールが送信されていることが確認できました。
以前は gmail 経由で送受信テストを行いましたが、セキュリティの設定などにより、実際に送受信確認ができるまで手間がかかります。
MailCatcher は単純に送信テスト出来ているかを確認するにおいては、とても便利に使えると思います。