nagios的远程nrpe运行指定脚本,重启服务,event_handler指令

网上看了,大部分都是远程处理故障,也就是远程执行命令,需要无密码登录,配置ssh的key,既然有了check_nrpe,为何还需要远程执行,那不就是脱裤子放屁吗。

例子环境如下:

监控服务器上安装了nagios和check_nrpe,ip为192.168.0.100
被监控服务器安装nrpe的客户端,ip为192.168.0.200

客户端操作,也就是192.168.0.200操作
1、建立监控脚本,我们来监控php进程是否关掉,如果挂掉,在报警前我们重启apache,脚本名为handle_php,路径为/usr/local/nagios/libexec 如下:

#!/bin/bash
case "$1" in

    OK)
        echo 'ok' >> /usr/local/nagios/var/tmp.txt
        ;;
    WARNING)
        echo 'WARNING' >> /usr/local/nagios/var/tmp.txt
        ;;
    UNKNOWN)
        echo 'unknown' >> /usr/local/nagios/var/tmp.txt
        ;;
    CRITICAL)
        case "$2" in
            SOFT)
                case "$3" in
                    3)
                        echo 'sudo /etc/rc.d/init.d/httpd restart3' >>  /usr/local/nginx/var/tmp.txt
                        ;;
                    2)
                        echo 'sudo /etc/rc.d/init.d/httpd restart2' >> /usr/local/nagios/var/tmp.txt
                        ;;
                    1)
                        echo 'sudo /etc/rc.d/init.d/httpd restart1' >> /usr/local/nagios/var/tmp.txt
                        ;;
                    *)
                        echo 'critical*' >> /usr/local/nagios/var/tmp.txt
                esac
                ;;
            HARD)
                #这里的sudo 以及重启的命令,仅仅打印,只是为了说明可以执行,方便测试
                echo 'sudo /etc/rc.d/init.d/httpd restart' >> /usr/local/nagios/var/tmp.txt
               ;;
            *)
            echo 'aaaaaa' >> /usr/local/nagios/var/tmp.txt
            ;;
        esac
        ;;
    *)
        #打印参数,用于测试
        echo $1,$2,$3 >> /usr/local/nagios/var/tmp.txt
       ;;
    esac
exit 0

2、测试,看看脚本是否能执行
#/usr/local/nagios/libexec/handle_php CRITICAL soft 3
运行完毕后,在/usr/local/nagios/var/tmp.txt 中出现critical*,说明脚本运行没问题

3、编辑/usr/local/nagios/etc/nrpe.cfg文件,添加内容如下:
command[handle_php]=sudo /usr/local/nagios/libexec/handle_php $ARG1$ $ARG2$ $ARG3$
解释一下,$ARG1$ $ARG2$ $ARG3$三个参数,用空格分开
配置文件中   dont_blame_nrpe=1 ,默认为0,大概的意思是“

这个选项决定了NRPE守护进程是否允许客户端指定执行命令的参数。 这个选项需要在安装nrpe的时候开启——enable-command-args参数,否则不能用,***启用此选项存在安全风险! *** 
上面红字重要,否则,客户端脚本执行不了
重启nrpe,
killall nrpe
/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

测试,通过在服务器上运行
/home/system/nagios/libexec/check_nrpe -H 192.168.0.200 -c handle_php -a CRITICAL SOFT 3
客户端查看/usr/local/nginx/var/tmp.txt的内容,有打印信息,客户端配置成功。

4、配置服务器端,配置主机监控文件,如下:
define service{
      use                                   hosta-service                                   ; Name of service template to use
      host_name                     a-192.168.0.200
      service_description      HTTP
      check_command          check_nrpe!check_http
      event_handler              check_nrpe!handle_php -a $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$
}

5、配置完毕,测试
重启systemctl restart nagios

经过以上配置,当触发错误信息三次的时候,发报警信息前,可以远程执行恢复命令
欢迎留言!

监控系统Nagios状态类型 SOFT和HARD

搞了这么多久的nagios,居然没用过handle_event事件,正好有事情需要,就学习一下2021.12.27

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

监控系统Nagios系列(二) 架构中提到了如何定义对象的状态,对象状态根据是插件检查结果综合得到的。

对象状态如果发生了变化,Nagios会调用通知命令,发送警报。为了避免错误的警报,Nagios允许用户定义最大尝试次数(max_check_attempts),只有状态连续变化超过了最大尝试次数,才算是的状态变化。Nagios通过定义两种状态变化类型:softhard,分别表示在max_check_attempts内的状态变化,和超过了max_check_attempts的状态变化。这种做法能够解决的一个典型问题就是状态处于抖动不稳定的对象,通过max_check_attempts,避免重复的警报。

1. soft类型

soft类型状态变化产生的条件为:

  • 检查Service或Host状态的插件返回结果为non-OK或non-UP,且检查次数还未达到max_check_attempts,那么这个状态变化是soft类型,是一个soft error。
  • 一个Service或Host从soft error恢复(插件检查返回结果为OK或UP),那么这个状态变化是soft类型,是一个soft recovery。

当soft状态变化发生之后,Nagios对应的处理有:

  • 记录日志
  • 调用外部注册的事件处理回调命令。开发者可以注册事件处理回调命令,尝试修复soft error,在soft error变为hard error之前。

2. hard类型

hard类型状态变化产生条件为:

  • 检查Service或Host状态的插件返回结果为non-OK或non-UP,且检查次数已经达到max_check_attempts,那么这个状态变化是hard类型,是一个hard error。
  • 一个Service或Host的状态由一个hard类型变化为另外一个hard类型,这次变化也是hard类型。如从Warning变为Critical。
  • 一个Service的检查结果为non-OK状态,且与其关联的Host的状态是DOWN或UNREACHABLE,那么Service的状态变化是hard类型,是一个hard error。
  • 一个Service或Host从hard error恢复,那么这个状态变化是hard类型,是一个hard recovery。
  • Service或Host的状态检查类型为passive_check(由外部注入状态),且全局配置文件(nagios.cfg)中的配置项“ passive_host_checks_are_soft”为0,那么passive_check的检查结果导致的状态变化,都是hard类型。

当hard状态变化发生之后,Nagios对应的处理有:

  • 记录日志
  • 调用外部注册的事件处理回调命令。
  • 通知联系人。

PHP的PDF扩展库TCPDF将中文字体设置为内嵌字体的方法

1. 下载要设置的字体,如名为simfang.ttf,放在./vendor/tecnickcom/tcpdf/tools目录中

2.在tools目录中按住shift,点击鼠标右键,点击“在此处打开命令行窗口”,执行语句

1php ./tcpdf_addfont.php -b -t simfang -i simfang.ttf

 便会在./vendor/tecnickcom/tcpdf/fonts/文件夹下面会生成simfang.ctg.z , simfang.php和simfang.z几个文件

3.在调用TCPDF的方法中设置仿宋字体

$pdf = new \Tcpdf(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
 // 设置字体
$pdf->SetFont('simfang', '', 14, '', false);

php的unserialize()返回后的结果分析

php的unserialize()返回后的结果

a:4:{
s:13:”module_rename”;a:1:{i:80;s:6:”档案”;}
s:8:”opentype”;a:1:{i:80;s:3:”tab”;}
s:10:”show_field”;a:1:{i:80;s:9:”from_units”;}
s:11:”union_field”;a:1:{i:80;s:10:”from_units”;}
}

a:4中的a表示4个数组
s:13:”module_rename”;a:1:{i:80;s:6:”档案”;}
s表示字符串,长度13,module_rename是13个字符,因为是数组,所以这个是键值

a:1:{i:80;s:6:”档案”;}是value

php的多维数组排序,还是给出官方的例子,加深记忆

示例 #3 对数据库结果进行排序

本例中 data 数组中的每个单元表示一个表中的一行。这是典型的数据库记录的数据集合。

例子中的数据如下:

volume | edition
-------+--------
    67 |       2
    86 |       1
    85 |       6
    98 |       2
    86 |       6
    67 |       7

数据全都存放在名为 data 的数组中。这通常是通过循环从数据库取得的结果,例如 mysql_fetch_assoc()<?php
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);
?>

本例中将把 volume 降序排列,把 edition 升序排列。

现在有了包含有行的数组,但是 array_multisort() 需要一个包含列的数组,因此用以下代码来取得列,然后排序。<?php
// 取得列的列表
foreach ($data as $key => $row) {
    $volume[$key]  = $row['volume'];
    $edition[$key] = $row['edition'];
}


// 将数据根据 volume 降序排列,根据 edition 升序排列
// 把 $data 作为最后一个参数,以通用键排序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
?>

数据集合现在排好序了,结果如下:

volume | edition
-------+--------
    98 |       2
    86 |       1
    86 |       6
    85 |       6
    67 |       2
    67 |       7

inotify的参数配置

/proc/sys/fs/inotify/max_user_watches is the current max number of watches per user.

Historically, the kernel has defaulted this to 8192, but given that many Linux distros customize their kernel builds quite a bit, this may not be true on every Linux system. A recent kernel change [1] dynamically selects a default max_user_watches value in the range [8192, 1048576] based on how much RAM the system has. (5.11 is the first kernel release containing this change.)

AFAICT, root can change max_user_watches to any value that’s 2147483647 (231-1) or under, as long as you’re confident you have enough RAM to support that number of watches.