我们已经通过NRPE插件configuration了带有check_load Nagios来监视服务器负载,当负载很高的时候它会报告,但是当时没有select进行快照的顶层进程(如top命令)。
有没有任何nagios NRPE插件?
你可以用事件处理程序来完成 。
首先,为Load average定义添加一个事件处理程序:
define service{ use generic-service host_name xx service_description Load_Average check_command check_nrpe!check_load event_handler processes_snapshot!xx contact_groups admin-sms }
processes_snapshot命令在commands.cfg定义:
define command{ command_name processes_snapshot command_line $USER1$/eventhandlers/processes_snapshot.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$ }
其次,编写一个事件处理程序脚本( processes_snapshot.sh ):
#!/bin/bash case "$1" in OK) ;; WARNING) /usr/local/nagios/libexec/check_nrpe -H $4 -c processes_snapshot ;; UNKNOWN) ;; CRITICAL) /usr/local/nagios/libexec/check_nrpe -H $4 -c processes_snapshot ;; esac exit 0
nrpe.cfg命令在xx主机上的nrpe.cfg定义如下:
command[processes_snapshot]=top -cSbn 1 | tail -n +8 | sort -rn -k11 | head > /tmp/proc_snap.txt
PS:我没有testing过这个configuration。
基于@quanta的想法,我直接在通知电子邮件中获取stream程列表快照。 它可能包含特定于Nagios安装在Debian / Ubuntu机器上的path:
如果退出代码为1(WARNING)或2(CRITICAL),则创build一个包装脚本/usr/local/sbin/check_load来调用原始数据并附加进程快照:
#!/bin/sh /usr/lib/nagios/plugins/check_load "$@" || { rc=$? echo # http://nagios.sourceforge.net/docs/3_0/pluginapi.html # | separates long output from perfdata COLUMNS=1000 top -cSbn 1|sed -e 's/|/<BAR>/g' -e 's/ \+$//' exit $rc }
这将COLUMNS设置为一个很大的数字,所以进程名称/命令行不会被截断为40个字符,在批处理模式下运行一次迭代( -bn 1 ),要求完整的命令行( -c )和累计CPU时间( -S ),然后确保top的输出不会在第一个|处被截断 字符replace为<BAR> 。
我发现top的默认sorting顺序是足够的 – 试图通过累计CPU时间进行重新sorting,正如在@ quanta的回答中所提出的,系统守护进程像init或crond在顶部,这并不能帮助我找出哪个CGI脚本是负责CPU的秒杀。 也是这样,我得到保持顶部的标题。
不要忘记chmod +x /usr/local/sbin/check_load
编辑/etc/nagios-plugins/config/load.cfg并replacecheck_load条目
command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$'
同
command_line /usr/local/sbin/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$'
编辑/etc/nagios3/commands.cfg并更新notify-service-by-email条目,以便在生成的电子邮件中包含$ LONGSERVICEOUTPUT $。 这里粘贴太久了, 基本上findInfo:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail位并将其更改为Info:\n\n$SERVICEOUTPUT$\n$LONGSERVICEOUTPUT$\n" | /usr/bin/mail Info:\n\n$SERVICEOUTPUT$\n$LONGSERVICEOUTPUT$\n" | /usr/bin/mail 。
重新启动nagios: service nagios3 restart 。
我没有尝试过这与NRPE。
我更喜欢:
command[processes_snapshot]=top -cSbn 1 | head -14 | tail -8