[记录]Zabbix3.4配置监控Oracle12c的存活状态和表空间使用率

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
Zabbix3.4配置监控Oracle的存活状态和表空间使用率
1.安装zabbix3.4 agent:
# rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
# yum install zabbix-agent
# service zabbix-agent start
2.配置zabbix_agentd.conf
[root@centos zabbix]# cat zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=server_ip or proxy_ip
Hostname=agent_IP
Include=/etc/zabbix/zabbix_agentd.d/*.conf
UnsafeUserParameters=1
AllowRoot=1
3.添加建立oracle的配置文件:
[root@centos scripts]# cat ../zabbix_agentd.d/zabbix_oracle.conf
UserParameter=oracle.active,/etc/zabbix/scripts/oracle_status active
UserParameter=ora.tab.discovery,/etc/zabbix/scripts/oracle_discovery.sh
UserParameter=tablespace[*],/etc/zabbix/scripts/oracle_checktablespace.sh $1 $2
[root@centos scripts]#service zabbix-agent restart
4.创建zabbix监控oracle的用户和密码并授权:
CREATE USER ZABBIX IDENTIFIED BY xxx DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
GRANT CONNECT TO ZABBIX;
GRANT RESOURCE TO ZABBIX;
ALTER USER ZABBIX DEFAULT ROLE ALL;
GRANT SELECT ANY TABLE TO ZABBIX;
GRANT CREATE SESSION TO ZABBIX;
GRANT SELECT ANY DICTIONARY TO ZABBIX;
GRANT UNLIMITED TABLESPACE TO ZABBIX;
GRANT SELECT ANY DICTIONARY TO ZABBIX;
5.编写监控oracle存活状态的脚本:
[root@centos scripts]# cat oracle_status
#!/bin/bash
 
function active() {
ps -ef | grep pmon | grep -v grep | awk '{print $NF}' > /dev/null
if [ $? -eq 0 ]; then
echo 1
else
echo 0
fi
}
 
if [ $# -ne 1 ]; then
echo "the args is error."
else
$1
fi
6.编写监控oracle表空间的脚本(三个脚本):
1)获取表空间状态输出到/tmp/oracle_tablespace.log文件。这是一个定时脚本。
*/1 * * * * oracle /bin/bash /etc/zabbix/scripts/oracle_tablespace.sh >> /tmp/oracle_tablespace_cron.log 2>&1
[root@centos scripts]# cat oracle_tablespace.sh
#!/bin/bash
 
#function:
#获取到oracle数据库中的tablespace列表,并输出到/tmp/oracle_tablespace.log日志中去,在crontab中设置每一分钟执行一次.
 
source /home/oracle/.bash_profile
 
sqlplus -s zabbix/xxx> /tmp/oracle_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",
NVL(a.bytes, 0) "Size (M)",
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(bytes) bytes from dba_data_files
group by tablespace_name) a, (select tablespace_name, sum(bytes) 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",
NVL(a.bytes, 0) "Size (M)",
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) bytes from dba_temp_files group by tablespace_name) a, (select
tablespace_name, sum(bytes_cached) 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/oracle_tablespace.log
sed -i '$d' /tmp/oracle_tablespace.log
sed -i 's/,//g' /tmp/oracle_tablespace.log
2)从/tmp/oracle_tablespace.log文件中取出Name那一列,并进行JSON格式化输出。
[root@centos scripts]# cat oracle_discovery.sh
#!/bin/bash
 
#function:
#这个脚本的功能是从/tmp/oracle_tablespace.log文件中取出Name那一列,并进行JSON格式化输出(因为zabbix的自动发现功能获取的数据类型是JSON格式的)
 
TABLESPACE=`cat /tmp/oracle_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 '{"{#TABLENAME}":"'$LINE'"}'
INDEX=`expr $INDEX + 1`
if [ $INDEX -lt $COUNT ]; then
echo ','
fi
done
echo ']}'
3)这是zabbix调用获取值的脚本:
[root@centos scripts]# cat oracle_checktablespace.sh
#!/bin/bash
 
#function:
#获取/tmp/oracle_tablespace.log中的最后三列数据,其中maxmb和used取出的值是M,根据需要转换单位,方便zabbix取值.
 
EQ_DATA="$2"
ZBX_REQ_DATA_TAB="$1"
SOURCE_DATA=/tmp/oracle_tablespace.log
case $2 in
maxmb)
grep -wE "$ZBX_REQ_DATA_TAB" $SOURCE_DATA | awk '{print $5}';;
used)
grep -wE "$ZBX_REQ_DATA_TAB" $SOURCE_DATA | awk '{print $6}';;
autopercent)
grep -wE "$ZBX_REQ_DATA_TAB" $SOURCE_DATA | awk '{print $7}';;
*)
echo $ERROR_WRONG_PARAM
exit 1;;
esac
exit 0

7.zabbix3.4-server面板添加agent主机并配置对应的监控项,图表和触发器。如下图:

1)添加主机:

链接模板:

2)添加oracle存活状态的监控:

添加图表:

图表数据展示:

 

添加触发器:

 

3)添加oracle表空间使用率的监控:

 

添加过滤关联item项:

添加图表:

 

数据展示:

 

添加触发器:

 

报警示例:

 

完。

 

posted @   wsjhk  阅读(412)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
· 用 DeepSeek 给对象做个网站,她一定感动坏了
· .NET 8.0 + Linux 香橙派,实现高效的 IoT 数据采集与控制解决方案
· .NET中 泛型 + 依赖注入 的实现与应用
点击右上角即可分享
微信分享提示