1

我正在尝试编写一个本地 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(核心)上运行 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
4

2 回答 2

0

您是在尝试编写本地检查还是 check_mk 插件?这是两个完全不同的东西。你在哪里存储这个文件?

于 2019-06-18T13:38:16.940 回答
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).

事实证明,dateutil我的 python 脚本中使用的库无法通过 check_mk 导入。该库是使用 pip 管理器安装的,在运行时无法导入。

因此,我不得不使用 apt-get 而不是 pip post 安装库,本地检查脚本已成功执行并将输出发送到服务发现。检查另一台工作服务器,发现该dateutil库已使用 apt-get 安装。

https://github.com/chaoss/grimoirelab-perceval/issues/27

于 2019-08-08T18:09:54.420 回答