アラートエスカレーションシステム"Waker"の紹介

インフラストラクチャー部の荒井(@ryot_a_rai)です。今回は社内で利用しているアラート通知システムであるWakerの紹介をします。

Wakerはアラートを受け付けて、指定されたユーザに電話などの手段でアラートを通知するためのアプリケーションです。

PagerDuty

アラートのエスカレーション・通知といえばPagerDutyが有名ですが、弊社では主にコスト面でPagerDutyを利用していません。日本国内への電話発信はGlobal Phone Alertsとしてカウントされ、通知数にもよりますが1ユーザ当たり$29〜49/月かかります。これを高いとするか、安いとするかはそれぞれかと思いますが、ユーザが増えてくると高くなるためユーザの追加がしづらく監視の委譲・分業がすすめづらいという点がありました。

また、弊社ではシンプルなエスカレーションと電話通知のみが必要されていた、という背景があり、Wakerを開発しました。

Waker

Wakerの主な機能は以下です:

  • インシデントの作成
    • メール受信やAPI経由でインシデントを作成できます
  • エスカレーション
    • 指定した時間、担当者から反応がない場合、次の担当者にエスカレーションすることが可能です
  • 通知
    • ユーザごとに通知先、通知するタイミングを設定できます
    • 通知先としてはTwilio(電話の発信)、Mailgun(メールの送信)、HipChatを選択できます
    • (ちなみに、Slackは現状サポートされてません。求むPR)

WakerはZabbixなどの監視システムからアラートを受け取り、事前に設定しておいたエスカレーションルールにしたがって、通知を行います。以下はWakerを使った通知システムの構成例です。通知はTwilioのみ、などの小さな構成でも利用できます。

f:id:ryotarai:20151118164833p:plain

エスカレーション

インシデントが作成されると、紐付いたTopicに設定されているEscalation Series(Escalationの集合)にしたがってエスカレーションされます。Escalationにはインシデント発生から何秒後にどのユーザにエスカレーションするかを指定することができます。エスカレーションされたユーザは事前に設定しておいたNotifierにしたがって通知を受け取ることができます。Notifierにはエスカレーション後何秒後に通知するか、どこに通知するかといった項目を設定できます。

また、エスカレーションとは別にNotifierを設定することもでき、これをつかってHipChatなどのチャットに通知することも可能です。

f:id:ryotarai:20151118164847p:plain

エスカレーションされた人は、電話のプッシュボタンやメールのリンクから"Acknowledge"することでアラートを受け取ったことを表明できエスカレーションを止めることができます。

f:id:ryotarai:20151118164923p:plain

エスカレーションルールの管理

エスカレーションの順番や担当者は日替わりや週替りでローテーションしていることも多いかと多いかと思いますが、Waker自体の設定でローテーションを設定することはできません。その代わり、Google Calendarのカレンダーを参照して、エスカレーション先のユーザを変更する機能が用意されています。

例えば、以下の予定が作成されていると17:00から19:00の間は荒井、星、成田の順にエスカレーションされ、19:00から21:00の間は星、成田、荒井の順にエスカレーションされるようになります。

f:id:ryotarai:20151118164949p:plain

弊社では予定の繰り返し機能を使って週ごとに担当者が変わるようにしています。

インストールと設定

WakerはふつうのRailsアプリで、MySQLとRedisがあれば動作します。インストール方法や設定はドキュメントをご覧ください(近日中にドキュメント内容拡充予定です)。

まとめ

以上、簡単にですがアラート通知システムWakerの紹介をしました。

Wakerは発展途上のアプリケーションです。機能リクエストやバグ報告、Pull Requestなどお待ちしております。

おまけ: Itamae Meetup

Wakerとは全く関係ないですが、OSSのサーバ構成管理ツールであるItamaeのMeetupが12/9(水)に開催されます。ぜひご参加ください!(Itamaeについての過去の記事はこちら

参加登録はこちらから!