nit*_*ins 5 linux monitoring performance-monitoring nagios
我们已经配置Nagios了check_loadviaNRPE插件来监控服务器负载,它会在负载高时报告,但没有选项top在那时拍摄顶级进程(如命令)的快照。
有没有nagios NRPE插件?
qua*_*nta 12
您可以使用事件处理程序来做到这一点。
首先,为您的平均负载定义添加一个事件处理程序:
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
}
Run Code Online (Sandbox Code Playgroud)
该processes_snapshot命令定义在commands.cfg:
define command{
command_name processes_snapshot
command_line $USER1$/eventhandlers/processes_snapshot.sh $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$ $HOSTADDRESS$
}
Run Code Online (Sandbox Code Playgroud)
其次,编写一个事件处理程序脚本 ( 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
Run Code Online (Sandbox Code Playgroud)
该命令在主机上processes_snapshot定义如下:nrpe.cfgxx
command[processes_snapshot]=top -cSbn 1 | tail -n +8 | sort -rn -k11 | head > /tmp/proc_snap.txt
Run Code Online (Sandbox Code Playgroud)
PS:我还没有测试过这个配置。
这是我根据@quanta 的想法直接在通知电子邮件中获取进程列表快照的方法。它可能包含特定于 Nagios 在 Debian/Ubuntu 机器上安装方式的路径:
/usr/local/sbin/check_load如果退出代码为 1 (WARNING) 或 2 (CRITICAL),则创建一个调用原始程序并附加进程快照的包装器脚本:
#!/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
}
Run Code Online (Sandbox Code Playgroud)
这会将 COLUMNS 设置为一个很大的数字,因此进程名称/命令行不会被截断为 40 个字符,以批处理模式运行 top 进行一次迭代 ( -bn 1),要求显示完整的命令行 ( -c) 和累积 CPU 时间 ( -S) ,然后|通过将其替换为<BAR>.
我发现 top 的默认排序顺序就足够了——尝试按累积 CPU 时间重新排序,就像@quanta 的回答中建议的那样将系统守护进程(如 init 或 crond)放在顶部,这并不能帮助我弄清楚哪个 CGI 脚本是负责 CPU 尖峰。同样这样我就可以保留顶部的标题。
不要忘记 chmod +x /usr/local/sbin/check_load
编辑/etc/nagios-plugins/config/load.cfg并替换check_load条目
command_line /usr/lib/nagios/plugins/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$'
Run Code Online (Sandbox Code Playgroud)
和
command_line /usr/local/sbin/check_load --warning='$ARG1$,$ARG2$,$ARG3$' --critical='$ARG4$,$ARG5$,$ARG6$'
Run Code Online (Sandbox Code Playgroud)编辑/etc/nagios3/commands.cfg并更新notify-service-by-email条目,使其在生成的电子邮件中包含 $LONGSERVICEOUTPUT$。这里贴太久了;基本上找到Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail位并将其更改为Info:\n\n$SERVICEOUTPUT$\n$LONGSERVICEOUTPUT$\n" | /usr/bin/mail.
重启 nagios: service nagios3 restart.
我还没有用 NRPE 试过这个。