MicroAd Developers Blog

マイクロアドのエンジニアブログです。インフラ、開発、分析について発信していきます。

アラートメールのslack通知の話

マイクロアドでアプリケーションエンジニアをしているタカギです。

バッチ開発がメインのチーム(第4開発ユニット:通称ゆーよん)に所属しています。

バッチといえば避けては通れないのが、アラート対応ですね。

そういうわけで、今回の記事では、アラートメールのslack通知について記事を書いていきたいと思います。

背景

マイクロアドでは、非常に多くのバッチ処理が走っています。バッチスケジューラとしては、最近はDigdagが主流ですが、一部にはJenkins、Rundeckなどから実行されるバッチも存在します。また、監視ツール系のバッチはcrontabで動いていたりもします。

大抵の場合、アラートメールはメーリングリスト宛に送信され、所属しているメンバーの会社の個人メールアドレスに届く事が多いと思います。 個人のメールボックスには、アラートメール以外にも多くのメールが届いているはずなので、必然的にアラートメールが埋もれていってしまい、気づけないことも多くなります。

そのため、マイクロアドでは、アラートメールが来たことをslackに通知する仕組みを導入しています。マイクロアドではgmailを利用していることもあり、アラートメールのslack通知をGoogle Apps Scriptで行っています。

Google Apps Script(GAS)とは?

Google Apps Script は JavaScript ベースのスクリプト言語で、ドキュメント、スプレッドシート、スライド、フォームなどの G Suite サービスをカスタマイズ、拡張できます。インストール作業は不要です。ブラウザ内で動作するコードエディタが用意されており、スクリプトは Google のサーバーで実行されます。 Apps Script  |  G Suite Developer  |  Google Developers

上記に記載されているように、JavaScript ベースのスクリプト言語で、Googleの他のサービスと連携することができるのが特徴の一つです。

ブラウザ上でコードを編集することも可能なのですが、clasp1というCLIツールを使用すると、下記のような点で非常に便利です。

  • コードをバージョン管理しやすい
  • コマンドラインでリリースができる
  • TypeScriptで書ける

課題

アラートメールが来たことをslackで確認できるようになったことで、以前よりも格段に気づきやすくなりました。しかしながら、その一方で下記のような問題がありました。

  • どのチームが担当しているバッチなのか分からない
    • ※アラートメールの宛先は、基本的にプロダクトごとに設定されているが、プロダクトには複数のチームが関わっていることが多い
  • 緊急度が分からない
    • 即時対応なのか、営業日対応なのか?、長期連休中はどうなるのか?など
    • ※基本方針として、業務時間外は、対応しなくて済むものはなるべく対応しないようにしたい(社内分析用のデータ転送処理など)が、その判断ができない
  • リカバリ方法が分からない
    • 冪等性のあるバッチかどうかが分からない
    • ドキュメントの在り処が分からない
    • そもそも存在するのかどうかも分からないドキュメントを、Confluence2などで探したりする
  • アラートが来るたびに上記のことに頭を悩ませる
    • 頑張って調べても、それを忘れた頃にまたアラートが飛んでくると、、、

Googleスプレッドシートを導入

そこで導入したのが、Googleスプレッドシートです。Google Apps Scriptと連携しやすいのが主な理由ですが、

  • ドキュメントがほしい
  • とはいえドキュメントをメンテナンスするコストは最小限にしたい
  • 情報を柔軟に追加・変更できるようにしたい

というニーズにもぴったりでした。

欲しかった情報は主に下記の4項目です。

  • 担当UNIT(マイクロアドではチームのことをUNITと呼んでいる)
  • 対応期限
  • 後続処理の有無
  • 備考(その他、補足的な情報)

加えて、担当UNITの項目には、slack通知時に担当UNITにメンションされるような文字列を記載しました。(slack的にはユーザーグループ)

# ABCDEFGHIの部分にslackのグループIDを設定する
U4 <!subteam^ABCDEFGHI>

参考:Mentioning groups3

スプレッドシートのイメージ

f:id:takagi_mutsuo:20200929105824p:plain

Googleスプレッドシート導入後のslack通知処理の流れ

下記のような流れです。

  • gmailから未通知のアラートメールを取得
  • アラートメールからバッチを特定する情報を取得(メールタイトルに記載されているプロジェクト名、ワークフロー名など)
  • スプレッドシートから対象バッチの付加情報を取得
  • slack通知時に、付加情報をメッセージに追加

f:id:takagi_mutsuo:20201009114917p:plain

Googleスプレッドシート導入後のslack通知

実際にslackに通知されたメッセージです。 担当UNITのところで、黄色背景で「@u4」という文字がありますが、これでu4グループのメンバーにメンションされています。

f:id:takagi_mutsuo:20200929105735p:plain

Googleスプレッドシートを導入してみて

以下のような効果があったように思います。

  • アラートメールが飛んできたとき、自チームで対応が必要なものだけメンションされるようになった。そのため、不要なslackのチェックがなくなった。
  • 休日にアラートが飛んできても、即時対応のもの以外は、ある程度余裕を持って対応できるようになった。
  • 昔作られたよく知らないバッチも、対応したときの手順、対応すべき内容、関連するページのURL、などを備考に記載しておくことで、次回以降の対応がしやすくなった。

今後の課題

slack通知と直接の関連はないかもしれませんが、運用観点で、下記のような課題があります。

  • 過去データのリカバリ作業で対象となるバッチの抜け漏れを防ぎたい
  • バッチの前後関係を可視化したい

現在、スプレッドシートの情報を元にバッチの前後関係を構築する、という構想が練られています。

その他、スプレッドシートの項目も充実させたいとは思っていますが、項目が多すぎるとメンテナンスが大変になってくるので、バランスをとりながらやっていきたいです。

まとめ

スプレッドシートを導入することで、既存のslack通知の問題点を大幅に改善することができたと思います。 とても大変なアラート対応ですが、今後も運用しやすいように、色々と改善していけたらと思います。


  1. https://github.com/google/clasp

  2. マイクロアドではConfluenceを社内wikiとして活用しています

  3. https://api.slack.com/reference/surfaces/formatting#mentioning-groups