社内se × プログラマ × ビッグデータ

プログラミングなどITに興味があります。

Elastalert を MailCatcher で動作確認

MailCatcher とは

シンプルなSMTPサーバ、ただし実際にはメールを宛先に転送せずに、WebUI上で一覧することができるもの。
ローカル環境でメール送信のテストをするのに便利そうです。
また、Docker のイメージも(何方かが)作成されたものがあります。今回はそれを使って Elastalert のテストをしてみます。
mailcatcher.me

元にするDocker Image

github.com

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/)
以下のような画面が表示されます。
f:id:blueskyarea:20200519181816p:plain

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 にアクセスしてみると、メールが送信されていることが確認できました。
f:id:blueskyarea:20200519183057p:plain

以前は gmail 経由で送受信テストを行いましたが、セキュリティの設定などにより、実際に送受信確認ができるまで手間がかかります。
MailCatcher は単純に送信テスト出来ているかを確認するにおいては、とても便利に使えると思います。