Phillips Hueを活用したインシデント通知

大変ご無沙汰しております。 自分が担当する記事では、

tech.geniee.co.jp

から実に約半年ぶりの投稿になります。

今回も唐突ではございますが、Phillips Hue

f:id:xxj:20150401211222j:plain:w100 http://www2.meethue.com/ja-JP

を使用して、Sensuからのアラートをランプで視覚化してみましたのでそれについて簡単にご紹介させていただきます。 Sensuについては弊社のhmikisatoの過去の記事

tech.geniee.co.jp

をお読みいただければと思います。

準備

とりあえずアラートを表現したい種類分購入しました。 今回は

  • SSP

  • DSP

  • DMP

  • その他

の4種類としました。 開封の儀を執り行った後は、初期設定を行います。 パッケージの説明にもありますが、ランプの追加などもほぼ全てアプリからできるようです。

HueのAPIを叩いてみる

HueはRESTful APIで手軽に操作できます。 詳しくは日本語の情報もありますし、以下をご覧いただければとおもいますが、

色々遊べるハイテク照明 「Philips hue」のAPIを叩いてみた。 | u1's tech blog

今回はsensuの状態をランプの色で可視化したいので、とりあえず手順通りにsensuユーザーを作成して試してみます。 http://.../api/sensu/lights を試しにブラウザで叩くと、

{"1":{"state": {"on":true,"bri":1,"hue":47000,"sat":254,"effect":"none","xy":[0.1682,0.0423],"ct":500,"alert":"none","colormode":"hs","reachable":true}, "type": "Extended color light", "name": "Hue Lamp 1", "modelid": "LCT001","uniqueid":"********", "swversion": "66013452", "pointsymbol": { "1":"none", "2":"none", "3":"none", "4":"none", "5":"none", "6":"none", "7":"none", "8":"none" }},"2":{"state": {"on":true,"bri":1,"hue":47000,"sat":254,"effect":"none","xy":[0.1682,0.0423],"ct":500,"alert":"none","colormode":"hs","reachable":true}, "type": "Extended color light", "name": "Hue Lamp 2", "modelid": "LCT001","uniqueid":"00:17:88:01:00:f2:2f:68-0b", "swversion": "66013452", "pointsymbol": { "1":"none", "2":"none", "3":"none", "4":"none", "5":"none", "6":"none", "7":"none", "8":"none" }},"3":{"state": {"on":true,"bri":1,"hue":47000,"sat":254,"effect":"none","xy":[0.1682,0.0423],"ct":500,"alert":"none","colormode":"hs","reachable":true}, "type": "Extended color light", "name": "Hue Lamp 3", "modelid": "LCT001","uniqueid":"********", "swversion": "66013452", "pointsymbol": { "1":"none", "2":"none", "3":"none", "4":"none", "5":"none", "6":"none", "7":"none", "8":"none" }},"4":{"state": {"on":true,"bri":1,"hue":47000,"sat":254,"effect":"none","xy":[0.1682,0.0423],"ct":500,"alert":"none","colormode":"hs","reachable":true}, "type": "Extended color light", "name": "Hue Lamp 4", "modelid": "LCT001","uniqueid":"********", "swversion": "66013452", "pointsymbol": { "1":"none", "2":"none", "3":"none", "4":"none", "5":"none", "6":"none", "7":"none", "8":"none" }}}

が返ってきます。これがランプ一覧と現在の状態のようです。

SensuのAPIを叩いてみる

次に、sensuで発生しているイベントを取得するために、 http://your sense server:port/events を叩きます。すると

[]

が返ってきました。そこまで頻繁にアラートがされるようなシステムではないため、上の例では何もない状態ですが、どんなものが返ってくるかなど詳しい内容は Sensu | Events をご覧ください。

Parsingなどは省略させていただきますが、 今回は弊社のプロダクトごとにsensuでカテゴリ分けしてあるので、 eventのcategoryとそのstatus(CRITICALかWARNNIGか)を集計すればうまくいきそうです。

実際に動かしてみる。

とりあえず版はcrontabに登録して1分ごとに回してみます。 イベントの数に応じて、そのプロダクトの稼働状態を表現したいので、 色相(hue)をイベントの種類に応じて

my $HUE_NORMAL = 47000; #blue?
my $HUE_WARN = 19384; #yellow
my $HUE_CRIT = 0; #red

として、イベントの数を明るさ(bri)と対応させ、 明るさで表現できない数のイベント発生も考慮して点滅(alert)も設定する感じにしました。 上を踏まえて

my $json = encode_json {"hue"=>$h, "sat"=>255, "bri"=>$b, "on"=>"true", "alert"=>$a};

でエンコードされるようなjsonをHTTPでPUTします。

実際の動作風景は以下の様な感じです。 f:id:xxj:20150730193543j:plain

今後の課題

今回はcronで適当にapiを叩くというようなスクリプトなので、状態管理などの高等なことがあまりできていません。 今後やる暇があったら、新規イベントがあったら一回点滅するなどしていければと思っています。