公式の Zabbix ソリューションでは、Oracle データベースを監視するために zabbix-agent2 と ODBC の使用が提供されていますが、サポートされているバージョンは 12.2 以降です。分析後、zabbix-agent2 のソース コードは、組み込みのOralce 12.2.json_object の新しい関数 json_table では、SQL を使用して、12.2 より前のバージョンにはこの関数が統合されていないことを確認します。そのため、公式ソリューションではより高いバージョンのみを監視でき、orabbix を使用して 12.2 より前のバージョンを監視できます。
基本コンポーネント - Zabbix サーバーのインストール
MySQL8.0のインストール
yum ソースのインストールを使用します。公式ドキュメントを参照してください。
https://dev.mysql.com/doc/refman/8.0/en/linux-installation-yum-repo.html
このうち、8.0ではセキュリティ機構が強化されており、zabbix設定時のフロントエンド設定エラーを回避するために、設定ファイルにローカルログインを許可するパラメータを追加する必要があります。
vi /etc/my.cnf
default_authentication_plugin=mysql_native_password
#重启数据库
systemctl restart mysqld.service
Zabbixのインストール
Linux オペレーティング システムのバージョン: CentOS7 の制限により、Zabbix バージョン 5.0 のみをインストールできます。インストール手順については、公式ドキュメントを参照してください。
https://www.zabbix.com/download?zabbix=5.0&os_distribution=centos&os_version=7&db=mysql&ws=apache
以下のコマンドを実行すると
# yum install zabbix-server-mysql zabbix-agent
次のように、zabbix-agent を zabbix-agent2 に変更します。
# yum install zabbix-server-mysql zabbix-agent2
zabbix-agent2 には zabbix-agent の本来の機能だけでなく、データベース監視プラグインも統合されているためです。
また、データベース監視ユーザーを作成した後、パラメータ mysql_native_password を使用してパスワードを変更する必要があることにも注意してください。
ALTER USER 'zabbix'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Oracle のバージョン監視手順
Oracle データベースのさまざまなバージョンでは、公式の zabbix-agent2 とサードパーティの orabbix の 2 つのエージェントが使用されます。
公式の zabbix-agent2 Oralce データ取得プラグインは、12C の組み込み新関数 json_table および json_object を使用します。この関数はバージョン 12.1 から統合されたばかりで、SQL で検出されたデータを直接 json 形式にカプセル化して、 zabbix-server サーバー。
12.1 より前のバージョンにはこの機能が統合されていないため、公式の zabbix ソリューションはより高いバージョン (12.1 以降) のみを監視でき、orabbix は 12.1 より前のバージョンの監視に使用できます。
/usr/lib/systemd/system/zabbix-agent2.service を構成するもの
12.1以降
zabbix-agent2 を使用して Oracle の上位バージョンのデータベースを監視する
zabbix-agent2 を構成する
ps -ef | grep zabbix_agent2 で使用される構成ファイルを確認します。
[root@test75v234 ~]# ps -ef | grep zabbix_agent2
zabbix 2166 1 0 Oct28 ? 01:46:47 /usr/sbin/zabbix_agent2 -c /etc/zabbix/zabbix_agent2.conf
root 19423 19352 0 16:06 pts/0 00:00:00 grep --color=auto zabbix_agent2
[root@test75v234 ~]#
/etc/zabbix/zabbix_agent2.conf を変更します
sed -i 's/Server=127.0.0.1/Server=【改成zabbix server实际IP】/' /etc/zabbix/zabbix_agentd.conf
sed -i 's/ServerActive=127.0.0.1/ServerActive=【改成zabbix server实际IP】/' /etc/zabbix/zabbix_agentd.conf
sed -i 's/Hostname=Zabbix server/Hostname=【改成zabbix agent2所在的机器的hostname】/' /etc/zabbix/zabbix_agentd.conf
sed -i 's/^# Plugins.Oracle.CallTimeout.*/Plugins.Oracle.CallTimeout=10/' /etc/zabbix/zabbix_agent2.conf
sed -i 's/^# Plugins.Oracle.ConnectTimeout.*/Plugins.Oracle.ConnectTimeout=1/' /etc/zabbix/zabbix_agent2.conf
sed -i 's/^# Plugins.Oracle.KeepAlive=300.*/Plugins.Oracle.KeepAlive=300/' /etc/zabbix/zabbix_agent2.conf
パラメータ設定の表示
grep -Ev '^#|^$' /etc/zabbix/zabbix_agent2.conf
Oracle クライアントを構成する
rootユーザーで操作する
最新バージョンのクライアントをダウンロードするだけです。ドキュメントを参照してください:
https://docs.oracle.com/en/database/oracle/oracle-database/21/lacli/install-instant-client-using-zip.html# GUID-D3DCB4FB -D3CA-4C25-BE48-3A1FB5A22E84
LD_LIBRARY_PATH を構成するには、構成を構成ファイルに直接書き込む必要があります。
echo "LD_LIBRARY_PATH=/apps/oracle/instantclient:\$LD_LIBRARY_PATH" > /etc/sysconfig/zabbix-agent2
systemd 以外のシステムの場合は、
/etc/init.d/zabbix-agent2 ファイルの ### END INIT INFO 行の下に環境変数を追加します。
# export ORACLE_HOME=/apps/oracle
export LD_LIBRARY_PATH=/apps/oracle/instantclient:$LD_LIBRARY_PATH
# export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
# export TNS_ADMIN=/apps/oracle/instantclient/network/admin
zabbix-agent2を再起動します
systemctl daemon-reload
source /etc/profile
systemctl restart zabbix-agent2.service
ps -ef|grep zabbix
専用のデータベース ユーザーを作成する
alter session set container=orapdb1;--切换到PDB
CREATE USER zabbix_mon IDENTIFIED BY zabbix_mon;
GRANT CONNECT, CREATE SESSION TO zabbix_mon;
GRANT SELECT ON DBA_TABLESPACE_USAGE_METRICS TO zabbix_mon;
GRANT SELECT ON DBA_TABLESPACES TO zabbix_mon;
GRANT SELECT ON DBA_USERS TO zabbix_mon;
GRANT SELECT ON SYS.DBA_DATA_FILES TO zabbix_mon;
GRANT SELECT ON V_$ACTIVE_SESSION_HISTORY TO zabbix_mon;
GRANT SELECT ON V_$ARCHIVE_DEST TO zabbix_mon;
GRANT SELECT ON V_$ASM_DISKGROUP TO zabbix_mon;
GRANT SELECT ON V_$DATABASE TO zabbix_mon;
GRANT SELECT ON V_$DATAFILE TO zabbix_mon;
GRANT SELECT ON V_$INSTANCE TO zabbix_mon;
GRANT SELECT ON V_$LOG TO zabbix_mon;
GRANT SELECT ON V_$OSSTAT TO zabbix_mon;
GRANT SELECT ON V_$PGASTAT TO zabbix_mon;
GRANT SELECT ON V_$PROCESS TO zabbix_mon;
GRANT SELECT ON V_$RECOVERY_FILE_DEST TO zabbix_mon;
GRANT SELECT ON V_$RESTORE_POINT TO zabbix_mon;
GRANT SELECT ON V_$SESSION TO zabbix_mon;
GRANT SELECT ON V_$SGASTAT TO zabbix_mon;
GRANT SELECT ON V_$SYSMETRIC TO zabbix_mon;
GRANT SELECT ON V_$SYSTEM_PARAMETER TO zabbix_mon;
zabbix テンプレートを構成する
Zabbix5.0 には独自の Oracle 監視モジュールがすでに搭載されており、ホストを追加する場合は、Template DB Oracle by Zabbix Agent 2 テンプレートを選択します。
次に、以下の 4 つのマクロの値を設定します
次に、以下に示すように実行されます。
12.1 以下のデータベース監視
orabbix モニタリングを使用した orabbix アーキテクチャは図に示されています
[外部リンク画像の転送に失敗しました。ソース サイトにはリーチ防止メカニズムがある可能性があります。画像を保存して直接アップロードすることをお勧めします (img-Q8x2AaYD-1637231332263) ) (http://www.smartmarmot.com/wiki /images/1/1f/Orabbix_architecture.png)]
インストール手順は次を参照してください: http://www.smartmarmot.com/wiki/index.php?title=Orabbix
公式 Web サイトにある既存のバージョンは zabbix 5.0 と互換性がありません。兄貴が再開発して github に公開しました。公式の既存の jar パッケージを orabbix-1.2.4w.jar に置き換えると動作します。
https://github.com/wanghy8166/orabbix/blob/master/orabbix-1.2.4w.jar
表領域の自動検出ルールを構成する
表スペースを追加するとき、SQL の一部を orabbix の SQL クエリ テンプレートに追加するのではなく、zabbix が追加した表スペースを自動的に認識して、監視項目を zabbix に追加したり、詳細設定などを実行できるようにしたいと考えています。ただし、ここには問題があり、自動検出ルール orabbix が実装されておらず、zabbix サーバーに json データを送信するために zabbix-agent を使用して二次設定を行う必要があります。 :
- sqlplus スプールを介してテーブルスペース ファイルをエクスポートし、テキスト形式 (mornitor_tbs.sh) で保存します。
- テキストファイルをjson形式に処理するシェルを作成します(oracle_discovery.sh)
- zabbix-agent クライアントを構成し、カスタマイズされた自動検出ルール (oracle_check.sh) を追加します。
3 つのスクリプトは次のとおりです。
monitor_tbs.sh
#此脚本需要放到crontab中调用 */10 * * * * /home/orasit/orabbix/monitor_tbs.sh > /home/orasit/orabbix/monitor_tbs.log
#!/bin/bash
source /home/orasit/.bash_profile
sqlplus -s apps/apps > /tmp/tablespace.log<<\EOF
set linesize 140 pagesize 10000
col "Status" for a10
col "Name" for a25
col "Type" for a10
col "Extent" for a15
SELECT d.status "Status",
d.tablespace_name "Name",
d.contents "Type",
d.extent_management "Extent",
ROUND(NVL(a.bytes, 0)) "Size (M)",
ROUND(NVL(a.bytes - NVL(f.bytes, 0), 0)) "Used (M)",
round(NVL((a.bytes - NVL(f.bytes, 0)) / a.bytes * 100, 0), 2) "Used %"
FROM sys.dba_tablespaces d,
(SELECT tablespace_name, SUM(DECODE(autoextensible, 'YES', maxbytes, 'NO', bytes))/1024/1024 bytes
FROM dba_data_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes)/1024/1024 bytes
FROM dba_free_space
GROUP BY tablespace_name) f
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = f.tablespace_name(+)
--AND d.tablespace_name NOT IN ('SYSAUX', 'SYSTEM')
AND NOT (d.extent_management LIKE 'LOCAL' AND d.contents LIKE 'TEMPORARY')
UNION ALL
SELECT d.status "Status",
d.tablespace_name "Name",
d.contents "Type",
d.extent_management "Extent",
ROUND(NVL(a.bytes, 0)) "Size (M)",
ROUND(NVL(t.bytes, 0)) "Used (M)",
round(NVL(t.bytes / a.bytes * 100, 0), 2) "Used %"
FROM sys.dba_tablespaces d,
(SELECT tablespace_name, SUM(bytes)/1024/1024 bytes
FROM dba_temp_files
GROUP BY tablespace_name) a,
(SELECT tablespace_name, SUM(bytes_cached)/1024/1024 bytes
FROM v$temp_extent_pool
GROUP BY tablespace_name) t
WHERE d.tablespace_name = a.tablespace_name(+)
AND d.tablespace_name = t.tablespace_name(+)
AND d.extent_management LIKE 'LOCAL'
AND d.contents LIKE 'TEMPORARY'
ORDER BY 7;
EOF
sed -i '$d' /tmp/tablespace.log
sed -i '$d' /tmp/tablespace.log
sed -i 's/,//g' /tmp/tablespace.log
これら 2 つのスクリプトを zabbix-agent 構成ファイル (/etc/zabbix/zabbix_agentd.conf) に配置します。
#在/etc/zabbix/zabbix_agentd.conf最后加入
#表空间自动发现及告警
UserParameter=ora.tbs.discovery,/etc/zabbix/zabbix_agentd.d/oracle_discovery.sh
UserParameter=tablespace[*],/etc/zabbix/zabbix_agentd.d/oracle_check.sh $1 $2
oracle_discovery.sh
#!/bin/bash
TABLESPACE=`cat /tmp/tablespace.log |awk '{print$2}'|awk 'NR>3{print}'`
COUNT=`echo "$TABLESPACE" |wc -l`
INDEX=0
echo '{"data":['
echo "$TABLESPACE" | while read LINE; do
echo -n '{"{#TABLESPACE}":"'$LINE'"}'
INDEX=`expr $INDEX + 1`
if [ $INDEX -lt $COUNT ]; then
echo ','
fi
done
echo ']}'
oracle_check.sh
#!/bin/bash
EQ_DATA="$2"
ZBX_REQ_DATA_TAB="$1"
SOURCE_DATA=/tmp/tablespace.log
case $2 in
maxmb) grep -Ew "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk '{print $5}';;
used) grep -Ew "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk '{print $6}';;
autopercent) grep -Ew "$ZBX_REQ_DATA_TAB" $SOURCE_DATA |awk '{print $7}';;
*) echo $ERROR_WRONG_PARAM; exit 1;;
esac
exit 0
zabbix 自動検出ルール、監視項目、およびアラームを構成する
自動検出ルールを構成する
3 つの監視項目を設定し、自動検出ルール内の監視項目のプロトタイプをクリックします。
テーブルスペース {#TABLESPACE} の使用率
テーブルスペース[{#TABLESPACE},autopercent]
テーブルスペースの最大容量 {#TABLESPACE}/M
テーブルスペース[{#TABLESPACE},maxmb]
テーブルスペース {#TABLESPACE} はすでに使用されています /M
テーブルスペース[{#TABLESPACE},使用済み]
トリガーアラートを構成する
テーブルスペース {#TABLESPACE} アラーム
{Template_Oracle-orabbix:tablespace[{#TABLESPACE},autopercent].last()}>95
グラフィックスの構成
グラフィックス集約効果を構成します。
EBS モニタリングを設定するには、次の SQL を参照できます。
https://github.com/ikzelf/zbxdb/blob/master/etc/zbxdb_checks/oracle/ebs.cfg
https://github.com/ikzelf/zbxdb/blob/master/etc/zbxdb_checks/oracle/primary.11.cfg
追加の参考資料:
https://oracle-base.com/articles/misc/an-introduction-to-json-support-in-the-oracle-database#json-support-in-12c
https://seeyon.ren/blog/index .php/archives/223/
https://blog.51cto.com/u_5646435/3170513
https://blog.cactifans.com/2020/05/19/Zabbix5.0%E7%89%88%E6%9C%ACAgent2%E5%AE%89%E8%A3%85/
https://bbs.huaweicloud.com/blogs/249319
https://blog.csdn.net/qq_22894935/article/details/115544995
https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates/db/oracle_agent2?at=release/5.4
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/src/go/plugins/oracle/README.md
https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/src/go/plugins/oracle
https://www.cnblogs.com/kerrycode/p/13368640.html