Oracle数据库添加到Zabbix监控

使用zabbix监控oracle数据库

一、概述

本文将给大家介绍如何利用zabbix+python监控oracle数据库。

二、环境介绍

  1. 监控机 CentOS Linux release 7.6.1810 + Zabbix server Zabbix 4.4.10 + Python 2.7.5 (操作系统自带) + Oracle Client 11.2.0.4 (x86_64)。
  2. 被监控机 Oracle 11.2.0.4。

三、选择监控方式

Zabbix agent

在被监控机上面安装zabbix agent,zabbix agent将被监控机采集到的数据发送给zabbix server。这种方式最常用,一般用来采集服务器的cpu、内存等信息。

External check。
本文介绍的就是使用external check方式去监控oracle数据库。

在zabbix server上面运行查询脚本,直接查询被监控机上的数据。此种方式在被监控机上面不需要做任何部署,所有查询全部从zabbix server上面发出,所以对zabbix server的性能要求较高,官方不推荐大量使用该方式。对于少量的oracle数据库服务器,可以采用该方式。

四、规划监控项

监控数据库的目的是为了保障数据库稳定运行,一旦出现故障,dba能够及时发现并介入处理,监控项分为以下两类

  1. 数据库空间不足或数据库发生故障,DBA需要立即处理。

监控项包括表空间、用户状态、实例状态、锁、大量等待事件、闪回区使用率等。此类监控项需要给其设置触发器,一旦出现异常,及时告警。

  1. 数据库运行状态的一些统计信息,为DBA定位数据库性能问题发生的时间和类别提供参考。

监控项包括常见的等待事件发生的次数,命中率、硬解析比例等。

下面表格中列出附件中模板的监控项


image.png

image.png

image.png

五、安装。以下所有操作均在zabbix服务器上面执行

1、zabbix server已经安装,版本为4.4.10。
2、安装oracle客户端。
2.1、下载oracle客户端

Oracle客户端下载地址:https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html
下载下面三个安装包并上传:

[root@web01 ~]# ll
-rw-r--r--. 1 root root 59865008 Jun 28 11:06 oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
-rw-r--r--. 1 root root   610222 Jun 28 10:36 oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
-rw-r--r--. 1 root root   828333 Jun 28 10:25 oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
2.2、使用root安装oracle客户端:
[root@zabbix ~]#rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:oracle-instantclient11.2-basic-11################################# [100%]
[root@zabbix ~]#rpm -ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:oracle-instantclient11.2-devel-11################################# [100%]
[root@zabbix ~]#rpm -ivh oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:oracle-instantclient11.2-sqlplus-################################# [100%]
2.3、配置环境变量:

在profile中添加下面3条环境变量

[root@zabbix ~]#vim  /etc/profile      
export ORACLE_HOME=/usr/lib/oracle/11.2/client64

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

export PATH=$PATH:$ORACLE_HOME/bin
[root@zabbix ~]#source /etc/profile
2.4、添加动态库配置文件:
[root@zabbix ~]#vim  /etc/ld.so.conf.d/oracle.conf
/usr/lib/oracle/11.2/client64/lib
[root@zabbix ~]#ldconfig
2.5、连接oracle进行测试:
[root@zabbix ~]#sqlplus system/123456@192.168.99.237:1521/orcl

SQL*Plus: Release 11.2.0.4.0 Production on Wed Jun 30 15:57:48 2021

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>            
出现上面提示证明oracle client安装成功。
3、安装python相关包。
3.1、安装cx_Oracle(python连接oracle的包)
注意:我们是python2.7.5所以这里找cx_Oracle-5.1.2-11g-py27-1.x86_64.rpm包进行下载,在这里我是直接用windows下载然后上传至linux服务器。

下载地址:https://sourceforge.net/projects/cx-oracle/files/5.1.2/cx_Oracle-5.1.2-11g-py27-1.x86_64.rpm/download

[root@zabbix ~]#ll
-rw-r--r--  1 root  root    275168 Jun 28 15:52 cx_Oracle-5.1.2-11g-py27-1.x86_64.rpm
-rw-r--r--  1 root  root  59865008 Jun 28 11:06 oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
-rw-r--r--  1 root  root    610222 Jun 28 10:36 oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
-rw-r--r--  1 root  root    828333 Jun 28 10:25 oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
[root@zabbix ~]#rpm -ivh cx_Oracle-5.1.2-11g-py27-1.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:cx_Oracle-5.1.2-1                ################################# [100%]
3.2、安装argparse

下载地址:https://bootstrap.pypa.io/pip/2.7/get-pip.py

[root@zabbix ~]#wget https://bootstrap.pypa.io/pip/2.7/get-pip.py  --no-check-certificate
[root@zabbix ~]#ll
-rw-r--r--  1 root  root    275168 Jun 28 15:52 cx_Oracle-5.1.2-11g-py27-1.x86_64.rpm
-rw-r--r--  1 root  root   1908226 Feb 23 02:00 get-pip.py
-rw-r--r--  1 root  root  59865008 Jun 28 11:06 oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
-rw-r--r--  1 root  root    610222 Jun 28 10:36 oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
-rw-r--r--  1 root  root    828333 Jun 28 10:25 oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
[root@zabbix ~]#python get-pip.py
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Collecting pip<21.0
  Downloading pip-20.3.4-py2.py3-none-any.whl (1.5 MB)
     |████████████████████████████████| 1.5 MB 61 kB/s 
Collecting wheel
  Downloading wheel-0.36.2-py2.py3-none-any.whl (35 kB)
Installing collected packages: pip, wheel
  Attempting uninstall: pip
    Found existing installation: pip 8.1.2
    Uninstalling pip-8.1.2:
      Successfully uninstalled pip-8.1.2
Successfully installed pip-20.3.4 wheel-0.36.2
[root@zabbix ~]#pip install argparse
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Collecting argparse
  Downloading argparse-1.4.0-py2.py3-none-any.whl (23 kB)
Installing collected packages: argparse
Successfully installed argparse-1.4.0
4、上传python脚本:

附件下载地址:https://github.com/YangBaohust/zabbix_templates
pyora.py,Pyora_ExternalCheck_11G.xml地址放在github上

4.1、将附件中的pyora.py脚本放入/usr/lib/zabbix/externalscripts/目录下,然后赋权限,让zabbix用户能够执行该脚本。
[root@zabbix /usr/lib/zabbix/externalscripts]#ll
total 20
-rw-r--r-- 1 root root 18470 Jun 30 11:17 pyora.py
[root@zabbix /usr/lib/zabbix/externalscripts]#chmod 755 /usr/lib/zabbix/externalscripts/pyora.py
[root@zabbix /usr/lib/zabbix/externalscripts]#ll
total 20
-rwxr-xr-x 1 root root 18470 Jun 30 11:17 pyora.py
4.2、将先在被监控机的oracle数据库中创建监控用户,用户名和密码可以自己随意指定
create user zabbix identified by zabbix;
grant connect,select any dictionary to zabbix;
4.3、测试脚本

python pyora.py --username zabbix --password zabbix --address 10.30.10.32 --port 1521 --database office show_tablespaces
上面测试脚本的参数说明:
username: 用户名
password: 密码
address: 被监控机ip地址
port: 端口号
database: oracle service name
有返回结果表示脚本能正常运行

[root@zabbix /usr/lib/zabbix/externalscripts]#python pyora.py --username zabbix --password zabbix --address 192.168.98.157 --port 1521 --database pwspdb show_users
{"data": [{"{#DBUSER}": "SYSTEM"}, {"{#DBUSER}": "SYS"}, {"{#DBUSER}": "MGMT_VIEW"}, {"{#DBUSER}": "PWSP"}, {"{#DBUSER}": "ZABBIX"}, {"{#DBUSER}": "PWS_TEST"}, {"{#DBUSER}": "SAPMES"}, {"{#DBUSER}": "DBADMIN"}, {"{#DBUSER}": "SYSMAN"}, {"{#DBUSER}": "DBSNMP"}, {"{#DBUSER}": "PWDS"}, {"{#DBUSER}": "OAPWS"}, {"{#DBUSER}": "TESTEXPORT"}]}
5、Zabbix监控中上传template文件:
5.1、将附件中的Pyora_ExternalCheck_11G.xml模板导入到zabbix server中:

在zabbix页面中,依次点击Configuration – Templates – Import – 选择文件 – Import,即完成了导入


image.png
5.2、添加机器,并链接到模板:

在zabbix页面中,依次点击Configuration – Hosts – Create host – Hostname (输入ip地址) – groups (选Linux servers) – Templates (选择Pyora_ExternalCheck_11G) – 点击上面的Add – Macros – 点击上面的Add添加宏,全部添加完毕后,点击下面的Add,主机即添加完毕


image.png

image.png

image.png
5.3、由于原模板自动发现用户时有一处问题,所以还要进行修改:
image.png

image.png
5.4、查看实时数据发现数据正常,表明oracle监控成功:
image.png

六、安装过程中遇到的错误,导致python脚本无法拉取到oracle数据。

拉取数据错误:

[root@web01 /usr/lib/zabbix/externalscripts]# python /usr/lib/zabbix/externalscripts/pyora.py --username zabbix --password zabbix --address 192.168.99.237 --port 1521 --database orcl show_tablespaces
Traceback (most recent call last):
  File "/usr/lib/zabbix/externalscripts/pyora.py", line 9, in <module>
    import cx_Oracle
ImportError: /usr/lib/python2.7/site-packages/cx_Oracle.so: undefined symbol: PyUnicodeUCS2_AsEncodedString

6.1、检查了很久,发现我安装的cx_Oracle版本为cx_Oracle-5.1.1-11g-py27-1.x86_64.rpm,导致python和oracle无法通讯。

[root@web01 ~]# ll
-rw-r--r--. 1 root root   258275 Nov 12  2020 cx_Oracle-5.1.1-11g-py27-1.x86_64.rpm

6.2、卸载安装的cx_Oracle-5.1.1-1.x86_64

[root@web01 ~]# rpm -qa | grep cx_Oracle
cx_Oracle-5.1.1-1.x86_64
[root@web01 ~]# yum remove  cx_Oracle-5.1.1-1.x86_64

6.3、下载cx_Oracle-5.1.2-11g-py27-1.x86_64.rpm,并进行安装:

[root@web01 ~]# ls
cx_Oracle-5.1.1-11g-py27-1.x86_64.rpm
cx_Oracle-5.1.2-11g-py27-1.x86_64.rpm
[root@web01 ~]# rpm -ivh cx_Oracle-5.1.2-11g-py27-1.x86_64.rpm 
Preparing...                          ################################# [100%]
Updating / installing...
   1:cx_Oracle-5.1.2-1                ################################# [100%]
[root@web01 ~]# wget https://bootstrap.pypa.io/pip/2.7/get-pip.py --no-check-certificate
--2021-06-28 15:58:07--  https://bootstrap.pypa.io/pip/2.7/get-pip.py
Resolving bootstrap.pypa.io (bootstrap.pypa.io)... 151.101.72.175, 2a04:4e42:11::175
Connecting to bootstrap.pypa.io (bootstrap.pypa.io)|151.101.72.175|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1908226 (1.8M) [text/x-python]
Saving to: ‘get-pip.py.1’

47% [=====================================>                                            ] 902,385     10.4KB/s  eta 95s    



^Z
[2]+  Stopped                 wget https://bootstrap.pypa.io/pip/2.7/get-pip.py --no-check-certificate

6.4、重新安装argparse

[root@web01 ~]# python get-pip.py
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Collecting pip<21.0
  Using cached pip-20.3.4-py2.py3-none-any.whl (1.5 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 20.3.4
    Uninstalling pip-20.3.4:
      Successfully uninstalled pip-20.3.4
Successfully installed pip-20.3.4
[root@web01 ~]# pip install argparse
DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained. pip 21.0 will drop support for Python 2.7 in January 2021. More details about Python 2 support in pip can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support pip 21.0 will remove support for this functionality.
Requirement already satisfied: argparse in /usr/lib/python2.7/site-packages (1.4.0)

6.5、用python重新拉取数据验证后取值正常:

[root@web01 /usr/lib/zabbix/externalscripts]# python pyora.py --username zabbix --password zabbix --address 192.168.99.237 --port 1521 --database orcl show_tablespaces{"data": [{"{#TABLESPACE}": "SYSTEM"}, {"{#TABLESPACE}": "SYSAUX"}, {"{#TABLESPACE}": "UNDOTBS1"}, {"{#TABLESPACE}": "USERS"}, {"{#TABLESPACE}": "CAT"}]}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容