OCIカスタム・メトリックでディスク使用率を監視

本ブログは、[オラクル・クラウドの個人ブログ](https://qiita.com/letian/items/10152a4fec813c1b7d98)の1つです。

# 初めに
OCI Monitoringサービスを使用すると、メトリックおよびアラーム機能を使用してクラウド・リソースを監視できます。例えば、OCI上のComputeインスタンス、データベース、および他のリソースのステータスを監視できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/de7bfd8f-8eb9-1b87-60a8-c03c3b243bc0.png)

OCI/On-P上のサーバーのディスク使用率（パーセンテージ）を監視したい時があります。この場合、既存のメトリックが存在しないので、カスタム・メトリック機能を使用すればOKです。

それを実現するためには、ディスク使用率を収集し、OCIに送信するスクリプトを用意する必要があります。スクリプト実施後、OCIコンソールから他のメトリックと同じようにディスク使用率を監視できます。

このブログでは、カスタム・メトリック機能を使用してディスク使用率の監視方法について簡単に紹介します。 <font color="blue">サンプルのPythonスクリプトが含まれています。</font> もちろん、他の言語でもOKです。

※、OCI-CLIを利用しメトリック・データをOCIへポストできますが、ディスク使用率の取得は<strong>CLIの範囲外</strong>で、別の方法で取得してください。

__環境__
クライアント OS: Windows 10 (On-P)
利用言語：Python 3.9.6

__ステップ__

- [1. 事前準備](#1-事前準備)
  - [1-1. APIキーの追加](#1-1-apiキーの追加)
  - [1-2. OCI構成ファイルの作成](#1-2-oci構成ファイルの作成)
  - [1-3. Pythonスクリプトの準備](#1-3-pythonスクリプトの準備)
- [2. カスタム・メトリックの公開](#2-カスタムメトリックの公開)
  - [2-1. Pythonスクリプトの実行](#2-1-pythonスクリプトの実行)
  - [2-2. OCIでディスク使用率の監視](#2-2-ociでディスク使用率の監視)

# 1. 事前準備
## 1-1. APIキーの追加
OCIコンソールにログインし、APIキーを追加します (追加済の場合、このステップを飛ばします)。

MENU -> Identity & Security -> Identity -> Users -> User Details -> API Keys -> Add API Key
秘密鍵と公開鍵のファイルを安全な場所に保存します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/37845d4d-04b9-eafa-6320-79387904909a.png", width="650">
「追加」ボタンをクリックした後、「構成ファイルのプレビュー」画面が以下のように表示されます。

## 1-2. OCI構成ファイルの作成
クライアントからOCIに接続する時、認証は必要で、認証用の情報を構成ファイルとして作成します。
「コピー」をクリックして、テキストを構成ファイルに保存します。
<strong>ファイル名と保存場所</strong>
Windowsの場合：`C:\Users\<your_user_name>\.oci\config`
Linuxの場合：`/home/<your_user_name>/.oci/config`

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/866ffe0b-cfad-69d0-549a-b0b09cf64bcc.png">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/af4f9d42-82e8-1a60-3e8c-e0d2a6e7b07f.png">

## 1-3. Pythonスクリプトの準備
まだPythonがインストールされない場合は、[こちら]((https://www.python.org/downloads/))から最新バージョンをダウンロードし、インストールしてください。

以下のサンプル・スクリプトを提供します。
目的：ディスク使用率を取得し、カスタム・メトリックとして公開します。
<font color="blue">"compartment_ocid"</font> 文字列をコンパートメントのOCIDに置き換えます。
<font color="blue">"service_endpoint"</font> 文字列をエンドポイントに置き換えます。
モニタリングAPIエンドポイントについては、[これ](https://docs.oracle.com/en-us/iaas/api/#/en/monitoring/20180401/)を確認してください。

```python
# This is a sample python script that post a custom metric(disk_usage) to oci monitoring.
# Run this script on the client that you want to monitor. 
# Command: python post_disk_usage.py

import oci,psutil,datetime
from pytz import timezone

# using default configuration file (~/.oci/config)
from oci.config import from_file
config = from_file()

# initialize service client with default config file
monitoring_client = oci.monitoring.MonitoringClient(config,service_endpoint="https://telemetry-ingestion.ap-tokyo-1.oraclecloud.com")

# get disk usage with psutil
disk = psutil.disk_usage('/')
disk_usage=disk.percent
print(disk_usage)

times_stamp = datetime.datetime.now(timezone('UTC'))

# post custom metric to oci monitoring
# replace "compartment_ocid“ string with your compartmet ocid
post_metric_data_response = monitoring_client.post_metric_data(
    post_metric_data_details=oci.monitoring.models.PostMetricDataDetails(
        metric_data=[
            oci.monitoring.models.MetricDataDetails(
                namespace="custom_metrics",
                compartment_id="your_compartment_ocid",
                name="disk_usage",
                dimensions={'server_id': 'srv01'},
                datapoints=[
                    oci.monitoring.models.Datapoint(
                        timestamp=datetime.datetime.strftime(
                            times_stamp,"%Y-%m-%dT%H:%M:%S.%fZ"),
                        value=disk_usage)]
                )]
    )
)

# Get the data from response
print(post_metric_data_response.data)
```

サンプル・スクリプトを実行する前に、ociとpsutilをインストールしてください。
<strong>コマンド</strong>:
<font color="blue">pip install -U oci</font>
<font color="blue">pip install -U psutil</font>

# 2. カスタム・メトリックの公開
## 2-1. Pythonスクリプトの実行
<strong>コマンド</strong>: <font color="blue">python post_disk_usage.py</font>
<strong>出力結果</strong>:
<font color="blue">ディスク使用率</font> - パーセント
<font color="blue">レスポンス・データ</font> - JSONフォーマット 

```python
c:\Python>python post_disk_usage.py
34.6
{
  "failed_metrics": [],
  "failed_metrics_count": 0
}
```

実行はスケジューリング・タスクとして設定できますが、ここでは省略します。
（例えば、Linix OSの場合、crontabを利用する。Windows OSの場合、Task Schedulerを利用する。）
テストのために、1回/分間で実行します。

## 2-2. OCIでディスク使用率の監視
MENU -> Observability & Management -> Monitoring -> Metrics Explorer
"<font color="blue">問い合わせの編集</font>(Edit Queries)"ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/0d06656c-c42c-8690-58a9-26f61ae05c43.png)

"Metric namespace"、"Metric name"、"Dimension name"と"Dimension value"を指定し、"<font color="blue">チャートの更新</font>(Update Chart)"ボタンをクリックします。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/ae9d05d4-2db5-9bb7-97a0-24163c3fc99d.png)

<font color="blue">グラフ</font>の形式でデータを表示:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/dce9d11a-e670-2b1c-1330-e215ca3b11a9.png)

<font color="blue">テーブル</font>の形式でデータを表示:
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/c2e269b3-edfe-d0aa-5196-db0bacc4084f.png)

__まとめ__
これは、一般的な考え方を示す例です。要は、OCIカスタム・メトリックを利用すれば、ディスク使用率だけではなく、他のリソース・データの監視も可能です。

以上です。

----
__関連記事__
[オラクル・クラウドの個人ブログ一覧](https://qiita.com/liu-wei/items/10152a4fec813c1b7d98)
[OCI モニタリングでComputeインスタンスの死活を監視](https://qiita.com/letian/items/0dd6b05ced9fb7d6cc36)

__公式ドキュメント__
[Publishing Custom Metrics](https://docs.oracle.com/ja-jp/iaas/Content/Monitoring/Tasks/publishingcustommetrics.htm)
[SDK and CLI Configuration File](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/sdkconfig.htm#SDK_and_CLI_Configuration_File)