ontherd 发表于 2014-04-21 11:06

nagios --自定义python插件cx_Oracle监控Oracle问题

本帖最后由 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用户手动调用自定义插件却运行正常,$ ./check_oracle_jobs.py 10.68.2.21 orcl 123456 orcl 4
Critical - User:orcl job:362 is breken.|ora_broken_jobs=4;;;0我的系统环境变量配置,$ 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
                        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
                iflist_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
        user = sys.argv
        password = sys.argv
        sid = sys.argv
        critical = int(sys.argv)

        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()
大家有没有遇到和我同样的问题,请各位大牛帮忙指点迷津。

timespace 发表于 2014-04-21 11:32

nagios用户,在shell手动可以,自动是用cron?看上去是dll没找到,可能是环境变量的问题。
回复 1# ontherd


   

ontherd 发表于 2014-04-21 12:51

多谢大家关注,
自测出结果来了。

运行脚本包libclntsh.so.11.1这个动态链接库找不到。
动态连接库默认读取这个/etc/ld.so.conf文件,即默认/lib /usr/lib文件夹下的文件。
而我的Oracle简易客户端是安装在/usr/local/instantclient_11_2这个路径下。

所以我的操作步骤:
]# vi /etc/ld.so.conf 追加内容
/usr/local/instantclient_11_2
]# ldconfig
]# ldconfig -p | grep 'libclntsh.so.11.1' 测试是否能查询到,如果能查询到就OK了。

页: [1]
查看完整版本: nagios --自定义python插件cx_Oracle监控Oracle问题