GrafanaでZabbixとOCI Monitoringのメトリクスを一元化

複数のパブリッククラウドのメトリクスや、他の監視ツール(ZabbixやPrometheusなど)の
監視アイテムをGrafanaで一元化して閲覧できるようにと思いやってみました。

[Grafnaダッシュボードのコミュニティ](https://grafana.com/dashboards)では多くのダッシュボードがシェアされていますが、OCI Monitoring用のものがなかったため自作してシェアしています。
OCI Monitoringの画面と全く同じ配置でグラフを作成しました。

ダッシュボード作成方法については[こちら](https://qiita.com/y-araki-qiita/items/e6b4d10e9c49627c0f97)で紹介しています。
<img width="455" alt="das.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/621cbb51-3f00-c5c5-1f9b-683bde4ffdcf.png">

  - 前提  
Grafana環境はOCIにてOracleLinux7で構築  
Grafanaコンソール閲覧用に3000ポートを開放  
GrafanaサーバとZabbixサーバを互いに80番で通信できるよう設定  
Grafanaサーバのselinux無効化、firewalld無効化  

# GrafanaとOCI Metrics連携

  - 参考
[Oracle Cloud Infrastructure as a Data Source for Grafana](https://blogs.oracle.com/cloudnative/data-source-grafana)

※サーバ内rootで作業
### Grafanaインストール
```
yum install https://dl.grafana.com/oss/release/grafana-6.0.1-1.x86_64.rpm
```

### smtpの設定
```
vi /etc/grafana/grafana.ini
※340行目辺りを以下に編集

[smtp]
enabled = true
host = localhost:25
user = grafana
# If the password contains # or ; you have to wrap it with trippel quotes. Ex
"""#password;"""
;password =
;cert_file =
;key_file =
skip_verify = false
from_address = 送信元アドレスを記載
from_name = Grafana
# EHLO identity in SMTP dialog (defaults to instance_name)
;ehlo_identity = dashboard.example.com
```

### 起動
```
systemctl enable grafana-server
systemctl start grafana-server
systemctl status grafana-server
```

### ブラウザで以下URL指定し動作確認
http://<サーバーのipアドレス>:3000

初期ログインは
username : admin 
password : admin

### 再びサーバでOCIのプラグインインストール
```
grafana-cli plugins install oci-datasource
ls -l /var/lib/grafana/plugins
service grafana-server restart
```

### OCI metricsと連携設定
Dynamic Groupのプリンシパルを使う方法で連携します。
この方法が使えるのはOCI上のインスタンスのみです。他にOCI CLIを使う方法もありますが、Dynamic Groupで設定すればCLIはインストール不要です。
Dynamic Groupはインスタンス、コンパートメントなどユーザ以外のリソースに権限を付与・管理する場合に使います。

### API発行の許可
OCI管理コンソールより
"Identity" > "Dynamic Groups" > "Create Dynamic Group"
<img width="470" alt="キャプチャ1.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/09703cd1-6349-2486-6c3c-26077b243ece.png">
NAME	任意の名前
例)test-dg
DESCRIPTION	任意の説明
例)test-dg
RULE 1	任意のルール
例）ALL {}の中に任意のコンパートメントのOCID記載。
「ALL {instance.compartment.id = 'ocid1.compartment.oc1..aaaaaaaaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxa'}」
※これでコンパートメントのみ監視項目が取得できると思いきや、下の設定により全コンパートメントのインスタンスのメトリックが見られる。

### Dynamic Groupへ権限の付与
IAMのポリシーで、Dynamic Groupへ以下の権限を付与する。
※"tenancy"レベルの権限を付与するため、rootコンパートメントで定義する必要がある。
Allow dynamic-group <Dynamic Group名> to read metrics in tenancy
Allow dynamic-group <Dynamic Group名> to read compartments in tenancy

### Grafanaにデータソース追加
Grafanaコンソールログイン後、Add data sourceをクリック

Data sourceとしてOracle Cloud Infrastructure(左下あたり)をクリック

Data Sourceの設定
<img width="638" alt="キャプチャ2.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/c03b3fc1-07ae-3e3b-0463-1d4b042546bc.png">
※以下入力しSave
Tenancy OCID	テナンシーのOCID(※今回は検証用にfullenergy120のテナンシーOCID)
Default Region	任意のリージョン（ホームリージョンである必要はない　us-ashburn-1）
Environment	OCI Instance

### Grafana Dashbordのインポート

左サイドバー「+」マークのImportより。
Grafana.com Dashboardボックスにインポートしたいダッシュボードの番号を入力します。
10497 :oci_computeagent
10498 :oci_lbaas
10499 :oci_blockstore
10500 :oci_vcn

左上でregion,compartmentを変更すれば自動で環境が切り替わります。
※イメージ (oci_computeagent.json)
![InkedInkedキャプチャ9_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/85f8b125-e8a3-2f67-2bfb-b9fc96fb3979.jpeg)

※イメージ (oci_lbaas.json)
![Inkedキャプチャ10_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/769ddd2d-2b02-5685-657c-d2be28a2a088.jpeg)


# GrafanaとZabbix連携
 
### grafanaサーバにZabbixのプラグインをインストール
```
grafana-cli plugins install alexanderzobnin-zabbix-app
service grafana-server restart
```

### grafanaでZabbixデータソースの設定
zabbixコンソールでgrafana用のユーザーを作成。ユーザーにREAD権限を付与。
![Inkedキャプチャ3_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/16b6a2a2-9d42-c277-1a18-b1c7e2cb8d37.jpeg)


Grafanaコンソールより、
Home > 右側Installed Appsにzabbixが表示されるのでクリック

Enableをクリック

Home > Create data source typeで右下zabbixをクリック

Data Sourceの設定
<img width="404" alt="キャプチャ4.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/e1a493e1-9bb3-0cae-d617-9b971eff5815.png">

※以下入力しSave
URL http://ZabbixサーバのIP/zabbix/api_jsonrpc.php
Username Zabbixで作成したgrafana用ユーザのユーザ名
Password Zabbixで作成したgrafana用ユーザのユーザパスワード
※ここでは検証用にAdminユーザを設定していますがGrafana用にユーザ作成したほうがよいです。

### grafanaダッシュボードインポート
左サイドバー「+」マークのImportより、Grafana.com Dashboardボックスに 10560 と入力します。
Zabbixのダッシュボードはたくさんアップロードされていると思いますが、簡単に作成してみました。
余談ですがHinemosとGrafana連携の情報が全くないですが、
NTTデータの技術さんに聞いたところ連携はできるけど会社として公開してないらしいです。
でもそれについての情報自体アップロードしていいとのことで、タイミングあればやってみます。

※イメージ (一番上にアラート情報、その下にサーバリソースのグラフを表示させました。配置はお好みで。)
![Inkedキャプチャ6_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/3a7471ac-8bd4-be3d-5aec-9af6b0c5bedc.jpeg)

※イメージ (ログ監視も表示できます)
![Inkedキャプチャ7_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/0d74d11d-3a77-96dd-d9a6-36a5162e519c.jpeg)

イメージ (JMX監視など手動で追加した監視項目も表示できます。もちろんWebシナリオも)
![Inkedキャプチャ8_LI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/7ac8ea87-4a2e-3677-4435-fcca6427d8d9.jpeg)


あとは左サイドバー「Dashboards」のManageでフォルダを作ってダッシュボードを整理します。
<img width="558" alt="キャプチャ5.PNG" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/131627/07f45466-ea9e-8c71-03f8-f97ad00698b5.png">

新しいzabbix環境を追加したければ、同じようにZabbixデータソースを追加し上のダッシュボードをインポートするだけです。ホストグループやホスト名を切り替えれば自動で反映されます。

GrafanaとCloudwatchの連携もとても簡単ですし、アラート設定、通知設定もZabbixより簡単なのでGrafanaおすすめです。

## 関連記事
[・GrafanaでOCI Monitoring メトリクスのダッシュボード作成手順](https://qiita.com/y-araki-qiita/items/e6b4d10e9c49627c0f97)
[・ZabbixでOCI Dbaas監視 - エージェント設定](https://qiita.com/y-araki-qiita/items/f25e02182c7f279c0199)
[・ZabbixでOCI Dbaas監視 - SQLで監視項目の取得](https://qiita.com/y-araki-qiita/items/0ec80adbb022458cab20)