我正在尝试编写本地python检查,该检查将XML请求发送到WSDL服务,并以XML形式获取响应。该脚本在服务器(Ubuntu 18.04.2 LTS服务器)上工作正常,并打印我想要的结果。但是check_mk(安装在另一台服务器上)不能完全读取此输出。
我要运行脚本的服务器在Ubuntu 18.04.2 LTS上运行Python 2.7.15rc1,而check_mk服务器在CentOS Linux 7(Core)上运行Python 2.7.5。另外,我注意到相同的脚本在check_mk服务器上的工作方式与我期望的不同。我应该更改try-except块以使脚本在Check_MK服务器上工作。
#!/usr/bin/python
import requests, base64, re
xml_file = 'request.xml'
hdr = {'Content-Type' : 'text/xml',
'Authorization' : 'Basic somestring')
}
with open(xml_file) as xml:
req = requests.post('http://192.168.39.17:8080/GatewayWebservicesBean?wsdl', data=xml, headers=hdr)
scode = req.status_code
try:
resp = re.search(r'<message>(.*?)</message>', req.content).group(1)
except AttributeError:
print '2 gw_check c=1;0;1;0 Cannot Access to Gateway! Status Code: %s' %scode #Check_MK doesn't read this output
else:
if resp == 'Access':
print '0 eagw_check c=0;0;1;0 OK - Gateway works well'
else:
print '2 eagw_check c=1;0;1;0 Please check internal system! Respond from internal system: %s' %resp
答案 0 :(得分:0)
您是否要编写本地支票或check_mk插件?那是两个完全不同的东西。您将文件存储在哪里?
答案 1 :(得分:0)
我的python脚本有一个类似的问题,该脚本作为本地检查添加到/usr/lib/check_mk_agent/local/
目录中。此本地脚本已在一台服务器上成功执行,但在另一台服务器上失败。在服务器中手动调用check_mk_agent时,成功执行了脚本。但是当由check_mk调用时,输出未发送到服务发现。因此,我将python脚本包装在bash脚本中,并重定向了要输出的错误,如下所示:
output=$(python /usr/lib/check_mk_agent/local/yuge.py 2>&1)
。
结果证明,check_mk无法导入我的python脚本中使用的dateutil
库。该库是使用pip Manager安装的,无法在运行时导入。
因此,我不得不使用apt-get而不是pip post安装库,该库成功执行了本地检查脚本并将输出发送到服务发现。检查其他工作服务器,发现dateutil
库已使用apt-get安装。