使用zabbix的python脚本导致setroubleshootd高CPU使用率

时间:2018-01-10 19:25:08

标签: python-requests zabbix

我正在利用Zabbix进行自定义低级别发现,使用Python发现REST / API端点。轮询开启时,CPU利用率会通过屋顶。所有的CPU使用率都是由setroubleshootd引起的,如top:

中所示
top - 13:51:56 up 15:33,  1 user,  load average: 1.52, 1.43, 1.37
Tasks: 127 total,   3 running, 124 sleeping,   0 stopped,   0 zombie
%Cpu(s): 35.8 us,  6.7 sy,  0.0 ni, 57.3 id,  0.1 wa,  0.0 hi,  0.2 si,  0.0 st
KiB Mem :  8010508 total,  6211020 free,   397104 used,  1402384 buff/cache
KiB Swap:  1679356 total,  1679356 free,        0 used.  6852016 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
 7986 setroub+  20   0  424072 130856  11548 R  77.4  1.6   7:12.16

Zabbix调用代理并请求执行“UserParameter”,这是脚本的简写。该脚本是一个调用我的python脚本的bash文件。电话看起来像这样:

#!/usr/bin/env bash

/usr/bin/python /etc/zabbix/externalscripts/discovery.py $1 $2 $3 $4 $5

当zabbix调用脚本时,它会将唯一过滤器(如服务器ID或网卡ID)作为参数之一传递。 python脚本使用请求打开https会话,如果令牌文件存在,则利用承载令牌。如果令牌文件不存在,则创建它。

该脚本工作正常并完成它应该做的所有事情,但是重新启动是重新启动一系列问题,特别是围绕文件夹访问。大量的setroubleshootd响应导致CPU疯狂。以下是错误示例:

python: SELinux is preventing /usr/bin/python2.7 from create access on the file 7WMXFl.

文件名是随机的,每次执行都会更改。我尝试使用selinux工具添加例外,例如:

 ausearch -c 'python' --raw | audit2allow -M my-python

但由于文件名是随机的,因此错误仍然存​​在。我已经尝试卸载setroubleshootd,selinux只是重新安装它。不幸的是,我需要运行强制模式,因此降低到允许或禁用不是选项。

我尝试过更改,以便我不运行bash脚本,zabbix直接调用python脚本,或者声明shebang / usr / bin / python,但传递参数似乎不能正常工作。我得到一个错误,说明$ 1 $ 2 ...是未知的论点。

此时不知所措。它正在运行,但我真的希望降低CPU使用率,因为对于30-40个HTTPS调用,4个内核的60%是不合理的。

2 个答案:

答案 0 :(得分:0)

外部脚本必须在你的超时值内完成,听起来它太大了。您可以将其转换为zabbix_sender并通过cron进行安排。然后它只是一个有性能问题的脚本。

答案 1 :(得分:0)

我最终为此编写了一个SEModule,它允许zabbix用户对创建和管理这些文件的/ tmp文件夹进行写访问。 CPU使用率从75%降至2%。 #NailedIt

lcd e:\localpath
mget Filename0111.dat
mget Filenametwo0111.dat
mget Filenamethree0111.dat
bye

希望如果遇到这个问题,这可以帮助其他人。