Oracleは、どのように監視テンプレートをカスタマイズするには?例えばoracle11.2するには、指標が第一の下に監視する必要があるOracleが出てソートします:
1.のような共通の基本的な指標のいくつか:状態、セッション、ログイン失敗の例表スペースの使用率、ASMディスクの使用状況や他のグループ。
2.詳細Oracleのパフォーマンス指標は、そのような、しかし実際には、過去にAWRレポートの概要に記載されている多くの指標は、良い指標は一時的取引と非アイドルはいくつかのセッションを待つの数であると考えることができます取得しました。
したがって、現在の要約指標は簡単にのみ、以下にアクセスすることができます。
- データベース接続//一時的に怠惰な、対応する監視項目を構築していません
- セッションの例
- 非アイドル待機中のセッションの数は - このメトリックは、そのようなので、上のライブラリ・キャッシュ・XXX、ENQのXXXとして待機、さまざまなタイプのためのセッションの数に広がることができます。
- トランザクションの現在の数
- ログインの失敗
- 各表スペースが別の表スペースを持参する必要があるため、戻り値の数値型としては適していませんので、私は唯一の最高使用統計を選択//表領域の使用状況の最高使用状況表スペースの使用状況の統計、次のインジケータ共感
- 少なくとも空き容量空き容量表領域
- ASMディスク・グループ容量の監視
インデックス値を取得するには?実際にはZABBIXの公式ウェブサイトは、テンプレート(参照するの多くを提供してきたhttps://share.zabbix.com/databases/oracleを)が、多くは唯一のテンプレートまたはテンプレート対応するコマンドコマンドを提供したり、機能がが非常に強力ですが、にしないです(例えばPythonとサードパーティのパッケージのような)他の構成要素の一連のインストール、またはアウトアウトのオラクルに精通していない、オラクルの指標のいくつかの理解が微細ではありません。とにかく、私は非常に不幸それらを使用するので、私たちは、自分の車を構築する必要があり、目標は単純です:独自のビューを持つSQLPLUSは直接SQLを介して取得したパフォーマンスの監視値を問い合わせます。
ステップ1:テンプレート、アプリケーションや監視項目を作成します。
テンプレートと操作の適用性を実証するために、あまりにも怠惰を作成するには名前のプロセスであり、Webページ上のOracle_Monitorのためのカスタムテンプレートの名前は、イベントを待っている統計セッションのすべての種類に特化したアプリケーションに内蔵oracle_session_waitsと呼ばれます。
Zabbixはホストグループを付属しています。8つのテンプレート、テンプレートホストが収集ホストグループの7つの他の要素です、。
Zabbixのではホストまたはホストだけでなく、監視されているサービスを指し、で、また、テンプレートすることができ、より良いテンプレートを管理するために、私はこのデフォルトのホスト・グループ、Oracleの監視テンプレート/データベーステンプレートグループを追加し、新しく作成したテンプレートを指示することにしました唯一のテンプレートDB MySQLはテンプレートが付属しています。
上記のOracleモニターいくつかの指標を記述するために、まず、対応する監視項目(アイテム)を作成する必要があります。
これらの名前とキーの監視項目は、限り、あなたは明確に表示することができますよう、カスタマイズ可能です。テンプレートの上に構築されてきたこの時点では、キータイプが数値のデジタルフォーマットです。
ステップ2:仕事を準備します。
監視データを取得するには、Oracleにアクセスするためには、最初のユーザーを構築する必要があり、私は、ユーザーのZABBIXを構築するためにここにいます:
「ZABBIX」で識別されるユーザーZABBIXを作成します。
助成金は、ZABBIXに接続します。
ZABBIXにSELECT_CATALOG_ROLEを付与します。
ステップ3:モニタリングの値を抽出するためのスクリプトを作成します。
直接スクリプトに添付:誰かがこれらの環境変数を変更することに注意してくださいを使用したい場合check_oracle.sh、私は、自分の状況に応じて、このスクリプトを書きました。
#!/bin/sh export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1 export TNS_ADMIN=$ORACLE_HOME/network/admin export PATH=$ORACLE_HOME/bin:/usr/bin:/sbin/:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib #用法定义 #如果以后要新加监控项,那么除了需要在此处中新增提示之外,最重要的就是在etc/zabbix_10052/check_oracle_sql目录下新增对应监控项的SQL文件啦 if [ $# -ne 1 ];then echo "Usage:" echo "$0 TS_MAX_USEAGE|TS_MIN_SPACE|TRANS_COUNT|LOGIN_FAILS|ASM_MIN_SPACE|SESSION_COUNT|SESSION_NONE_IDLE|SESSION_LOG_FILE_SYNC|SESSION_GC|SESSION_ENQ|SESSION_LIBRARY_CACHE|SESSION_DIRECT_PATH|SESSION_LATCH" exit fi #ocmd命令定义 ocmd(){ #ocmd SQL_FILE [DBname] [DBuser] [DBpswd] [DBhost] [DBport] if [ -f $1 ];then SQL=`cat $1` else echo "SQL文件不存在!";exit fi DBname=oracle [ $2 ] && DBname=$2 DBuser=zabbix [ $3 ] && DBuser=$3 DBpswd=zabbix [ $4 ] && DBpswd=$4 DBhost=`echo $HOSTNAME` [ $5 ] && DBhost=$5 DBport=1521 [ $6 ] && DBport=$6 result=`sqlplus -S $DBuser/$DBpswd@$DBhost:$DBport/$DBname <<EOF set lines 200 set heading off feedback off pages 0 verify off echo off $SQL commit; exit EOF` echo $result } #获取监控数据 cd /etc/zabbix_10052/check_oracle_sql ocmd $1.sql
步骤四:编写获取监控指标的SQL。
如上脚本所示,所有的SQL文件都存在于/etc/zabbix_10052/check_oracle_sql目录下(至于为什么是zabbix_10052,是因为我这里已经有一套10050的agent在运行,为了把数据库监控分离出来我单独使用10052端口新开了个agent并新建了server):
脚本一:获取会话数
SESSION_COUNT.sql
select count(*) from v$session;
脚本二:获取处于非空闲等待的会话数
SESSION_NONE_IDLE.sql
select count(*) from v$session where wait_class != 'Idle';
SESSION_LOG_FILE_SYNC这些以SESSION开头的监控项的脚本和上述脚本类似,只需要将过滤条件改改就可以了:
select count(*) from v$session where event like 'direct path%';
select count(*) from v$session where event like 'enq%';
select count(*) from v$session where event like 'gc%';
select count(*) from v$session where event like 'latch%';
select count(*) from v$session where event like 'library cache%';
select count(*) from v$session where event='log file sync';
脚本三:事务数
TRANS_COUNT.sql
select count(*) from v$transaction;
脚本四:登陆失败次数
LOGIN_FAILS.sql
select count(*) from dba_audit_trail where ACTION_NAME='LOGON' and RETURNCODE=1017;
dba_audit_trail视图是由sys.AUD$、sys.AUDIT_ACTIONS等几个表join出来的结果,建议为sys.AUD$的ACTION#,returncode字段创建bitmap索引(因为DB级别的审计这俩字段的可用值其实很少),否则数据库时间久了查起来会超级慢。
脚本五:表空间最大使用率
TS_MAX_USEAGE.sql
select
max(to_char(round(sum(f.file_used_size_MB)*100/sum(f.file_max_size_MB),2),'990.99'))
from
(select df.tablespace_name,
round(decode(df.AUTOEXTENSIBLE,'NO',df.bytes/1024/1024,'YES',df.maxbytes/1024/1024),2) file_max_size_MB,
round((df.bytes-nvl(fs.bytes,0))/1024/1024,2) file_used_size_MB
from dba_data_files df
left join (select tablespace_name,file_id,sum(bytes) as bytes from dba_free_space group by tablespace_name,file_id) fs
on df.file_id=fs.file_id
) f
group by f.tablespace_name;
脚本六:表空间最小容量
TS_MIN_SPACE.sql
select
min(sum(f.file_max_size_MB)-sum(f.file_used_size_MB))
from
(select df.tablespace_name,
round(decode(df.AUTOEXTENSIBLE,'NO',df.bytes/1024/1024,'YES',df.maxbytes/1024/1024),2) file_max_size_MB,
round((df.bytes-nvl(fs.bytes,0))/1024/1024,2) file_used_size_MB
from dba_data_files df
left join (select tablespace_name,file_id,sum(bytes) as bytes from dba_free_space group by tablespace_name,file_id) fs
on df.file_id=fs.file_id
-- where df.tablespace_name [not] in ('',...) //可以排除一些不需要监控的表空间防止误报,或者只对某些表空间进行报警
) f
group by f.tablespace_name;
脚本七:asm磁盘组容量监控
ASM_MIN_SPACE.sql
select min(free_mb) from v$asm_diskgroup where name !='OCRVOTE';
排除不需要监控的磁盘组,还可以改写为使用率的监控。
步骤四:agent配置文件新增UserParameter
#oracle monitoring
UserParameter=oracle.status[*],/etc/zabbix_10052/check_oracle.sh $1
想要添加其他监控项直接照上例添加SQL文件和UserParameter,然后server web端添加相应的item即可。
重要提示:
zabbix agent的各项监控指标获取都是用zabbix用户操作的,所以zabbix一定要有脚本的访问和执行权限,本例将脚本全放在了/etc/zabbix_10052目录下,所以需要注意此目录的访问权限和一些可执行文件的执行权限。
此外脚本内调用的各种命令和文件zabbix用户也要有权访问。
如果一切正常,最后在latest data中就可以看到监控值了,我的如下:
其他补充:
至此基本的oracle监控模板已经建好了,接下来只需要加上一些触发器和graphs等对象就算完善了,现在懒得加,有空再回来补。