2
4

More than 5 years have passed since last update.

GKE+Waker+Twilioでアラートエスカレーションシステムを構築してみた

Posted at

経緯

  • zabbixのアラートだけだとメールに気づかないので電話かけさせたいなーという要望が運用側からあったので

目指すところ

waker.jpg

  1. zabbixがアラート契機でWakerのAPIをキックする
  2. WakerがIncidentを作成してTwilioのAPIをキックする
  3. Twilioが電話かける
  4. 電話出たら1を押してACK返す
    • 返ってこなければ次の人に電話かける
  5. TwilioがCallbackでWakerのAPIをキックする
  6. WakerがIncidentのステータスをAcknowlegedに変更

Wakerについて

アラートエスカレーションシステム"Waker"の紹介 - クックパッド開発者ブログ
ryotarai/waker: Wake someone up!

Twilioについて

Twilio for KDDI Web Communications | コミュニケーションAPI

  • 電話かけたりSMS送ったりできるAPIを提供してくれているサービス
  • ドキュメントやSDKが結構充実しているので使いやすそう
    • 今回はWakerの機能使って利用しているので、実際にコーディングはしてない

Twilioアカウント作成・設定

  • Twilio for KDDI Web Communications | コミュニケーションAPI のサインアップボタンから作成
  • チュートリアルに従ってTwilio用の電話番号1つ購入
    • Trialの範囲内で購入可能
    • 有料だと月額108円
  • コンソールの左の#→Verified Caller IDsと進んで、Twilioからかける先の電話番号を登録
    • Trialだと認証してない番号へは電話かけられないので、登録必須

Twilioの費用

Wakerサーバの構築

  • 今回はGKEで構築
  • Wakerイメージは自作
    • uu4k/waker - Docker Hub
    • 一応イメージ用意されていたが、githubの最新のコード積んでないっぽかったので自分用に色々修正して作成(20171116時点)
    • あとGoogleの認証使わないのでUserを手動で作れるようにしたかったので

Waker設定

1. アラートの通知を行うUserを作成

  • メニューのUsers→New Userから作成できる
    • なぜか最初はDeactiveになっているので、ユーザ一覧からActivateする
  • 電話番号はあとで記載するNotifierのほうで設定

2. Twilio用のNotifier provider(アラートの通知手段)を作成

account_sid: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
auth_token: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
from: 810000000000

3. Notifier(通知先の設定)を作成

  • 上のメニューのNotifiers→New Notifierから作成できる
    • UserにNotifierに関連づけたいUserを設定
    • Topicは空で
    • Providerは先ほど作ったNotifier Providerを設定
    • Settingsには送信先の電話番号(to)を設定
    • 平日勤務時間は通知をしないようにも設定できる
    • Notify after secにはエスカレーションされてから何秒後に通知するかの設定
    • エスカレーションされてから=Notifierに紐づいたEscalationが呼ばれてから
      • Escalation側にもインシデント発生してから何秒後に通知するかの設定ができるので、それと合わせて秒数後に通知が行われる
    • 通知前に誰かしらがインシデントをACK(確認済み)にした場合は通知行われない
to: "+81xxxxxxxxx"
# 平日9:30~18:30まで通知しない設定
or_conditions:
- japanese_weekday: true
  not_between: 9:30+0900-18:30+0900
- not_japanese_weekday: true

4. Escalation Series(Escalationの集合)を作成

  • 上のメニューのEscalation Series→New Escalation seriesから作成できる
    • とりあえず名前だけでOK

5. Escalation(エスカレーションの設定)を作成

  • 上のメニューの(ry
    • Escalate toに通知を行うUserを設定
    • Escalate after secにインシデント発生から何秒後にエスカレーションするかを設定
    • Escalation seriesには先ほど作ったのを設定
  • エスカレーションルールを入れ替える際には各EscalationのUser設定を変更してあげれば良さそう
    • GoogleCalendar連携使えばカレンダー経由で変更できるが今回は使ってないので

6. Topic(アラートを受信するためのエンドポイント)を作成

  • 上のメニューの(ry
    • KindはAPIを設定
    • Escalation seriesには先ほど作ったのを設定
  • 作成後、EndpointのURLが確認できるのでアラート発生元からここのEndpoint叩いてやればIncidentが作成されて、アラートエスカレーションが行われる
    • 動作確認 curl -X POST http://xxx.xxx.xxx.xxx:8080/topics/1/mailgun.json -d "subject=sample&body-plain=sample"
    • 電話出て1ボタン押すとACKになってエスカレーション止まる。すごい

注意

  • GoogleCalendar連携は使用しない
    • Oauth2の認証の関係でWakerにドメイン設定してあげないといけなかったので
    • ついては、エスカレーションの順番の変更は手動でやる
    • cronで変更するスクリプト作っても良いかもね

Zabbix設定

課題

  • WakerへアクセスできるIPを制限かけようと思ったが、TwilioのCallback元のIPが固定化されてないので無理
    • とりあえずBasic認証でお茶にごす方向で
  • エスカレーションルールの自動切り替え
    • GoogleCalendar使わずともできる仕組みが欲しい

終わりに

2
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
4