私が担当しているシステムの監視は 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を探して追加します。
Assigned to Team
でアサインしたいチームを指定します。
この際、エンドポイントURLをコピーし控えておきます。
Stackdriver側の設定
プロジェクト名のところをクリックし、「Workspace Settings」をクリックします。
WEBHOOKS
タブをクリックし、「Add Webhook」をクリックします。
先ほど控えておいたエンドポイントURLを貼り付け、「Test Connection」をクリックし問題がなければ「Save」をクリックします。
アラート設定画面の「Notifications」で先ほど追加したWebhookを追加し保存すれば完了です。
テスト
アラートが正常に通知されるかテストします。 サンプル用のペイロードを用意します。
# 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 とOpsGenieを連携する方法を紹介しました。Stackdriverはメトリクスの見方など少々癖がありますが、様々なエージェントを仕込むことでログ監視や詳細なメトリクス監視をマルチクラウドで可能なので選択肢としてアリですね。