我正在利用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%是不合理的。
答案 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
希望如果遇到这个问题,这可以帮助其他人。