nagios event handler配置

引言

有这样一个需求:用nagios监控mysql是否启动,如果没有启动则启动mysql

Nagios Event Handler:

要完成上面的这个需求就需要用到nagios的Event handler即事件处理机制,事件处理就是让Nagios在发现问题之后主动的尝试进行一些问题处理而不立刻通知联系人。
在介绍如何使用Nagios的事件处理之前先说明一下SOFT HARD故障。

在Nagios有两种故障一种是SOFT 一种是HARD 文档是这么说的Tye type of state the service or host is in。 我理解成为故障:
SOFT故障定义如下:
    一个主机处于非UP状态或者一个服务处于非OK状态的时候,重新检查的次数还没有达到max_check_attempts,这中故障叫做SOFT ERROR
HARD故障定义如下:
 因此与SOFT故障相对,HARD就是重新检查的次数已经达到max_check_attempts
SOFT与HARD还有更多的发生条件,具体请参考Nagios手册。本文只需要知道以上两点就可以。

那么什么时候会出发Nagios的事件处理呢:
 1. 发生一个SOFT故障状态
 2. 初始进入一个HARD故障状态
 3. 从一个SOFT或者HARD故障状态恢复

Nagios共有四种事件处理:
Global host event handler
Global service event handler
Host-specific event handlers
Service-specific event handlers
本文仅使用最后一种作为实验。

MySQL检查以及重启脚本

首先我们写一个MySQL检查以及重启脚本
MySQL检查脚本check_mysql
#!/bin/sh

# ########################################################################
# This program is used to check whether mysqld run on this machine
# ########################################################################

# ########################################################################
# Redirect STDERR to STDOUT; Nagios doesn't handle STDERR.
# ########################################################################
exec 2>&1

# ########################################################################
# Set up constants, etc.
# ########################################################################
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
STATE_DEPENDENT=4

DBSCALE=mysqld

# ########################################################################
# Run the program.
# ########################################################################
main() {

   pidof $DBSCALE > /dev/null
   RETVAL=$?
   if [ $RETVAL -eq 0 ]
   then
      NOTE="OK mysqld is running on this host"
   else
      NOTE="CRITICAL mysqld is not running on this host"
   fi

   echo $NOTE
}

# ########################################################################
# Determine whether this program is being executed directly, or sourced/included
# from another file.
# ########################################################################
is_not_sourced() {
   [ "${0##*/}" = "check_mysqld" ] || [ "${0##*/}" = "bash" -a "$_" = "$0" ]
}

# ########################################################################
# Execute the program if it was not included from another file.
# This makes it possible to include without executing, and thus test.
# ########################################################################
if is_not_sourced; then
   OUTPUT=$(main "$@")
   EXITSTATUS=$STATE_UNKNOWN
   case "${OUTPUT}" in
      UNK*)  EXITSTATUS=$STATE_UNKNOWN;  ;;
      OK*)   EXITSTATUS=$STATE_OK;       ;;
      WARN*) EXITSTATUS=$STATE_WARNING;  ;;
      CRIT*) EXITSTATUS=$STATE_CRITICAL; ;;
   esac
   echo "${OUTPUT}"
   exit $EXITSTATUS
fi

# ############################################################################
# Documentation
# ############################################################################
: <<'DOCUMENTATION'

check_mysqld - Return OK if mysqld is running on this machine

  Usage: check_mysqld

DOCUMENTATION


MySQL重启脚本start_mysql
 #!/bin/sh                                                                                                                                         
exec 2>&1
/usr/local/mysql/bin/mysqld_safe --user=mysql>/dev/null

这里需要给nagios一个mysqld_safe的权限,修改/etc/sudoers加入
nagios          ALL=(ALL) NOPASSWD: /usr/local/mysql/bin/mysqld_safe

准备好两个脚本后,将两个脚本放在/uar/local/nagios/libexec目录下

配置

在主监控机上配置服务:check_mysql
define service{
  use                     local-service
    host_name               SmartMonitor-Linux
    service_description     mysqld_check
    check_command           check_nrpe!check_mysqld
   event_handler_enabled    1
   event_handler            check_nrpe!start_mysqld
}

同时将主配置文件的event_handler_enabled设置为1


然后配置被监控机的nrpe.cfg
command[check_mysqld]=/usr/local/nagios/libexec/check_mysql
command[start_mysqld]=/usr/bin/sudo /usr/local/nagios/libexec/start_mysql

至此大功告成!

启动Nagios,首先手动开启MySQL,然后kill掉MySQL,当下一下检查check_mysql服务时,会自动将MySQL开启。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章