返回列表 发帖

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');
图片1.png


输出表TABLE_1中的所有记录:
Select * FROM TABLE_1;
图片2.png





#############
#############

被监控主机使用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

如下图:
图片3.png


保存好配置文件后,重启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)
图片4.png
注释:
使用agent代理程序的接口。
使用 TCP 10050 端口。


主机添加成功:(主机可以不用模板的)
图片5.png


给“被监控主机使用Python3脚本获取SQL语句执行后的返回值”创建监控项:
自定义名称: Oracle command_1
键值: command_1
信息类型: 数字(无正负)
图片6.png
备注:其他地方保持默认,点击底下的“添加”按键。



######

给监控项“Oracle command_1”创建图形“Oracle command_1 image”:
图片7.png
备注:其他地方保持默认,点击底下的“添加”按键。


查看图形“Oracle command_1 image”:
监测》图形:
图片8.png

图片9.png

图片10.png





#############
#############

更改表TABLE_1的字段ID的值:
UPDATE TABLE_1 SET ID = 2 WHERE NAME = 'Zhuohua';

SELECT * FROM TABLE_1;
图片11.png



在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”:
图片12.png

图片13.png





######

给监控项“Oracle command_1”创建触发器:(返回值大于5就告警)

自定义名称: ID is bigger than 5
图片14.png

插入表达式:(监控项: Oracle_1: Oracle command_1
图片15.png

自动生成的表达式:(触发器的表达式要用到监控项中的键值)
{Oracle_1:command_1.last()}>5
图片16.png
备注:其他地方保持默认,点击底下的“添加”按键。


至此,在图形“Oracle command_1 image”上,理应可以看到新建的触发器“ID is bigger than 5”:
图片17.png





#############
#############

再次更改表TABLE_1的字段ID的值:
UPDATE TABLE_1 SET ID = 6 WHERE NAME = 'Zhuohua';

SELECT * FROM TABLE_1;
图片18.png



在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”:
图片19.png

图片20.png



监控项“Oracle command_1”的返回值大于5时,仪表板会如下图显示:(显示对应触发器的名称)
ID is bigger than 5
图片21.png

图片22.png





相关文章:
Zabbix调用Python3脚本监控Linux下的Oracle(二)

CentOS8编译安装Zabbix4.4.5
Zabbix调用Python3脚本监控Linux下的MySQL

返回列表