Zabbix调用Python3脚本监控Linux下的Oracle(一)
笺注:
被监控主机的Agent的安装可参考 Zabbix使用Agent监控Oracle Linux6
被监控主机的Python3的安装可参考 Python3脚本管理Oracle11gR2
这是在 使用Navicat连接Oracle11gR2 的基础上进行的。
被监控主机的信息:
[root@oracle ~]# cat /etc/issue |head -1
Oracle Linux Server release 6.9
[root@oracle ~]#
[root@oracle ~]# uname -r
4.1.12-61.1.28.el6uek.x86_64
[root@oracle ~]#
[root@oracle ~]# ifconfig eth1 |grep "inet addr" |awk '{print $2}' |cut -d: -f 2
192.168.168.135
[root@oracle ~]#
被监控主机查看自己的zabbix-agent版本:
[root@oracle ~]# rpm -qi zabbix-agent
Name : zabbix-agent Relocations: (not relocatable)
Version : 4.4.5 Vendor: (none)
Release : 2.el6 Build Date: Thu 30 Jan 2020 01:04:44 AM CST
Install Date: Mon 12 Aug 2019 07:24:17 AM CST Build Host: builds.zabbix.lan
Group : Applications/Internet Source RPM: zabbix-4.4.5-2.el6.src.rpm
Size : 1773628 License: GPLv2+
Signature : RSA/10, Thu 30 Jan 2020 01:14:39 AM CST, Key ID 082ab56ba14fe591
URL : http://www.zabbix.com/
Summary : Old Zabbix Agent
Description :
Zabbix agent to be installed on monitored systems.
[root@oracle ~]#
被监控主机本地登录Oracle:(Oracle已启动时)
[root@oracle ~]# su - oracle
[oracle@oracle ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Mon Aug 12 06:49:09 2019
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> conn /as sysdba;
Connected.
SQL>
SQL> show user;
USER is "SYS"
SQL>
查看Oracle的版本:
SQL> SELECT version FROM product_component_version WHERE substr(product, 1, 6) = 'Oracle';
VERSION
--------------------------------------------------------------------------------
11.2.0.1.0
SQL>
切换用户:
SQL> connect happy/mima;
Connected.
SQL>
SQL> show user;
USER is "HAPPY"
SQL>
创建表TABLE_1:
SQL> Create table TABLE_1(ID number(3),NAME varchar2(10));
Table created.
SQL>
查看当前用户happy所拥有的表:
SQL> Select t.table_name from user_tables t;
TABLE_NAME
------------------------------------------------------------
TABLE_1
SQL>
查看表TABLE_1的表结构:
SQL> desc TABLE_1;
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(3)
NAME VARCHAR2(10)
SQL>
#############
#############
Windows客户端使用Navicat连接Oracle11gR2:
往表TABLE_1插入一条记录:
INSERT into TABLE_1 (ID,NAME) values (1,'Zhuohua');
输出表TABLE_1中的所有记录:
Select * FROM TABLE_1;
#############
#############
被监控主机使用Python3脚本查看本地的Oracle版本:
[root@oracle ~]# cat /script/xx.py
#coding=utf-8
import cx_Oracle
def db_connect():
#本地连接数据库;使用数据库用户happy,数据库实例ORCL
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/ORCL')
cursor = db.cursor()
Sql_1 = "SELECT version FROM product_component_version WHERE substr(product, 1, 6) = 'Oracle'"
cursor.execute(Sql_1)
Result_1 = cursor.fetchone()
print(Result_1[0])
print("-" * 10)
print(f"数据库的版本信息:{Result_1[0]}")
db.close() #关闭数据库连接
def func_main():
try:
db_connect()
except Exception as e:
print(f"数据库连接失败,原因: {e}")
if __name__ == "__main__":
func_main()
脚本运行的结果:
[root@oracle ~]# python3 /script/xx.py
11.2.0.1.0
----------
数据库的版本信息:11.2.0.1.0
[root@oracle ~]#
#############
被监控主机使用Python3脚本获取SQL语句执行后的返回值:
[root@oracle ~]# cat /script/xx.py
#coding=utf-8
import cx_Oracle
def db_connect():
db=cx_Oracle.connect('happy/mima@127.0.0.1:1521/ORCL')
cursor=db.cursor()
Sql_1="SELECT ID from TABLE_1 WHERE NAME = 'Zhuohua'"
cursor.execute(Sql_1)
Results=cursor.fetchone()
#print (Results) #(1,)
#print (type(Results)) #<class 'tuple'>
print (Results[0])
#print (type(Results[0])) #<class 'int'>
db.close()
def main():
try:
db_connect()
except Exception as e:
print(e)
if __name__ == "__main__":
main()
脚本运行的结果:
[root@oracle ~]# python3 /script/xx.py
1
[root@oracle ~]#
设置脚本权限:
[root@oracle ~]# chmod a+x /script/xx.py
[root@oracle ~]# ll /script/xx.py
-rwxr-xr-x 1 root root 479 Aug 12 07:59 /script/xx.py
[root@oracle ~]#
#############
#############
修改被监控主机的Agent配置文件:
[root@oracle ~]# vi /etc/zabbix/zabbix_agentd.conf
# UnsafeUserParameters=0
修改为:(启用该功能)
UnsafeUserParameters=1
接着插入:
UserParameter=command_1,/usr/bin/python3 /script/xx.py
如下图:
保存好配置文件后,重启zabbix-agent:
[root@oracle ~]# service zabbix-agent restart
Shutting down Zabbix agent: [ OK ]
Starting Zabbix agent: [ OK ]
[root@oracle ~]#
######
在Zabbix服务器测试,验证能否获取被监控主机(192.168.168.135)的key:
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.135 -k command_1
1
[root@centos8 ~]#
##################Zabbix添加被监控主机:
配置》主机》创建主机 (主机名称无需与被监控主机的真实主机名一致;群组可以随便选;IP地址那里要输入被监控主机的IP地址;端口为10050)
注释:
使用agent代理程序的接口。
使用 TCP 10050 端口。
主机添加成功:(主机可以不用模板的)
给“被监控主机使用Python3脚本获取SQL语句执行后的返回值”创建监控项:
自定义名称: Oracle command_1
键值: command_1
信息类型: 数字(无正负)
备注:其他地方保持默认,点击底下的“添加”按键。
######
给监控项“Oracle command_1”创建图形“Oracle command_1 image”:
备注:其他地方保持默认,点击底下的“添加”按键。
查看图形“Oracle command_1 image”:
监测》图形:
#############
#############
更改表TABLE_1的字段ID的值:
UPDATE TABLE_1 SET ID = 2 WHERE NAME = 'Zhuohua';
SELECT * FROM TABLE_1;
在Zabbix服务器测试,验证能否获取被监控主机(192.168.168.135)的key:
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.135 -k command_1
2
[root@centos8 ~]#
再次查看图形“Oracle command_1 image”:
######
给监控项“Oracle command_1”创建触发器:(返回值大于5就告警)
自定义名称: ID is bigger than 5
插入表达式:(监控项: Oracle_1: Oracle command_1 )
自动生成的表达式:(触发器的表达式要用到监控项中的键值)
{Oracle_1:command_1.last()}>5
备注:其他地方保持默认,点击底下的“添加”按键。
至此,在图形“Oracle command_1 image”上,理应可以看到新建的触发器“ID is bigger than 5”:
#############
#############
再次更改表TABLE_1的字段ID的值:
UPDATE TABLE_1 SET ID = 6 WHERE NAME = 'Zhuohua';
SELECT * FROM TABLE_1;
在Zabbix服务器测试,验证能否获取被监控主机(192.168.168.135)的key:
[root@centos8 ~]# /usr/local/zabbix/bin/zabbix_get -s 192.168.168.135 -k command_1
6
[root@centos8 ~]#
再次查看图形“Oracle command_1 image”:
监控项“Oracle command_1”的返回值大于5时,仪表板会如下图显示:(显示对应触发器的名称)
ID is bigger than 5
相关文章:
Zabbix调用Python3脚本监控Linux下的Oracle(二)
CentOS8编译安装Zabbix4.4.5
Zabbix调用Python3脚本监控Linux下的MySQL |