OCIのCompute InstanceをPrometheus Node Exporterのメトリックで監視

## OCIのCompute Instanceからメトリックが取りたい！！！

テーマにも書きましたが、クラウド上で提供されているメトリック収集機能だけでは
「APの監視や、OSレベルの詳細な情報」が出来なくて困ったので備忘メモとして公開したいと思いますーー。

### ■この検証に必要なもの
- OCIコンソールユーザ(以下のリストをいじれる権限は必要です)
- VCN, Subnet(外部と通信できるようにセキュリティリストの穴あけを忘れずに！)
- Compute Instance(VMで今回はやりました)


### ■■ゴールまでに実施すること
1. VCN, VMの用意(ここは省略)
2. VMのOracle Cloudエージェント設定
3. ポリシー設定
4. Prometeus Node Exporterインストール
5. カスタムメトリック設定
6. カスタムメトリックの利用先紹介

### ■■■やってみる
#### 1. VCN, VMの用意
省略します。。

#### 2. VMのOracle Cloudエージェント設定
OCIコンソールから1. の手順で作成したVMの詳細画面に進み、
Oracle Cloudエージェントの設定を確認すると下図のようになっています。
![vm_detail1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3749791/cfe851ec-bebd-2707-a6be-d85bf48be0ac.png)

「管理エージェント」に着目すると無効になっています。
これを有効にしましょう！
![VM_detail2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3749791/27071ef3-53ca-d63f-791e-4a895fbb3604.png)
有効になるには時間がかかりますが、完了すると実行中というステータスに変化します。

#### 3. ポリシー設定
ここでは、作成したVMのメトリックを収集するため必要な設定を実行します。

- ポリシー名：任意の名称
- 説明：VMのメトリック収集等自由に記載(任意)
- ポリシー
```
Allow any-user to use metrics in compartment id <VM構築したコンパートメントのOCID> where all {instance.compartment.id='<VM構築したコンパートメントのOCID>'}
```

#### 4. Prometeus Node Exporterインストール
作成したVMにopcユーザでログイン

ログイン後、GitHubからのPrometheus Node ExporterのDownloadを実行します。
```
wget -P /tmp https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
```

ダウンロードしたものを解凍します
```
sudo mkdir -p /etc/prometheus/nodeExporter
sudo chmod 755 /etc/prometheus
sudo chmod 755 /etc/prometheus/nodeExporter
sudo tar xvfz /tmp/node_exporter-1.6.1.linux-amd64.tar.gz -C /etc/prometheus/nodeExporter --strip-components 1
```

Node Exporterの動作テストをします
```
cd /etc/prometheus/nodeExporter/node_exporter
curl http://localhost:9100/metrics
```
ここでメトリックがたくさん表示されたらOKです！
（メトリックの実例はいつか持ってきます。取得忘れました。。）

Node Exporterをサービス化します
```
sudo vi /etc/systemd/system/node_exporter.service

---記述例
[Unit]
Description=Node Exporter

[Service]
User=opc
ExecStart=/etc/prometheus/nodeExporter/node_exporter-1.6.1.linux-amd64/node_exporter

[Install]
WantedBy=multi-user.target
-----

sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
sudo systemctl status node_exporter
```
statusがActiveになっていたらOKです

#### 5. カスタムメトリック設定
まずSELinuxをpermissiveにする
※変更後、再起動が必要です。

次にメトリックを飛ばす設定をします
```
vi /opt/oracle/mgmt_agent/agent_inst/discovery/PrometheusEmitter/<任意の名称>.properties

---記載例
url=http://<ip_address>:9100/metrics
nodeName=<vm_name>
namespace=<OCIコンソール上での表示名>
metricDimensions=nodeName
allowMetrics=*
compartmentId=<コンパートメントOCID>
```
今回はnamespace=test_metricにしました。

設定が完了すると、
OCIコンソール>メトリックエクスプローラ画面にて対象のメトリックを確認することが可能になります。
![monitoring_metric1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3749791/be460955-d49f-d3ca-6b10-a921996dea8b.png)


この設定の[参考資料](https://docs.oracle.com/ja-jp/iaas/management-agents/doc/configure-management-agent-collect-metrics-using-prometheus-node-exporter.html)

こちらで主な作業は終了です。


#### 6. カスタムメトリックの利用先紹介
- カスタムメトリックで収集できる情報について
カスタムメトリックを用いることでHelidonなどのMicroProfile準拠フレームワークを用いたアプリからのメトリック収集も可能になります。
これによりOSだけでなくAPの監視を実行することが可能です。

 - 収集したメトリックの活用
1. 収集したメトリックはダッシュボードに表示し確認する。 
2. アラートを設定し、閾値を超えた場合にメール・slack等に通知を実施する。
などの活用法があります。

監視にお悩みの方に参考になればと思います。

おしまい