Nagios 插件用于在负载较高时拍摄进程快照

Nagios 插件用于在负载较高时拍摄进程快照

我们已经配置了Nagiosviacheck_load插件NRPE来监控服务器负载,它会在负载过高时进行报告,但是没有选项可以对top当时的顶级进程进行快照(如命令)。

有没有什么nagios NRPE插件可以实现这个功能?

答案1

你可以这样做事件处理器

首先,为您的平均负载定义添加一个事件处理程序:

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

该命令在主机上processes_snapshot定义如下:nrpe.cfgxx

command[processes_snapshot]=top -cSbn 1 | tail -n +8 | sort -rn -k11 | head > /tmp/proc_snap.txt

PS:我还没有测试过这个配置。

答案2

以下是我获取进程列表快照的步骤直接在通知邮件中,基于 @quanta 的想法。它可能包含特定于 Nagios 在 Debian/Ubuntu 机器上安装方式的路径:

  1. 创建了一个包装脚本/usr/local/sbin/check_load,如果退出代码为 1(警告)或 2(严重),则调用原始脚本并附加进程快照:

    #!/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 个字符,以批处理模式运行 top 进行一次迭代(-bn 1),要求显示完整的命令行(-c)和累积 CPU 时间( ),然后通过将其替换为来-S确保 top 的输出不会在第一个字符处被截断。|<BAR>

    我发现 top 的默认排序顺序已经足够了——尝试按累计 CPU 时间重新排序(如 @quanta 的回答中所建议的那样)会将 init 或 crond 等系统守护进程放在顶部,这无助于我找出哪个 CGI 脚本导致了 CPU 峰值。而且这样我就可以保留 top 的标题。

    别忘了chmod +x /usr/local/sbin/check_load

  2. 编辑/etc/nagios-plugins/config/load.cfg并替换检查加载入口

    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$'
    
  3. 编辑/etc/nagios3/commands.cfg并更新通过电子邮件通知服务条目,以便它在生成的电子邮件中包含 $LONGSERVICEOUTPUT$。它太长了,无法粘贴到这里;基本上找到该Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail位并将其更改为Info:\n\n$SERVICEOUTPUT$\n$LONGSERVICEOUTPUT$\n" | /usr/bin/mail

  4. 重新启动 nagios service nagios3 restart:。

我还没有尝试过用 NRPE 来实现这个功能。

答案3

我更喜欢:

command[processes_snapshot]=top -cSbn 1 | head -14 | tail -8

相关内容