第4回:Oracle Autonomous Data Warehouse Cloudのリソース監視 ~サードパーティツール(Zabbix)によるCloud環境のリソース監視編~

はじめてのOracle Autonomous Data Warehouse Cloud
はじめに
皆様、こんにちは。データソリューション部の山本です。
Oracle Autonomous Data Warehouse Cloud(以下、ADW Cloud)のテーマとして第4回目となります。4月初旬に参加したセミナーでOracle Cloud Infrastructureに対してJP1の動作検証をしている話がありました。ADW Cloudに対しては検討中との話でしたが、サードパーティツール(Zabbix)によるADW Cloudのリソース監視を検証してみました。
本記事では、Oracle社のマニュアルやサポート、コミュニティサイトなどのWeb情報、私自身の経験などを元に検証しました。クラウド全般的に言える内容ではありますが、クラウド環境は日々改善や機器増強され、性能面の強化などが頻繁に発生しています。その為、本記事の検証結果は同様に実施した検証と異なる可能性がございますが、ご容赦の程宜しくお願いします。
本内容は2018年12月~2019年4月に検証した内容となります。
前提内容
- 外部の監視ツールとしてZabbix v4.2を使用しました。
- ADW Cloudは、データベースサービスの為、監視ノード(本記事では監視サーバ)からリモートで情報を収集しました。
- Zabbix Serverを社内環境に構築して、社内ネットワークからADW Cloudにアクセスして情報を収集しました。
検証環境概要
環境区分 | 環境情報 | 補足内容 |
---|---|---|
監視サーバ | Red Hat Enterprize Linux 7.3 | Zabbix Serverの前提OSを考慮 |
Oracle Client 12cR2 | ADW Cloudの前提を考慮 | |
Zabbix Server 4.2 | データ格納用でMySQL 8.0.13を使用 | |
Zabbix Agent 4.2 | ||
監視対象 | ADW Cloud 18.0.3.3 |
リソース監視検証
それでは、サードパーティツール(Zabbix)によるリソース監視検証内容となります。
- そもそもなぜ監視が必要なのか?
⇒「夜間バッチ時のリソースは不足しているか」など使用状況を把握し、
リソース増強が必要なのか詳細な情報を元に判断する為などが考えられます。 - Oracle社の提供ツールを使えば良いのでは?
⇒ ADW Cloudでは、リソース情報を簡易的に表示することは可能ですが、幾つか制限があります。
例えば、CPUの使用状況は直近1時間のリソースに対する詳細内容を表示することは可能です。
直近1時間より前のデータは纏まった情報としてデフォルトで8日間保持されます。
夜間などの詳細情報を確認するには定期的に情報を収集しないと確認できない可能性があります。
現時点でOracle社からは監視ツールは準備中との回答を頂きました。
リソースを監視する為には、以下のステップで環境を準備する必要があります。
設定時に手間取った内容を含めて話をしたいと思います。
- ステップ1 : 監視ノードにOracle Clientのインストール
- ステップ2 : 監視ノードでOracle Clientから接続設定
- ステップ3 : Zabbix Server および Zabbix Agentのインストール
- ステップ4 : Zabbix Server および Zabbix Agentの初期設定
- ステップ5 : リソース監視設定
ステップ1 : 監視ノードにOracle Clientのインストール
本記事では、Oracle Clientのインストールについて詳細は割愛します。
インストールはOracle社が公開している以下のマニュアルなどを参照してください。
ステップ2 : 監視ノードでOracle Clientから接続設定
本ステップで実施することは2つです。
1. Oracle Cloud のウォレットファイルを準備
「第1回:基本セットアップ編」にウォレットファイルのダウンロード方法を記載していますので、参考にしてください。
→はじめてのOracle Autonomous Data Warehouse Cloud「第1回:基本セットアップ編」
2. SQLPLUSからのアクセス設定
「1」でダウンロードしたウォレットファイルを解凍すると以下のファイルが展開されます。
展開されるファイル一覧
- cwallet.sso
- ewallet.p12
- keystore.jks
- ojdbc.properties
- sqlnet.ora
- tnsnames.ora
- truststore.jks
「sqlnet.ora」ファイルにウォレット関連のファイルを格納するディレクトリパスを修正します。
検証した環境では以下の通り修正しています。
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
SSL_SERVER_DN_MATCH=yes
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin/adwc_credentials")))
SSL_SERVER_DN_MATCH=yes
「sqlnet.ora」と「tnsnames.ora」ファイルを以下の場所にアップロードする。
※検証した環境ではORACLE_HOMEの設定は、「/u01/app/oracle/product/12.2.0/dbhome_1」です。
# pwd
/u01/app/oracle/product/12.2.0/dbhome_1/network/admin
#
# ls -l
drwxr-xr-x 2 oracle oinstall 110 12月 25 09:59 adwc_credentials
-rw-r--r-- 1 oracle oinstall 334 11月 30 13:41 listener.ora
drwxr-xr-x 2 oracle oinstall 64 11月 30 13:37 samples
-rw-r--r-- 1 oracle oinstall 1441 8月 28 2015 shrept.lst
-rw-r--r-- 1 oracle oinstall 132 12月 25 09:58 sqlnet.ora
-rw-r----- 1 oracle oinstall 968 12月 25 09:56 tnsnames.ora
#
「sqlnet.ora」と「tnsnames.ora」以外のファイルは以下のディレクトリを作成してファイルをアップロードする。
# pwd /u01/app/oracle/product/12.2.0/dbhome_1/network/admin/adwc_credentials # # ls -l -rw-r--r-- 1 oracle oinstall 6661 11月 5 01:58 cwallet.sso -rw-r--r-- 1 oracle oinstall 6616 11月 5 01:58 ewallet.p12 -rw-r--r-- 1 oracle oinstall 3242 11月 5 01:58 keystore.jks -rw-r--r-- 1 oracle oinstall 87 11月 5 01:58 ojdbc.properties -rw-r--r-- 1 oracle oinstall 3336 11月 5 01:58 truststore.jks #
ファイルの配置場所は、インストール時に作成されるファイルかウォレット関連のファイルを分かり易くする為、別の場所にファイルをアップロードしました。
ファイルの所有者(インストールユーザ)や権限は上記の設定例を参考に設定して下さい。
「sqlplus」でADW Cloudに接続できるか確認する。
$ sqlplus admin/XXXX@YYYY_low SQL*Plus: Release 12.2.0.1.0 Production on 月 1月 7 08:30:07 2019 Copyright (c) 1982, 2016, Oracle. All rights reserved. 最終正常ログイン時間: 月 1月 07 2019 08:29:21 +09:00 Oracle Database 18c Enterprise Edition Release 12.2.0.1.0 - 64bit Production に接続されました。 SQL>
※上記の「XXXX」と「YYYY」は以下の設定内容です。
XXXX : 「admin」ユーザのパスワード
YYYY : tnsnames.oraに記載されている接続名
ステップ3 : Zabbix Server および Zabbix Agentのインストール
本記事では、Zabbix Server およびZabbix Agentのインストールについて詳細は割愛します。「zabbix4 インストール RHEL7 MySQL」などの検索ワードで検索すると、RHELではなくCentOSですが参考となるサイトが検索できると思います。
ステップ4 : Zabbix Server および Zabbix Agentの初期設定
ADW Cloud はデータベースサービスとなる為、監視ノードからリモートで取得します。
Zabbixでは、以下の方法で監視ノードからリモートで情報を取得することが可能です。
- 監視ノード上の任意ディレクトリにスクリプトを配置する。
- UserParameterの設定を定義する。
- 監視ノードからスクリプトを実行する「Zabbixエージェント」のアイテムを作成して情報を取得する。
方法②
- Zabbix Server の所定ディレクトリにスクリプトを配置する。
- Zabbix Server からスクリプトを実行する「外部チェック」のアイテムを作成して情報を取得する。
本記事では、Zabbix Serverを監視ノードとして「方法①」で実施しました。
Zabbix ServerとZabbix Agentで以下の最小限の設定のみ定義しています。
1. Zabbix Server
設定項目 | 設定値 | デフォルト値 | 補足説明 |
---|---|---|---|
DBPassword | ※補足説明参照 | — | インストール時にZabbix用DBに定義したパスワード |
Timeout | 30 | 4 | 情報取得する項目のタイムアウト時間(秒) |
AllowRoot | 1 | — | 「root」として実行を許可する |
2. Zabbix Agent
設定項目 | 設定値 | デフォルト値 | 補足説明 |
---|---|---|---|
EnableRemoteCommands | 1 | — | Zabbixサーバからのリモートコマンドを許可する |
Server | ※補足説明参照 | 127.0.0.1 | Zabbix ServerのIPアドレス (デフォルト値でもOK) |
ServerActive | ※補足説明参照 | 127.0.0.1 | Zabbix ServerのIPアドレス (デフォルト値でもOK) |
Hostname | ※補足説明参照 | Zabbix server | 監視対象ホスト名を設定 (デフォルト値でもOK) |
Timeout | 30 | 3 | 情報取得する項目のタイムアウト時間(秒) |
AllowRoot | 1 | — | 「root」として実行を許可する |
オンプレ環境などからADW CloudにSQLPLUSで接続する場合、インターネット経由となる為、オンプレ環境のシステム内で接続するより時間を要する場合があります。
デフォルトの「Timeout」値では、情報を収集する前にタイムアウトとして処理され、情報を収集できないことも有り、「Timeout」設定の値を30秒に変更しました。
設定後、Zabbix Server および Zabbix Agent のサービスを再起動して設定の反映が必要です。
ステップ5 : リソース監視設定
リソース監視をするには、以下の手順が必要です。
①リソースを取得するスクリプトを準備
本記事ではCPUの使用情報を収集するスクリプトとして以下を準備しました。
項目 | 処理概要 |
---|---|
xxx.pl | ZabbixのUserParameterに登録するスクリプト。 perlスクリプト内でbashスクリプトを実行する。 |
xxx.bash | perlスクリプトから実行され、情報を収集するSQLを実行する。 |
xxx.sql | 情報を収集するSQL。 |
情報取得をbashのシェルスクリプトで作成した場合、bashは浮動小数を扱えない為、文字列として情報を収集されるので、Zabbixは数値として認識しません。
使用率のグラフ用などで浮動小数として収集したい場合、perlなど浮動小数が扱えるスクリプトから実行させる必要があります。また、perlでOracle DB(ADW Cloud)に接続するには、「DBD::Oracle」など別途インストールが必要となります。
追加のモジュール導入しない方法として上記スクリプト構成で実施しました。
【スクリプトサンプル】
#!/bin/perl use strict; use warnings; my $SQLNAME = $ARGV[0]; my $USRNAME = $ARGV[1]; my $USRPASS = $ARGV[2]; my $INSNAME = $ARGV[3]; my $ARGSQL1 = $ARGV[4]; my $EXECUSR = "oracle"; my $EXEC_SH = "ora_execsql01.bash"; my $CMDPATH = "/unyo/script"; system("su - ${EXECUSR} -c 'bash ${CMDPATH}/${EXEC_SH} ${SQLNAME} ${USRNAME} ${USRPASS} ${INSNAME} ${ARGSQL1}'"); exit 0
#!/bin/bash EXECSQL=$1 USRNAME=$2 USRPASS=$3 INSNAME=$4 ARGSQL1=$5 export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1 ${ORACLE_HOME}/bin/sqlplus -s /nolog << EOF CONN ${USRNAME}/${USRPASS}@${INSNAME} @/unyo/sql/${EXECSQL} ${ARGSQL1}; EOF exit 0
define CON_GRP = &1 SET HEAD OFF SET VERIFY OFF SET NEWPAGE NONE SET FEEDBACK OFF SELECT TO_CHAR(ROUND(AVG_CPU_UTILIZATION * 100, 2), 'FM0.00') FROM ( SELECT INTSIZE_CSEC, AVG_CPU_UTILIZATION FROM V$RSRCMGRMETRIC_HISTORY WHERE CONSUMER_GROUP_NAME = '&CON_GRP' ORDER BY 1 DESC ) WHERE ROWNUM = 1 ;
②「UserParameter」の定義
「UserParameter」は以下の設定を追加していますが、詳細内容については、Zabbixが公開しているマニュアルを参照してください。
# pwd /etc/zabbix/zabbix_agentd.d # # cat userparameter_oracle.conf UserParameter=oracle.cpurate_01[*],/zzz/xxx.pl $1 $2 $3 $4 $5 #
※「/zzz」はスクリプトを配置したディレクトリ名で、「$1 ~ $5」スクリプトを実行する際の引数です。
③監視アイテムを定義
Zabbixの設定に関して詳細は割愛しますが、以下のようなアイテムを作成しています。
設定項目 | 設定値 |
---|---|
名前 | 任意の名称 |
タイプ | Zabbixエージェント |
キー | oracle.cpurate_01[xxx.sql,{$aa},{$bb},{$cc},{$dd}] ※1 |
ホストインターフェース | <ホストのIPアドレス>:10050 |
データ型 | 数値(浮動小数) |
監視間隔 | 60s(監視する対象により検討が必要) |
※1:キー名「oracle.cuprate_01」は、UserParameterで指定した名称で、「{$aa}、{$bb}、{$cc}、{$dd}」はZabbixで任意に追加で定義した変数(マクロ)です。
perlスクリプトの接続情報や実行スクリプト名など引数で与えています。②のUserParameterで引数として定義した内容とキー名は以下の内容で関連しています。
UserParameter値 | キー値 | 補足 |
---|---|---|
$1 | xxx.sql | コールするスクリプト名 |
$2 | {$aa} | 接続ユーザ |
$3 | {$bb} | 接続ユーザのパスワード |
$4 | {$cc} | サービス名 |
$5 | {$dd} | コンシューマグループ名 |
情報を収集するスクリプトから接続する際、「low」のコンシューマグループで接続すると実行処理がシリアル実行で処理されます。情報収取処理でパラレル処理が必要な場合、処理待ち状態となり、タイムアウトで情報が取得できない場合があります。
パラレル実行は「meddium」または「high」のコンシューマグループとなるので情報収集のスクリプトは何れかのコンシューマグループで接続をお勧めします。
④監視アイテムの有効化
設定したアイテムを有効化することで、情報収集が開始されます。不備がなければ情報を収集して、ZabbixのDBに蓄積されていきます。複数の項目に対して、情報を収集したい場合は複数の監視定義が必要です。
情報が正常に収集できた場合、以下のようなCPU使用率グラフを表示することや閾値を超過した際にアラート通知させる設定も可能です。
最後に
最後になりますが、弊社は「データベースのオールマイティ企業」を謳っており、データベースに関する経験や知識、技術力を自負しています。データベース関連での課題解決等、必ずやお客様のお役に立てると信じていますので、何かございましたら弊社へご連絡下さい。
それでは、次回をお楽しみに!