[Oracle Cloud] リソースを監視して Slack に通知してみた (Load Balancer 編)

# はじめに

Oracle Cloud 上で作成したリソースの死活監視ってどんな具合にされていますか？ Oracle Cloud 標準機能の Monitoring, OMC, Mackerel, Zabbix などなど、いろいろな選択肢があります。Monitoring は、Oracle Cloud のサービス群と統合されており、簡単にアラート設定が出来ます。名前が一般用語で紛らわしいですが、「Monitoring」という名前のサービスです。アラート設定の通知先は、メール、Slack、Pagerduty、Webhook とよく使われているものが簡単に設定できます。運用していく中で、障害を検知するのは非常に重要な機能です。運用に組み込みやすい、Monitoring 機能を紹介していきます。



今回は、OCI Load Balancer のバックエンドに設定している Web Server 群の中で、1個でも Unhealthy (通信不可) となったものを検知して、自動的に Slack に通知する手順を紹介します。



# LB 構成について

すでに次の構成が出来上がっている状態から、アラームの設定をしていきます。

- Load Balancer 1台
- Backend Webserver 2台 (Nginx) : HTTP 80 Port 



# Monitoring Service Metrics の確認

まず、Monitoring 機能でどういったメトリックが取得できるか見てみましょう。Monitoring > Service Metrics を選択します。

![1599603157925.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/256ff76e-72ac-bf23-1793-fd9c1df6e3d8.png)



oci_lbaas を選択します。

![1599603305340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/abee6fe8-4338-a5b2-03dc-f52a1e275c46.png)



表示された画面は、Tokyo Region 内の全ての Load Balancer のメトリックが表示されています。1 個の Load Balancer にフィルターをしたいので、Add を押します。

![1599603375410.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/2c4fb004-fcfd-b777-57d3-43f745acd4e3.png)



対象の Load Balancer の OCID を選択して、Done を押します。Load Balancer の名前では選択できないので、事前に OCID をメモっておく必要があります。

![1599603460864.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/3deaa572-78da-f459-6af9-61dfb28483c2.png)



これで、指定した Load Balancer のたくさんの Metrics が確認できます。どれも便利そうですが、特に便利そうなものを太字にしています。

- **Inbound Requests : リクエスト数**
- **Active Connections : コネクション数**
- Active SSL Connections
- Bytes Received
- Bytes Sent
- Accepted Connections
- Handled Connections
- **Failed SSL Handshakes : SSLハンドシェイクのエラー。証明書の有効期限切れを検知出来そう**
- Accepted SSL Handshakes
- Failed Client SSL Cert Verifications
- HTTP Responses
- HTTP 200 Responses
- HTTP 2XX Responses
- HTTP 3XX Responses
- **HTTP 4XX Responses : エラーがあまりにも多いと、何かがおかしいことが検知できそう**
- HTTP 5XX Responses
- HTTP 502 Responses
- HTTP 504 Responses
- Backend Servers
- **Unhealthy Backend Servers : Backend への通信が出来ないサーバーの数**
- Average Response Time (HTTP Only)
- Average Response Time (TCP Only)

![1599603687166.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/51cba266-8229-f6d3-e092-1f67b0bb7fe4.png)



# Slack Incoming Webhook の生成

次に、Slack へ通知するために、Incoming Webhook の URL を生成します。以下のURLを参考にどうぞ。

https://api.slack.com/incoming-webhooks

https://qiita.com/vmmhypervisor/items/18c99624a84df8b31008



自分の場合はこんな感じです。

![1599606210651.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/7326cd31-72ed-02b4-6982-ff89627b294d.png)



# Notification

Slack へ通知するために、Notification の設定をしていきます。Notification を選択します。

![1599604528407.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/c7f2c6be-67f7-bc95-5bee-de2af9b72c2c.png)



Create Topic を押します。

![1599604562923.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/e809a59a-430c-01fe-5ff5-26ad0bd0653f.png)



Name や Description を適当に入れます。

![1599604769194.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/5ae35632-c0c3-21e0-b5c8-f956dc37052a.png)



Create Subscription を押します。

![1599604812386.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/be4dfb46-2847-28e5-008f-5fca06c42ebf.png)



Protocol に Slack, URL に WebHook の URL を指定して、Create を押します。

![1599606492824.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/28bb68a8-df35-d843-c841-9a1258575889.png)



PENDING となります。

![1599606687487.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/202406d9-8dcd-61c9-6e19-5bf8fef9f4d1.png)



Pending になったと同時に、Notification から確認メッセージが Slack に到着します。URL をクリックして確認してね、という内容です。

![1599606761685.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/72390afa-d2e6-32d8-2e11-58c9d6dbd377.png)



URL をクリックして、 Confirmed にします。

![1599606809957.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/b52e192e-227b-1c85-49a9-7e2df0ca9368.png)



# Alarm

ここまでの設定で、Slack へ通知が出来るようになりました。次に、実際のアラームの条件を作っていきます。

![1599607000897.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/90d8f143-8a3e-4069-52c4-e4e889d73929.png)



Create Alarm を押します。

![1599607044778.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/bfd87a84-a394-2366-32c7-5ee706227219.png)



各種パラメータを入れて、Save alarm を押します。

一番気にしたほうがいいのが、Alarm Body です。Slack へ通知されるメッセージの本文となるので、わかりやすい説明を入れましょう。自分の場合は、該当の Load Balancer の詳細画面 URL を埋め込んでいます。Slack から直接リンククリックで飛べるので、便利に使えます。

Sample です。URL の前後に半角空白を入れると、Slack の画面上でクリックがしやすいので、おすすめです。

```
ロードバランサー : test01  のバックエンドに、何かしらのエラー発生しています。こちらのリンクをご確認ください 
 https://console.us-ashburn-1.oraclecloud.com/load-balancer/load-balancers/ocid1.loadbalancer.oc1.ap-tokyo-1.aaaaaaaad2omcimsaanugevw2fesgcyxmvxtb2hj4g5zxmu62nzguazeudbq/metrics 
```

![1599608363678.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/74700146-697e-4261-dc4f-f282229872bc.png)



# アラームテスト

設定完了です。これで実際にアラームを起こすために、Backend Server の Nginx 停止してみます。
停止してから数分待つと、Slack に自動的にこのようなメッセージが通知されます。Notification からのメッセージとなるので、いろいろなメタデータを含めたメッセージになっています。

もし、更に見やすい形で整形したいときは、Oracle Functions という名前のサーバレスサービスを使って、コーディングしていくと出来ます。今回は取り上げませんので、もし興味があれば検索してみてください。

![1599609554698.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/02952ee6-4965-9a7e-e7e5-d2f78b5cdbc4.png)



Slack 上の URLをクリックすることで、詳細画面を開きます。これで、検知から確認までの動線が楽になります。

![1599610043405.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104247/fb2b4630-186e-dac3-9284-72b80f509386.png)