2015-12-09(水) [長年日記]
■ Mackerelの通知をPushbulletにも送るようにした(2)
昨日はMackerelが検知したalertを、たんにその存在をPushbulletに通知するにとどまっていたが、手元の開発マシンで強制的にCPU利用率が高すぎるalertを発生させた場合のJSONを見ながら、いい感じのPipelineを書いた:
var src = JSON.parse(request.body);
var dst = {
value1: "[" + src.event + "]",
value2: null,
value3: null
};
switch(src.event) {
case "sample":
dst.value2 = src.message;
break;
case "alert":
dst.value1 = "[" + src.event + "] " + src.host.name + " is " + src.alert.status;
dst.value2 = src.alert.monitorName + ": " + src.alert.metricValue;
dst.value3 = src.alert.url;
break;
default:
dst.value2 = "unknown event";
break;
}
request.body = JSON.stringify(dst);
return request;
これで、CPU使用率が徐々にあがってwarning → critical になり、その後下がったようすがこんな感じに通知されるようになった。悪くないんじゃね?
![[スクリーンショット]Pushbulletの一連の通知 [スクリーンショット]Pushbulletの一連の通知](https://lh3.googleusercontent.com/-X2l60qp18oA/Vme1tiTh9vI/AAAAAAABiTI/iHZODcBz5Xo/s512/%2525E3%252582%2525B9%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252583%2525BC%2525E3%252583%2525B3%2525E3%252582%2525B7%2525E3%252583%2525A7%2525E3%252583%252583%2525E3%252583%252588%2525202015-12-09%25252014.00.53.png)
今後は未知のeventが出たらそれに合わせて書き換えていこう。
2015-12-08(火) [長年日記]
■ Mackerelの通知をPushbulletにも送るようにした
先日Mackerel+IFTTTで運用担当者がアラートに絶対に気づく仕組みを作るという記事をみかけたので「これは応用できそう」と思って真似してみることにした。そういえば日記には書いてなかったけど、IDCFクラウド上で運用してるサーバはMackerelで監視しているのだ。ただ、Mackerelがサポートしている通知メディアのうち自分が使っているのはメールだけなので、ちょっと通知に気づきにくいのが難点だったんだよね。Pushbulletが使えるなら(いまのところ)それがベスト。
で、上の記事に当初書かれていた:
Mackerel → IFTTT(Maker) → Pushbullet
という流れがうまく動かなくて、ブクマにメモっておいたら気づいてもらえて、いまの記事にあるように間にreflector.ioを挟むようにしたらうまくいった:
Mackerel → reflector.io → IFTTT(Maker) → Pushbullet
もっともMakerが求めてるJSONをMackerelが投げてくれるわけではないので、このままだと単に「何か発生した」ってことしかわからない。せっかく間にreflector.ioをかましているのでここでJSONを加工する。reflector.ioはPipelineという仕組みでこの変換メソッドをJavaScriptで記述できる。
とりあえずMackerelでテスト用のイベントを発火させてみると、こんなJSONが出ていることがわかった:
{"event":"sample","message":"Sample Notification from Mackerel"}
ので、reflector.ioのPipelineはこんな感じ:
var src = JSON.parse(request.body);
request.body = JSON.stringify({
value1: src.event,
value2: src.message
});
return request;
これを通ると、IFTTTのMakerチャンネルに届くJSONはこうなる:
{"value1":"sample","value2":"Sample Notification from Mackerel"}
この「value1」はPushbulletチャンネルでは大文字始まりの「Value1」として参照できるので(2、3も同様)、好きなようにメッセージを組み立てればよろしい。できたレシピがこんな感じ:
実際の通知で使われるJSONはまた違うので、Pipelineを書き換えないといけないのだけど、MackerelのヘルプにあるWebhookにアラートを通知するには通知されるJSONは以下のような内容を含んでいますと書いてあるだけで……「ような」ってなんだよ! 仕様書けよ!!(笑) まったくもー、Web屋はほんと仕様を書かないよな……。
というわけで、実際にアラートが出るまで実用的なPipelineが書けないのだった(という話をMackerel Advent Calendar 2015に書けばいいのでは?)。安定してるからめったに通知来ないけど。
もっとも、こんなに多段にサービスを経由してたら、どこか途中のサービスが落ちてるだけで通知を受け取れなくなってしまうわけで「絶対に気づく仕組み」とはとうてい言えないよなぁ。やっぱMackerel自身がPushbulletをサポートしてくれるのが一番なんだけど(リクエストは行ってるらしい)。
というかですね、この過程でPushbulletがOAuth2に準拠してることに気づいたのだけど、宅配トラッカーでAPIトークンを設定させてるの超ダサいじゃん!! 余裕ができたらOAuth2サポートしよう……。
2015-12-07(月) [長年日記]
■ 金星探査機「あかつき」、金星周回軌道へ
先日の「はやぶさ2」の地球スイングバイにつづいて、今日は朝から「あかつき」が5年越しのリベンジに挑むということで、注目が続く日本の宇宙探査界隈。臼田さんも大忙しだねぇと思ったら、今回は内之浦とキャンベラで追跡していたのかな*1。今朝も(例によって)猫に起こされたので、夜明け直前の夜空をみたら(左下から)金星・月・木星がほぼ一直線に並んでいたので記念に撮った。手持ちスマホでもけっこうちゃんと写るもんだ。ブレてるけど。
メインエンジンが死んでいるので姿勢制御エンジンだけを20分もの長時間噴射して軌道へ投入されるということだけど、ちょうどその時間は通勤中なので、Twitterで関連アカウントを追っていたら、肝心の8時すぎからパタっと更新がなくなってしまってかなり心配してしまった。こないだの「はやぶさ2」でも同じことがあって「ああ、JAXAの広報、また人手不足か……」と悲しい気分に。おそらく記者会見の準備等でそれどころじゃないのだろう。はぁ、お金ほしい……。
とりあえず噴射は成功という報告が出ているのでひと安心、あとは軌道要素の確定までにちょっと待つ感じかな。ちゃんと観測できるだけの元気が残ってるといいのだけど。
*1 追記: と思ったら臼田も参加していたようだ。あとマドリッドも。