ZabbixでOCI Dbaas監視 - エージェント設定

Oracle Cloud InfrastructureのDbaasをZabbixで監視する手順です。
Dbaasの監視となるとOCIのMonitoring機能では不十分なため(というかDbaasのメトリクスがない？)、
他の監視ツールを使う必要があります。
使用するZabbixテンプレートはzabbix3系、4系でも実行可能なことを検証済みです。
ASMの使用率などDbaas特有の監視アイテムも含まれています。

## 前提
- OCIのDB SystemsよりOracleDB StandardEditionをプロビジョニング。  
- プロビジョニングされたノードは「hoge01」とする。  
- ノードでzabbix-agentのインストール・設定が完了していること。  
- 監視対象のPDB名は「PDB1」とする。  
- Zabbixテンプレートやスクリプトが入っているフォルダを端末に用意。  
⇒GITにアップロードしてあります。  
https://github.com/y-araki-git/zabbix-oci-dbaas  
⇒自作したテンプレートなのでZabbix Shareにもアップロードしています。  
https://share.zabbix.com/databases/oracle/zabbix-oci-dbaas

## OracleDB監視 エージェント設定
   
ノード「hoge01」にログインしてからの作業です。

### DB接続
```
$ su - root
# su - oracle
$ sqlplus / as sysdba
SQL> show pdbs;

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 PDB1                           READ WRITE NO

SQL> alter session set container=PDB1;
```

### 監視用ユーザ作成
パスワードは例。以下SQLを流す。

```
CREATE USER monitor IDENTIFIED BY "$_1A2b3C4d5" DEFAULT TABLESPACE SYSTEM TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK;
GRANT CONNECT TO monitor;
GRANT RESOURCE TO monitor;
ALTER USER monitor DEFAULT ROLE ALL;
GRANT SELECT ANY TABLE TO monitor;
GRANT CREATE SESSION TO monitor;
GRANT SELECT ANY DICTIONARY TO monitor;
GRANT UNLIMITED TABLESPACE TO monitor;
GRANT SELECT ANY DICTIONARY TO monitor;
GRANT SELECT ON V_$SESSION TO monitor;
GRANT SELECT ON V_$SYSTEM_EVENT TO monitor;
GRANT SELECT ON V_$EVENT_NAME TO monitor;
GRANT SELECT ON V_$RECOVERY_FILE_DEST TO monitor;
```

### ZABBIX用プロファイルを作成しパスワード有効期限を無期限にする
```
SQL> create profile ZABBIX limit PASSWORD_LIFE_TIME unlimited;
SQL> alter user monitor profile ZABBIX;
SQL> alter profile ZABBIX limit PASSWORD_LIFE_TIME unlimited;
SQL> select * from dba_profiles where profile='ZABBIX' and resource_name='PASSWORD_LIFE_TIME';
```

### リスナー確認
PDB名の記載がある行を控える。

```
# lsnrctl status LISTENER

例) Service "pdb1.xxxxxxsubnet01.xxxxxxvcn.oraclevcn.com" has 1 instance(s).
```

### tnsname編集
最下部に追記 (先頭にPDB名、HOSTにノード名、SERVICE_NAMEにリスナー確認で表示されたものを記載。

```
$ vi /u01/app/oracle/product/バージョン/dbhome_1/network/admin/tnsnames.ora

PDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = hoge01)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb1.xxxxxxsubnet01.xxxxxxvcn.oraclevcn.com)
    )
  )
```

### 接続確認
※パスワードに特殊記号がある場合 \ でエスケープしないとエラーになる。

```
sqlplus monitor/\$_1A2b3C4d5@PDB1
```

### zabbix-oci-dbaas-masterをhoge01に転送
転送先:/root/zabbix-oci-dbaas-master

### デプロイスクリプト実行
```
$ logout (rootになる)
# cd ~
# chmod +x zabbix-oci-dbaas-master/deploy_zabbix-oci-dbaas.sh
# ./zabbix-oci-dbaas-master/deploy_zabbix-oci-dbaas.sh "monitor" "\$_1A2b3C4d5"
    ↑スクリプトパス "監視用ユーザ名" "監視用ユーザパスワード"

※以下ファイルが設置される
/etc/zabbix/zabbix_agentd.d/zabbix-oci-dbaas.conf → Zabbixの設定ファイルがこのファイルを読み込む
/etc/zabbix/scripts/agentd/zabbix-oci-dbaas/zabbix-oci-dbaas.sh → OracleDB監視アイテム取得のスクリプト
/etc/zabbix/scripts/agentd/zabbix-oci-dbaas/zabbix-oci-dbaas.conf → OracleDB監視用ユーザの情報
/etc/zabbix/scripts/agentd/zabbix-oci-dbaas/sql/*.sql → OracleDB監視用SQL
```

### スクリプト権限付与
```
# chmod +x /etc/zabbix/scripts/agentd/zabbix-oci-dbaas/zabbix-oci-dbaas.sh
```

### 環境設定ファイル作成
pathのversionは各環境に合わせる。ORACLE_SIDにPDB名を記載

```
# vi /etc/zabbix/scripts/agentd/zabbix-oci-dbaas/zabbix-oci-dbaas.oraenv

ORACLE_HOME=/u01/app/oracle/product/バージョン/dbhome_1; export ORACLE_HOME
ORACLE_BASE=/u01/app/oracle/product/; export ORACLE_BASE
PATH=$PATH:/u01/app/oracle/product/バージョン/dbhome_1/bin; export PATH
LD_LIBRARY_PATH=/u01/app/oracle/product/バージョン/dbhome_1/lib; export LD_LIBRARY_PATH
NLS_LANG=AMERICAN_AMERICA.UTF8; export NLS_LANG
ORACLE_TERM=xterm; export ORACLE_TERM
ORACLE_UNQNAME=ORCL_iad1js;export ORACLE_UNQNAME
ORACLE_SID=PDB1; export ORACLE_SID
```

### Zabbix-agent設定変更
```
sed -i -e "s/# AllowRoot=0/AllowRoot=1/g" /etc/zabbix/zabbix_agentd.conf
sed -i -e "s/# UnsafeUserParameters=/UnsafeUserParameters=1/g" /etc/zabbix/zabbix_agentd.conf
sed -i -e "s/# EnableRemoteCommands=0/EnableRemoteCommands=1/g" /etc/zabbix/zabbix_agentd.conf
※リモートコマンドの設定や、特殊記号を含めたパラメータの受け渡し許可など
```
### Zabbix-agent再起動
```
/etc/init.d/zabbix-agent restart
```

### zabbixコンソールにログイン
設定 > テンプレート > インポートより、zabbix-oci-dbaasフォルダ内にあるtemplate_oci_dbaas.xmlをインポート。
作成されたTemplate_OCI_Dbaasを監視対象に割り当てる。

これで監視が取得できていればOKです。
↓自分でSQLを作成し監視項目を取得する手順も記事にしています。
[ZabbixでOCI Dbaas監視 - SQLで監視項目の取得](https://qiita.com/y-araki-qiita/items/0ec80adbb022458cab20)

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