zabbix mysql 表空间_zabbix自动发现oracle表空间并监控其使用率

本文介绍了如何使用Zabbix监控Oracle数据库的表空间使用情况,包括系统表空间、临时表空间、undo表空间和用户表空间的特点。通过自定义脚本自动发现表空间并获取信息,监控表空间使用率、剩余量和是否开启自动扩展。在Zabbix Web端设置模板和触发器,实现超过90%使用率时发出警告,确保数据库性能和稳定性。
摘要由CSDN通过智能技术生成

一、监控需求

oracle的表空间使用率实时监控,达到90%触发器触发警告(Warning)信息,当检测到表空间没有开启自动扩展时,则触发Information信息。

二、oracle表空间特性

1、系统表空间

system表空间存放内容为:

数据字典:SYSTEM表空间(tablespace)总是用于存储整个数据库的数据字典表(data dictionary table)。数据字典表存储在编号为1的数据文件(datafile)中。

PL/SQL 程序结构描述:所有和PL/SQL程序结构(包括过程(procedure),函数(function),包 package),及触发器(trigger))有关的数据都被保存在SYSTEM表空间(tablespace)中。如果数据库中用户定义的程序结构很多,那么管理员必须为之在SYSTEM表空间中提供足够的空间。

综上,多数系统中,因数据字典和plsql程序结构不会频繁增加,system表空间增长缓慢,告警级别可降低或不监控。

2、临时表空间

临时表空间用来管理数据库排序操作以及用于存储临时表、中间排序结果等临时对象,当ORACLE里需要用到SORT的时候,并且当PGA中sort_area_size大小不够时,将会把数据放入临时表空间里进行排序。像数据库中一些操作:CREATE INDEX、ANALYZE、SELECT DISTINCT、ORDER BY、GROUP BY、UNION ALL、INTERSECT、MINUS、SORT-MERGE

JOINS、HASH JOIN等都可能会用到临时表空间。当操作完成后,系统会自动清理临时表空间中的临时对象,自动释放临时段。这里的释放只是标记为空闲、可以重用,其实实质占用的磁盘空间并没有真正释放。这也是临时表空间有时会不断增大的原因。

它跟永久表空间不同的地方在于它由临时数据文件(temporary files)组成的,而不是永久数据文件(datafiles)。临时表空间不会存储永久类型的对象,所以它不会也不需要备份。另外,对临时数据文件的操作不产生redo日志,不过会生成undo日志。

综上,多数情况下temp表空间的使用率无需监控,只需注意它过大的情况即可。

3、undo表空间

对Oracle数据库UNDO表空间的监控和管理是我们日常最重要的工作之一,UNDO表空间通常都是Oracle自动化管理(通过undo_management初始化参数确定);UNDO表空间是用于存储DML操作的前镜像数据,它是实例恢复,数据回滚,一致性查询功能的重要组件;我们常常会忽略对它的监控,使用率100%,导致DML操作无法进行。

4、用户表空间

用户表空间即真正支撑具体业务的表空间,空间利用率上对业务连续性起着决定性的作用。我么需要结合业务场景具体确定数据文件是否自动扩展,使用率达到阈值后快速响应扩容。

5、统一特性

表空间上限即dba_data_file视图maxbytes字段是指数据文件可自动扩展的上限,不影响手动resize。

表空间使用率取决于segment的高水位线,若要释放空间,需降低高水位线的相关操作。

自动扩展过程会影响性能,非关键业务表空间数据文件可适当开启自动扩展,除此之外的表空间建议关闭,做好监控即可。

三、监控方式

基于zabbix监控系统,我们可以定制任何需要的监控项目,首先通过自动发现脚本发现oracle表空间,然后再制定额外的属于oracle表空间的监控项目,配置告警触发器,最后在zabbix的Web页面端展示oracle表空间的使用率和剩余量。

1、自动发现oracle数据库表空间并获取信息的脚本(root用户启动zabbix_agentd,其他用户执行需在脚本中添加自动输入oracle数据库安装用户的密码相关shell命令)

[root@ebstest01

ora_zabbix]# vi discovery_oracle_tablespace.sh

#!/bin/bash

#

tablespace usagep check

ZABBIX_H=/home/oraprod/ora_zabbix    #脚本存放目录

mkdir -p

$ZABBIX_H

function

check {

su - oraprod>

$ZABBIX_H/tablespace.log <

sqlplus

-S "/ as sysdba"

脚本执行结果ora_tablespace.txt:

[root@ebstest01 ora_zabbix]# cat ora_tablespace.txt

[root@ebstest01

ora_zabbix]# ./discovery_oracle_tablespace.sh

{

"data":[

{"{#TABLESPACE_NAME}":"CTXD"},

{"{#TABLESPACE_NAME}":"ODM"},

{"{#TABLESPACE_NAME}":"APPS_TS_MEDIA"},

{"{#TABLESPACE_NAME}":"APPS_TS_TX_DATA"},

{"{#TABLESPACE_NAME}":"APPS_TS_TX_IDX"},

{"{#TABLESPACE_NAME}":"APPS_TS_NOLOGGING"},

{"{#TABLESPACE_NAME}":"APPS_TS_ARCHIVE"},

{"{#TABLESPACE_NAME}":"APPS_TS_INTERFACE"},

{"{#TABLESPACE_NAME}":"SYSAUX"},

{"{#TABLESPACE_NAME}":"APPS_TS_SEED"},

{"{#TABLESPACE_NAME}":"SYSTEM"},

{"{#TABLESPACE_NAME}":"APPS_TS_QUEUES"},

{"{#TABLESPACE_NAME}":"APPS_TS_SUMMARY"},

{"{#TABLESPACE_NAME}":"TEMP1"},

{"{#TABLESPACE_NAME}":"TEMP2"},

{"{#TABLESPACE_NAME}":"OWAPUB"},

{"{#TABLESPACE_NAME}":"PORTAL"},

{"{#TABLESPACE_NAME}":"APPS_UNDOTS1"},

{"{#TABLESPACE_NAME}":"OLAP"},

{"{#TABLESPACE_NAME}":"APPS_TS_TOOLS"}

]

}

2、监控项目检测脚本tablespace_check.sh用于zabbix获取oracle表空间使用率、剩余量和检查是否开启自动扩展。

[root@ebstest01

ora_zabbix]# cat tablespace_check.sh

#!/bin/bash

# oracle

tablespace check

ZABBIX_H=/home/oraprod/ora_zabbix    #脚本存放目录

CEHCK_TYPE=$1

TABLESPACE_NAME=$2

function

current_total_mb {

grep "\b$TABLESPACE_NAME\b"

$ZABBIX_H/ora_tablespace.txt | awk '{printf $2}'

}

function

free_mb {

grep "\b$TABLESPACE_NAME\b"

$ZABBIX_H/ora_tablespace.txt | awk '{printf $3}'

}

function

used_mb {

grep "\b$TABLESPACE_NAME\b"

$ZABBIX_H/ora_tablespace.txt | awk '{printf $4}'

}

function

free_p {

grep "\b$TABLESPACE_NAME\b"

$ZABBIX_H/ora_tablespace.txt | awk '{printf "%.2f\n", $5}'

}

function

used_p {

grep "\b$TABLESPACE_NAME\b"

$ZABBIX_H/ora_tablespace.txt | awk '{printf "%.2f\n", $6}'

}

function

aut_yes {

grep "\b$TABLESPACE_NAME\b"

$ZABBIX_H/ora_tablespace.txt | awk '{printf $7}'

}

function

aut_no {

grep "\b$TABLESPACE_NAME\b"

$ZABBIX_H/ora_tablespace.txt | awk '{printf $8}'

}

function

max_total_mb {

grep "\b$TABLESPACE_NAME\b"

$ZABBIX_H/ora_tablespace.txt | awk '{printf $9}'

}

case

$CEHCK_TYPE in

ctotal)

current_total_mb ;;

fre)

free_mb ;;

use)

used_mb ;;

frep)

free_p ;;

usep)

used_p ;;

aty)

aut_yes ;;

atn)

aut_no ;;

mtotal)

max_total_mb ;;

*)

echo -e "Usage: $0

[ctotal|fre|use|frep|usep|aty|atn|mtotal] [TABLESPACE_NAME]"

esac

确认脚本输出的值为zabbix监控所取的数值

[root@ebstest01

ora_zabbix]# ./tablespace_check.sh use SYSTEM

12330.97

[root@ebstest01

ora_zabbix]# ./tablespace_check.sh fre SYSTEM

27197.0313

2、将脚本都保存到$ZABBIX_H/目录下,然后配置UserParameter参数,增加监控key,key名称分别为discovery.oracle.tablespace、tablespace.check,在以下配置文件末尾增加两行

[root@ebstest01

ora_zabbix]# cd /usr/local/zabbix/etc/zabbix_agentd.conf.d/

[root@ebstest01

zabbix_agentd.conf.d]# cat userparameter_script.conf

UserParameter=discovery.oracle.tablespace[*],/home/oraprod/ora_zabbix/discovery_oracle_tablespace.sh

UserParameter=tablespace.check[*],/home/oraprod/ora_zabbix/tablespace_check.sh

$1 $2

3、agent端重启zabbix_ahgentd,在zabbix服务端获取oracle表空间和监控数值

[root@ebsdb01

~]# /usr/local/zabbix/bin/zabbix_get -p10050 -k 'tablespace.check[fre,SYSAUX]'

-s 172.18.11.28

1181.5625

[root@ebsdb01

~]# /usr/local/zabbix/bin/zabbix_get -p10050 -k 'tablespace.check[use,SYSAUX]'

-s 172.18.11.28

818.44

[root@ebsdb01

~]# /usr/local/zabbix/bin/zabbix_get -p10050 -k 'tablespace.check[aty,SYSAUX]'

-s 172.18.11.28

0

四、Zabbix Web端配置

新建oracle表空间模版My_Templates_Linux_Discovery_oracle_tablespace,添加自动发现规则,10分钟更新一次。

注:以下图中{#PROCESS_NAME}替换为脚本结果中的{#TABLESPACE_NAME},pre、fre、check等参数替换为脚本tablespace_check.sh中的选择项[ctotal|fre|use|frep|usep|aty|atn|mtotal]。

添加Item prototypes监控项目,第一个表空间使用率

第二个表空间剩余容量

第三个检查表空间是否开启自动扩展

创建告警触发器

首先创建检测表空间使用率是否大于95%的触发器

创建检测是否开启自动扩展的触发器

查看监控数据

五、附录

1、discovery_oracle_tablespace.sh

#!/bin/bash

# tablespace usagep check

ZABBIX_H=/home/oraprod/ora_zabbix

mkdir -p $ZABBIX_H

function check {

su - oraprod > $ZABBIX_H/tablespace.log <

sqlplus -S "/ as sysdba"

set lines 300 pages 1000

col tablespace_name for a30

spool $ZABBIX_H/ora_tablespace.txt

select *

from (select a.tablespace_name,

round(a.s, 2)

"CURRENT_TOTAL(MB)",

nvl(f.s, 0)

"FREE(MB)",

round((a.s - nvl(f.s, 0)), 2)

"USED(MB)",

round(nvl(f.s, 0) /

a.s * 100, 2) "FREE%",

round(100 - nvl(f.s,

0) / a.s * 100, 2) "USED%",

at.aut_yes,

at.aut_no,

round(a.ms, 2)

"MAX_TOTAL(MB)"

from (select

d.tablespace_name,

sum(bytes /

1024 / 1024) s,

sum(decode(maxbytes, 0, bytes, maxbytes) / 1024 / 1024) ms

from

dba_data_files d

group by d.tablespace_name)

a,

(select

tablespace_name, sum(bytes / 1024 / 1024) s

from

dba_free_space

group by

tablespace_name) f,

(select

nvl(at1.tablespace_name, at2.tablespace_name) tablespace_name,

nvl(at1.cat,0) "AUT_YES",

nvl(at2.cat,0) "AUT_NO"

from (select

tablespace_name,

autoextensible,

count(autoextensible) cat

from dba_data_files

where

autoextensible = 'YES'

group by

tablespace_name, autoextensible) at1

full join (select

tablespace_name,

autoextensible,

count(autoextensible) cat

from

dba_data_files

where

autoextensible = 'NO'

group

by tablespace_name, autoextensible) at2

on at1.tablespace_name =

at2.tablespace_name) at

where at.tablespace_name =

f.tablespace_name(+)

and at.tablespace_name =

a.tablespace_name(+)

union all

select t2.tablespace_name,

t1.bytes

"CURRENT_TOTAL(MB)",

round((t1.bytes -

t2.bytes_used), 2) "FREE(MB)",

t2.bytes_used

"USED(MB)",

round((t1.bytes -

t2.bytes_used) * 100 / t1.bytes, 2) "FREE%",

round(t2.bytes_used *

100 / t1.bytes, 2) "USED%",

t3.aut_yes,

t3.aut_no,

t1.ms

"MAX_TOTAL(MB)"

from (select

tablespace_name,

sum(bytes) /

1024 / 1024 bytes,

sum(decode(maxbytes, 0, bytes, maxbytes) / 1024 / 1024) ms

from

dba_temp_files

group by

tablespace_name) t1,

(select

tablespace_name,

sum(bytes_cached) / 1024 / 1024 bytes_used

from

v\$temp_extent_pool

group by

tablespace_name) t2,

(select

nvl(at1.tablespace_name, at2.tablespace_name) tablespace_name,

nvl(at1.cat,0) "AUT_YES",

nvl(at2.cat,0) "AUT_NO"

from (select

tablespace_name,

autoextensible,

count(autoextensible) cat

from

dba_temp_files

where

autoextensible = 'YES'

group by

tablespace_name, autoextensible) at1

full join (select

tablespace_name,

autoextensible,

count(autoextensible) cat

from

dba_temp_files

where

autoextensible = 'NO'

group

by tablespace_name, autoextensible) at2

on

at1.tablespace_name = at2.tablespace_name) t3

where t3.tablespace_name =

t2.tablespace_name(+)

and t3.tablespace_name =

t1.tablespace_name(+))

order by "FREE%";

spool off

quit

EOF

};check &>/dev/null

#zabbix discovery oracle tablespace

table_spaces=(`cat $ZABBIX_H/ora_tablespace.txt | sed -e "1,3d"

-e "/^$/d" -e "/selected/d" | awk '{print $1}'`)

length=${#table_spaces[@]}

printf "{\n"

printf '\t'"\"data\":["

for ((i=0;i

do

printf "\n\t\t{"

printf

"\"{#TABLESPACE_NAME}\":\"${table_spaces[$i]}\"}"

if [ $i -lt $[$length-1] ];then

printf ","

fi

done

printf "\n\t]\n"

printf "}\n"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值