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開啓。



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