トップ 最新 追記
RSS feed

ただのにっき


2015-12-10(木) [長年日記]

グラコロ同盟2015、今年は12月11日から

[スクリーンショット]2015年シーズンのグラコロ同盟サイト(スマホ用)

少し前に「今年のグラコロは12月15日から」という情報を得ていて(暖冬なので遅いだろうとは思っていた)、「じゃあRubyKaigi終わってからのんびり作業すればいいや」と安心しきっていたのに、今日になって急に「明日から」なんて情報がわらわらと出始めて、どうも今年も先行発売をする店舗がある、それもけっこうな数で、ということらしい。

ということで、作りかけだったサイトを慌てて整備して、よせばいいのにスマホ向けにflexboxを使ってレスポンシブにしたりして(トップページだけね)、ようやく公開。明日の朝までテスト中。今年からハッシュタグを#グラコロ同盟に変更したので、よりなにやってるのかわかりやすくなったかと。

個人的には明日から三日間、RubyKaigiなのでいきなり出遅れそうな気もするが……。

Tags: gracoro

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の一連の通知

今後は未知の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も同様)、好きなようにメッセージを組み立てればよろしい。できたレシピがこんな感じ:

IFTTT Recipe: Push Webhook message to Pushbullet connects maker to pushbullet

実際の通知で使われるJSONはまた違うので、Pipelineを書き換えないといけないのだけど、MackerelのヘルプにあるWebhookにアラートを通知するには通知されるJSONは以下のような内容を含んでいますと書いてあるだけで……「ような」ってなんだよ! 仕様書けよ!!(笑) まったくもー、Web屋はほんと仕様を書かないよな……。

というわけで、実際にアラートが出るまで実用的なPipelineが書けないのだった(という話をMackerel Advent Calendar 2015に書けばいいのでは?)。安定してるからめったに通知来ないけど。

もっとも、こんなに多段にサービスを経由してたら、どこか途中のサービスが落ちてるだけで通知を受け取れなくなってしまうわけで「絶対に気づく仕組み」とはとうてい言えないよなぁ。やっぱMackerel自身がPushbulletをサポートしてくれるのが一番なんだけど(リクエストは行ってるらしい)。


というかですね、この過程でPushbulletがOAuth2に準拠してることに気づいたのだけど、宅配トラッカーでAPIトークンを設定させてるの超ダサいじゃん!! 余裕ができたらOAuth2サポートしよう……。

関連する日記: 2015-12-09(水)

トップ 最新 追記
RSS feed