メール経由の監視系の通知をどのようにSlackに集約するか on AWS

  • 22
    いいね
  • 0
    コメント

こんにちは、GoodpatchProttチームでインフラを担当しています @urapico です。

今回は、メール経由で通知がくるものをどのように、Slack に集約するのかというお話です。主にAWSのお話でもあります。


サーバー監視系のソフトウェアの場合、結果をメールで通知してくるものが、いくつかあります。
例)
- Tripwire
- Logwatch

ただ、Prottチームでは、様々なディスカッション、CIの結果、コードレビューのメンション、DeployなどをSlack上で行っています。
なので、上記のようなソフトウェアの結果もSlackに集約できることがよりベターです。

AWS SES :e-mail:

まず、ソフトウェアのメールの受け先として、AWS SESを利用します。
SESは、メール送信のプラットフォームとして、非常に有名で活用している人も多いと思いますが、実は、メールを受信することも可能です。
しかも、受信可能な最大容量は、30Mと十分な容量です。

Amazon SES を使用した E メールの受信

この設定を利用すれば、SESで受信したタイミングで、AWS SNSやLambdaのfunctionなどを呼び出すということが可能です。

Serverless Framework / AWS Lambda :zap:

次に、SESで受信した内容をどのようにSlackに通知する処理を動かすのかという点ですが、そのためだけにサーバーを構築するのも億劫ですし、ここは、今流行りのServerlessの力を借りたいと思います。今回は、AWS Lambdaを利用します。

Lambda を活用する場合、素の状態だと、以下の項目の管理が非常に厳しいです。

  • コードの管理
  • Lambda自身の権限管理
  • テストコード、CI
  • Deploy
  • etc.

そこで、最近巷では、Lambdaを有効に活用ができるように、いくつかFrameworkが出てきています。
今回活用したのは、Serverless Framework です。 (名前からしてすごい。。。)

image

私は、以前に素の状態で、Lambdaを使って、画像圧縮処理などを実装した経験がありましたが、その時に感じたのは、
バージョン管理や、CIなど通常のDeploy作業などと異なり、かなり属人的で、人の手がかかる所が多く、
このまま利用し続けるのは、難しいというものでした。

ただ、このServerless Frameworkを使ったところ、その不安感を拭い去ってくれるのでした。
バージョン管理や、Deployや環境ごとに、変数の値を変更したりなど、非常に簡単にこのFramework上で扱えました。

Slackへの通知 :mailbox:

Slackへの通知で1点気をつけないといけないことは、Slackの1ポストの容量が決まっている点です。
監視系のツールがポストしてくる量は、それを上回ることが多いため、今回は、Slackに通知すると同時に、
S3のバケットにもuploadするようにしています。

このS3に対する権限管理も Serverless Frameworkが担ってくれます。
非常にシームレスに、Serverless のアプリケーションが構築でき、非常に満足です。

その他にも活躍 :muscle:

Serverless Frameworkの活躍する場は、上記以外にも、色々とあると思います。
具体的には、AWS Cloudwatch logs などで集約したログを監視して、該当のログがあった場合に、それを加工して、Slackのチャンネルに投稿することも可能です。

最後に / 宿題 :pencil:

今回、Slackに集約することができるようになりました。

ただ、このままではサーバーの数が増えると、Slackに通知される内容が多くなり、見るのも一苦労になってしまいます。
今後の宿題として、通知の量を何かしらのコントロールして、継続的に利用できるようにしていきたいと考えています。 :bow:

この投稿は Goodpatch Advent Calendar 20164日目の記事です。