最近、New RelicのAlertの通知先をメールから、ChatWorkに変更しました。
Slack等と比較すると、ChatWorkは外部サービスとの連携が弱く、New Relicとの連携もなかなか面倒です。
数カ月前に、zapierというハブサービスが出てきたものの、無償版だと制限が厳しく、結局Railsで自作しました。
※ zapierの有償版は、それほど高くないので、本格的にChatWork連携を活用するのなら使うのは有りだと思います。
New RelickからChatWorkへの通知の流れ
New Relic のWebhookを利用して、以下の流れで通知されます。
- New RelicでAlert発生
- New RelicがWebhookで指定されたURLを呼ぶ
- New Relicからの情報を受け取り、ChatWorkへ通知
連携手順
前提
- ChatWorkのAPIキーは、既に取得済みであること
- New Relic のAlertは、最近?新しくなったBETA版を利用
1. Webhookを受け取るRailsプログラムの準備
New Relic側の設定の前に、Webhookの受け口の準備が必要になります。 New Relicからは、以下のパラメータ(一部略)がPOSTで渡されるので、このパラメータを受け取って、ChatWorkへ通知するプログラムを準備します。
pp params
=>
{"owner"=>"",
"severity"=>"CRITICAL",
"current_state"=>"open",
"policy_name"=>"CPU High",
"targets"=>
[{"id"=>"123456",
"name"=>"xxxx-server",
"link"=>
"https://rpm.newrelic.com/accounts/xxxxxx/servers/xxxxxxx?tw[start]=1454862970&tw[end]=1454864770",
"labels"=>{},
"product"=>"SERVERS",
"type"=>"Server"}],
"event_type"=>"INCIDENT",
"runbook_url"=>nil,
"details"=>"CPU > 85% for at least 5 minutes",
"condition_name"=>"CPU % (High)",
"timestamp"=>1454864765138,
}
ちなみに、ChatWorkへ通知は、以下のgemを使えば簡単に実装できます。
2. New RelicのChannels で Webhook URLを登録
New Relicの画面で、
Alerts > Notification channels > New notification channel
を開くとchannelを選択できます。
Slack等はデフォルトで用意されてますが、ChatWorkはないのでWebhookを選びます。

1で準備したRailsのURLを指定し、Saveすれば登録されます。

3. New RelicのAlertで、Channelsを選択
あとは、Alertの条件を設定して、notification channelに、2で準備したchannelを選択すれば完了です。

Alertが発生すると、

ChatWokにAlert情報が通知されます。
メール通知だと、Alertに対応する前にまず「今メール通知来ているAlertの件だけど・・・」とワンクッション説明が必要でしたが、チャット通知だと即対応に入れるので楽ですね。