Nagios × boundioを使った鬱陶しいアラートの作り方 β

fujya.shです。はじめての人は、はじめまして!そうじゃない人はお久しぶりです。
最近暑いですね。サーバールームの温度も少し上がってきたので、あぁ本当の夏がやってきたんだなと実感できる今日この頃です。

今回はboundioというKDDIウェブコミュニケーションズが提供している電話APIサービスを使って少しもにょもにょしてみたいと思います。


■アラートメールがジャンジャン来るとむしろ気づかない。じゃあ電話じゃない?


運用しているサービスが増えてきたり、サーバーの台数が増えてくるとアラートメールがジャンジャンきたりしますよね?本来ならばそういった場合にアラートの原因をすぐさま対策するか、しきい値の変更を実施すれば良いのですが時間的な制約で次週へ持ち越し・・・なんて事も稀にある話です。
そんな時にメールボックスがパンクしてしまい、ほんとうに大事なアラートに気付けない事もあるって話を聞いたり聞かなかったり。(弊社ではそんなことあり得ないですよ?本当です!!)
メールのToにデリミタつけて、重要度別に振り分けして・・・などの運用でカバーなんて事も全然有りなんですが超重要なアラートだけが電話できたら、確実に気づけると思うんですね。


そこでboundioですよ


■boundioって?

・KDDIウェブコミュニケーションズが提供しているクラウド電話API
・電話機能を「数行のコード」でWebサイトやアプリに組み込める
・アップロードした音声を再生する機能
・テキスト文字列を音声ファイルに変換できる音声合成機能
・基本料金は月額1,575円
・通話料は固定電話向けが1分15ポイント/携帯電話向けが25ポイント(1ポイント1円)
※ 無料お試しアカウント有り(500ポイント付与)
→ 今回は無料お試しアカウントを使わせてもらいました

http://www.itmedia.co.jp/news/articles/1204/11/news106.html より

■boundioから電話してみよう


1:まずはboundioで無料お試しアカウントの登録。


説明するの面倒なのでhttp://boundio.jp/から適当に登録してください。説明する必要もないぐらい簡単に登録できるので説明なんてしませんよ。

登録完了後にログインするとこんな画面が出てきます。

ここには電話するために重要な情報がとりあえず2つあるのでとりあえずコピっておきましょう。

  • ユーザーシリアルID
  • APIアクセスキー

※ ユーザ認証キーは今回は使わない

2:音声ファイル登録してみる

画面上部の「音声ファイル管理」をクリックしてみましょう。
その後に「音声ファイルの追加」をクリックです。

そうするとこんな画面が出てくるので「アップロード」か「音声合成」を選びます。


とりあえず今回は音声合成で女性の声で

「サーバーが爆発しました」

とでも言わせておきますか。夏ですし。

合成完了後にサンプルを聞くこともできるので、確認した後保存しましょう。
保存が完了するとレコードが追加されてます。
ここでも以下情報をコピっておいてください。あとで使います。

  • ファイル管理ID


3:とりあえずサーバーを爆発させてみる

架電用APIマニュアルがあるので見てみましょう。
http://boundio.jp/docs/%E6%9E%B6%E9%9B%BB%E7%94%A8API#.E4.BD.BF.E7.94.A8.E6.96.B9.E6.B3.95.E3.83.BB.E5.BC.95.E6.95.B0

マニュアルを見ると非常に簡単に電話できそうな上php/perl/ruby/javaでのサンプルコードもあるのでさっくり作れそうです。本当にさっくり作れます。
今回はpythonで書いてみたのですが、こんなかんじで架電が可能です。

  1. #! /usr/bin/python  
  2. # coding: utf8  
  3.   
  4. from optparse import OptionParser  
  5. import os, sys  
  6. import httplib,urllib  
  7. import time  
  8. from os import path  
  9.   
  10. usage = “usage: %prog [Options] tel_to_number”  
  11. parser = OptionParser(usage=usage)  
  12.   
  13. (options, args) = parser.parse_args()  
  14. tel_to = args[0]  
  15.   
  16. def main():  
  17.     serial =  ‘SSSSSSSSSSSSSSSS’  
  18.     key    =  ‘KKKKKKKKKKKKKKKK’  
  19.     filename = ‘00000N’  
  20.       
  21.     url = ‘boundio.jp’  
  22.     headers = {“Content-type”“application/x-www-form-urlencoded”,  
  23.            “Accept”“text/plain”}  
  24.     path = ‘%s/%s/%s’ % (‘/api/vd1’ , serial , ‘call’)  
  25.     cast = ‘file(%s)’ % filename  
  26.     params = urllib.urlencode({‘key’: key, ‘tel_to’: tel_to, ‘cast’: cast})  
  27.     conn = httplib.HTTPSConnection(url)  
  28.     conn.request(“POST”, path, params, headers)  
  29.     response = conn.getresponse()  
  30.     data = response.read()  
  31.     conn.close()  
  32.   
  33.   
  34. if __name__ == ‘__main__’:  
  35.     main()  

ソースコード内部の変数は以下のように置き換えてください。

  • serial   → ユーザーシリアルID
  • key     → APIアクセスキー
  • filename → ファイル管理ID

※ ハードコードしてありますがuriの中で/api/vd1と書いてある箇所はデベロッパー番だけ使えるuriです。通常の架電用APIでは/api/v1になります。

実際に運用で使う場合はコンフィグやオプションで渡せるようにすると良さそうです。

このファイルをboundio.pyと名付けて、実行権限を与えて第一引数に電話番号を渡して実行してみましょう。

./boundio.py 03XXXXXXXX








TELTELTELTELTELTELTEL・・・
ガチャ

「サーバーガバクハツシマシタ」

ちゃんと爆発しました。電話成功です。


■Nagiosと連携させてみよう


では当初の目的通りアラートを電話でならしてみましょう。
監視ソフトウェアはNagiosを使います。
連携イメージはこんな感じ

1:連絡先の登録


Nagiosのcontacts.cfgには「pager=ポケベル」を設定可能な箇所があるので、今回はここに自分の携帯電話でも登録してみましょう。あとservice_notification_commandsに仮でnotify-by-telとでも登録しておきましょう。

– contacts.cfg

define  contact {        contact_name                    fujya.sh        alias                           fujya.sh        contactgroups                   fujya.sh        host_notification_period        24x7        service_notification_period     24x7        host_notification_options       d,u,r        service_notification_options    w,u,c,r        host_notification_commands      host-notify-by-email        service_notification_commands   notify-by-tel        pager                           090XXXXXXXX        }


2:コマンドの登録


次にはboundio.pyをコマンドとして登録しましょう。引数にpagerが指定されるように設定すると担当者に電話がいくはずです。

– misccommands.cfg

define  command {        command_name    notify-by-tel        command_line    /usr/local/bin/boundio.py $CONTACTPAGER$        }

3:監視に追加してみよう


最後にservices/<check>.cfgの中にある監視項目の中で電話でアラートさせたい監視項目のevent_handlerを2.で作ったnotify-by-telに変更してみましょう。

–  services/<check>.cfg 

define  service {        host_name                       shanon.co.jp        service_description             check_boundio_test        is_volatile                     0        check_command                   check_http        max_check_attempts              3        normal_check_interval           3        retry_check_interval            3        active_checks_enabled           1        passive_checks_enabled          1        check_period                    24x7        parallelize_check               1        obsess_over_service             1        check_freshness                 0        event_handler                   notify-by-tel        event_handler_enabled           1        flap_detection_enabled          1        process_perf_data               1        retain_status_information       1        retain_nonstatus_information    1        contact_groups                  fujya.sh        notification_interval           3        notification_period             24x7        notification_options            w,u,c,r,f        notifications_enabled           1        register                        1        }

これで障害が発生したら電話がかかってくるようになります!
やったね。鬱陶しいアラート完成!!





サーバーガバクハツシマシタ \(^o^)/

■今後の展望

  • このままだとPROBLEMもRECOVERYもサーバーが爆発する電話しかこないので、振り分けできるようにする
    • $NOTIFICATIONTYPE$をboundio.pyに渡せれるように修正し、音声を振り分けれるようにしておく。
  • どのサーバーがどんな障害が発生したか分からないので音声ファイル操作APIでサーバー名が入った音声が動的にアップロードされる仕組みを構築
  • リトライ機能/架電等の失敗時にはメールで通知
  • Nagiosのtimeperiods.cfgで日中・夜間で電話かける先を振り分けられるようにする
  • 朝なかなか来ないあの人が起きるまでその人に電話かけ続ける監視項目を追加
  • 1コール25円かかるので本当に運用開始する場合は会社に稟議を・・・

などなど考え中です。

boundioはその他にもたくさんの機能があり、マニュアルもシンプルで分かりやすく、さっくりとアプリが作れてしまう所が魅力です。
タイトルでは鬱陶しいなんて言葉使ってますけど、boundioは素晴らしいサービスです!そこだけは間違えないようにご注意を。

アラートメールに気づかない、気づけないという人がいたらお試しあれですぞ。
その他にもこんな使い方が面白そうというのがあればぜひぜひ共有してください。私も何か思いついたらこのブログで続報書こうと思います。

それではまた会う日まで。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中