読者です 読者をやめる 読者になる 読者になる

LCL Engineers' Blog

夜行バス比較なび・格安移動・高速バス比較を運営する 株式会社LCL開発者のブログ

New RelicのAlertをChatWorkに通知する

最近、New RelicのAlertの通知先をメールから、ChatWorkに変更しました。

Slack等と比較すると、ChatWorkは外部サービスとの連携が弱く、New Relicとの連携もなかなか面倒です。

数カ月前に、zapierというハブサービスが出てきたものの、無償版だと制限が厳しく、結局Railsで自作しました。

※ zapierの有償版は、それほど高くないので、本格的にChatWork連携を活用するのなら使うのは有りだと思います。

New RelickからChatWorkへの通知の流れ

New Relic のWebhookを利用して、以下の流れで通知されます。

  1. New RelicでAlert発生
  2. New RelicがWebhookで指定されたURLを呼ぶ
  3. 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を使えば簡単に実装できます。

GitHub - asonas/chatwork-ruby

2. New RelicのChannels で Webhook URLを登録

New Relicの画面で、

 Alerts > Notification channels > New notification channel

を開くとchannelを選択できます。

Slack等はデフォルトで用意されてますが、ChatWorkはないのでWebhookを選びます。

f:id:lcl-engineer:20160208223342p:plain

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

f:id:lcl-engineer:20160208223310p:plain

3. New RelicのAlertで、Channelsを選択

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

f:id:lcl-engineer:20160208224529p:plain

Alertが発生すると、

f:id:lcl-engineer:20160207225334p:plain

ChatWokにAlert情報が通知されます。

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