OCI LB の UnHealthyBackendServersメトリック を Metrics Explorer の MQL(Monitoring Query Language) で加工/表示してみる(Oracle Cloud Infrastructure)

OCI LB の監視を検討する機会が有り、その過程で検証した Metrics Explorer の MQL によるメトリック加工/表示についてメモしておきますやで。
彡(ﾟ)(ﾟ)

# 1. 環境

下記記事の環境(OCI LB + Compute *2)で検証してみます。検証用に LB は二つ作成しています。

https://qiita.com/ora_gonsuke777/items/5015b5f68ab8a1cfb7ef

# 2. MQL(Monitoring Query Language) と OCI Load Balancerのメトリック について

MQL は OCI Monitoring で収集したメトリック値を加工して表示するための独自言語となります。下記マニュアルを参照して下さい。

> Monitoring Query Language(MQL)リファレンス
> https://docs.oracle.com/ja-jp/iaas/Content/Monitoring/Reference/mql.htm

OCI Load Balancer のメトリックについては下記マニュアルを参照して下さい。

> Load Balancerメトリック
> https://docs.oracle.com/ja-jp/iaas/Content/Balance/Reference/loadbalancermetrics.htm

# 3. Metric Explorer(Advanced) への遷移

UnHealthyBackendServersメトリック を参照するための MQL を実行する Metrics Explorer に遷移します。

左上のハンバーガーメニュー → Observability&Management → Monitoring → Metrics Explorer → Edit queriesボタン → Advanced mode をチェックします。

![OCI_LB_Metric000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/3473f028-8520-5a7f-6a63-0aea6cbfd795.png)

![OCI_LB_Metric002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/688a9a67-fec3-83c3-dfb8-d20003fafcab.png)

# 4. 加工前のUnHealthyBackendServersメトリック生データ

Metric namespace は oci_lbaas を選択しておきます。
Query Code Editor に以下の MQL を貼り付けて Update Chartボタン をクリックします。

```
UnHealthyBackendServers[1m].last()
```

結果は以下のようなチャートになります。検証のためにバックエンドのサーバーを落としてエラーを意図的に発生させています。
少し解り難いのですが二つのLBに一つずつのバックエンドセットが有り、1バックエンドセットにつき3つのライン(ストリーム)が表示されます。

![OCI_LB_Metric003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/41c3aafc-3ad0-975c-8c52-061e0efa2e20.png)

複数ライン(複数ストリーム)が表示されるのは、OCI LB(LBHOSTID) が内部で冗長化されていて、冗長化されたホスト毎に本メトリック(UnHealthyBackendServers)がカウントされているためです。

# 5. 2分間連続してエラー(UnHealthy)を検知した OCI LB(LBHOSTID) を表示する。

2分間連続してエラー(UnHealthy)を検知した OCI LB(LBHOSTID) を表示します。
Query Code Editor に以下の MQL を貼り付けて Update Chartボタン をクリックします。

```
UnHealthyBackendServers[2m].mean() >= 1
```

結果は以下の通りとなります。複数ライン(複数ストリーム)が表示されるのは前述の理由(冗長化)となります。

![OCI_LB_Metric004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/e13a8b40-c260-6251-2311-974b2dd21dfd.png)

# 6. 2分間連続してエラー(UnHealthy)を検知した OCI LB(LBHOSTID) をバックエンドセットでグルーピングして表示する。

2分間連続してエラー(UnHealthy)を検知した OCI LB(LBHOSTID) をバックエンドセットでグルーピングして表示します。
Query Code Editor に以下の MQL を貼り付けて Update Chartボタン をクリックします。

```
(UnHealthyBackendServers[2m].mean() >= 1).groupBy(backendSetName).mean()
```

結果は以下の通りです。見た目は変わらないのですが複数ストリームがバックエンドセットでグルーピングされています。

![OCI_LB_Metric005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/2629a9b1-4f12-0229-5b85-0c8a63db3d92.png)

# 7. 全てのバックエンドサーバーがエラー(UnHealthy)になった OCI LB(LBHOSTID) を表示する。

全てのバックエンドサーバーがエラー(UnHealthy)になった OCI LB(LBHOSTID) を表示します。
UnHealthyBackendServersメトリックをBackendServersメトリックで除算して 1(両値が等しい) となった状態を表示します。

```
UnHealthyBackendServers[1m].last()/BackendServers[1m].last() = 1
```
結果は以下の通りです。複数ライン(複数ストリーム)が表示されるのは前述の理由(冗長化)となります。

![OCI_LB_Metric006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/110066/5a59937a-9be8-cb0f-da53-0739d18db5e5.png)

# 8. まとめ
OCI LB の UnHealthyBackendServersメトリック を加工して表示できました。
MQLは難しくはないものの独特な書き方にはなるので、ぜひ実機検証して下さいね。
彡(^)(^)

# 9. 参考
下記の OCI技術資料 が更新されています。こちらも是非ご覧くださいませ。

> OCI技術資料 : ロード・バランサー 詳細 / Load Balancer 200
> https://speakerdeck.com/ocise/ociji-shu-zi-liao-rodobaransa-xiang-xi
> メトリックを使ったロード・バランサーの監視設定サンプル
> https://speakerdeck.com/ocise/ociji-shu-zi-liao-rodobaransa-xiang-xi?slide=53