- 论坛徽章:
- 0
|
本帖最后由 ontherd 于 2014-04-21 11:11 编辑
Hi,
我在Nagios软件上调用自定义插件Python监控Oracle,报错- Traceback (most recent call last):
- File "/usr/local/nagios/libexec/check_oracle_jobs.py", line 11, in <module>
- import cx_Oracle
- ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory
复制代码 但是我在nagios用户手动调用自定义插件却运行正常,- [nagios@monitor libexec]$ ./check_oracle_jobs.py 10.68.2.21 orcl 123456 orcl 4
- Critical - User:orcl job:362 is breken.|ora_broken_jobs=4;;;0
复制代码 我的系统环境变量配置,- [nagios@monitor libexec]$ more /etc/profile
- export ORACLE_HOME="/usr/local/instantclient_11_2"
- export PATH=$PATH:$ORACLE_HOME
- export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"
- export TNS_ADMIN=$ORACLE_HOME
- export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
- export SQLPATH=$ORACLE_HOME
- alias sqlplus="$ORACLE_HOME/sqlplus"
复制代码 我的Nagios里配置文件command.cfg配置如下,
- define command {
- command_name check_ora_table
- command_line $USER1$/check_oracle_table.py $HOSTADDRESS$ orcl 123456 orcl $ARG1$ $ARG2$ $ARG3$ $ARG4$
- register 1
- }
复制代码 下面是我写的python在监控Oracle数据库jobs的脚本,- #! /usr/bin/env python
- ##################################################
- #-*- conding: utf-8 -*-
- #Function: check oracle jobs broken
- #Usage: python check_oracle_jobs.py
- #Author: Ontherd
- #Company:
- #Version: 1.2
- ##################################################
- import cx_Oracle
- import sys
- import re
- OK = 0
- WARNING = 1
- CRITICAL = 2
- class InputCheck(object):
- def check_input(self):
- if len(sys.argv) != 6 :
- print "Error: the number of input parameters error."
- print "Usage: python %s ip login password oracle_sid jobs_broken_number" % sys.argv[0]
- sys.exit()
-
- class Cx_Oracle(object):
- def __init__(self, host, user, password, sid, sql, critical):
- self.host = host
- self.user = user
- self.password = password
- self.sid = sid
- self.sql = sql
- self.critical = critical
- def ConnectOracle(self):
- dsn_tns = cx_Oracle.makedsn(self.host, 1521, self.sid)
- try :
- conn = cx_Oracle.connect(self.user, self.password, dsn_tns)
- except Exception, e :
- print 'connect error: ',e
- sys.exit()
- return conn
- def check_jobs(self):
- out_list = []
- db = self.ConnectOracle()
- cursor = db.cursor()
- cmd_result = cursor.execute(self.sql)
- list = cmd_result.fetchall()
- for l in list:
- out_list.append("".join(l))
- list_length = len(out_list)
- # Show Nagios
- if list_length <= self.critical :
- print "OK - All the normal jobs."
- sys.exit(OK)
- else :
- print "Critical - %s is breken.|ora_broken_jobs=%d;;;0" % (','.join(out_list), list_length)
- sys.exit(CRITICAL)
- cursor.close()
- db.close()
- if __name__ == '__main__' :
- chkinput = InputCheck()
- chkinput.check_input()
- host = sys.argv[1]
- user = sys.argv[2]
- password = sys.argv[3]
- sid = sys.argv[4]
- critical = int(sys.argv[5])
- sql = "select 'User:'||schema_user||' '||'job:'||job from dba_jobs where broken = 'Y'"
-
- ora = Cx_Oracle(host, user, password, sid, sql, critical)
- ora.check_jobs()
复制代码 大家有没有遇到和我同样的问题,请各位大牛帮忙指点迷津。 |
|