本日も乙

ただの自己満足な備忘録。

Stackdriver と アラート通知ツール OpsGenie を連携する

私が担当しているシステムの監視は Mackerel、通知管理サービス(エスカレーション、TELコールなど)は OpsGenie を使っています。
AWSリソースの監視はMackerelのAWSインテグレーションによって、EC2の他、ELBやRDSの監視ができますが、GCPのロードバランサやCloud SQLなどはMackerelの監視ができないため、Stackdriver による監視をすることになります(MackerelのGCPインテグレーションが早く来てほしいですね!)。

アラート監視はStackdriverになるものの、通知系はOpsGenieで統一したいので、これらを連携する方法を調べてみました。
調べてみたといっても、こちらに書いてあります。
Stackdriver Integration - OpsGenie Docs

OpsGenie側の設定

https://app.opsgenie.com/integration#/ から Stackdriverを探して追加します。

stackdriver_integration01

Assigned to Team でアサインしたいチームを指定します。
この際、エンドポイントURLをコピーし控えておきます。

stackdriver_integration02

Stackdriver側の設定

プロジェクト名のところをクリックし、「Workspace Settings」をクリックします。

stackdriver_integration03

WEBHOOKSタブをクリックし、「Add Webhook」をクリックします。

stackdriver_integration04

先ほど控えておいたエンドポイントURLを貼り付け、「Test Connection」をクリックし問題がなければ「Save」をクリックします。

stackdriver_integration05

アラート設定画面の「Notifications」で先ほど追加したWebhookを追加し保存すれば完了です。

stackdriver_integration06

テスト

アラートが正常に通知されるかテストします。 サンプル用のペイロードを用意します。

# payload.json
{
  "incident": {
    "incident_id": "f2e08c333dc64cb09f75eaab355393bz",
    "resource_id": "i-4a266a2d",
    "resource_name": "webserver-85",
    "state": "open",
    "started_at": 1385085727,
    "ended_at": null,
    "policy_name": "Webserver Health",
    "condition_name": "CPU usage",
    "url": "https://app.stackdriver.com/incidents/f333dc64z",
    "summary": "CPU for webserver-85 is above the threshold of 1% with a value of 28.5%"
  },
  "version": 1.1
}

StackdriverのエンドポイントにこのペイロードをPOSTすることでアラート通知できます。

$ curl -H "Content-Type:application/json" -X POST -d @payload.json https://api.opsgenie.com/v1/json/stackdriver?apiKey=xxxxxx
{"took":0.002,"requestId":"efdc20f2-c57b-4363-b327-68f4d42b3b74"}

Slackに通知するようにしているのであれば、このような通知がくるはずです。

stackdriver_integration07

最後に

Stackdriver とOpsGenieを連携する方法を紹介しました。Stackdriverはメトリクスの見方など少々癖がありますが、様々なエージェントを仕込むことでログ監視や詳細なメトリクス監視をマルチクラウドで可能なので選択肢としてアリですね。