監控軟件 Nagios 事件處理

 

Nagios事件處理
咱們能夠使用事件處理來在任何人收到通知以前由Nagios來作一些前期故障修復。
事件處理會在下面狀況觸發:
1).主機或服務處於一個軟態故障狀態時
2).主機或服務初始進入一個硬態故障時
3).主機或服務從軟態或硬態的故障狀態中初始恢復時
經過在主配置文件(nagios.cfg)中設置enable_event_handlers=1來打開全局事件處理,特定主機的和服務的事件處理可用主 機和服務對象裏的event_handler_enabled域來開關。若是全局的enable_event_handlers域是關閉的,那麼特定主機 的和服務的事件處理也不會運行。
事件處理命令能夠用shell或是perl腳本,腳本中應該處理如下宏:
對服務的:$SERVICESTATE$、$SERVICESTATETYPE$和$SERVICEATTEMPT$;
對主機的:$HOSTSTATE$、$HOSTSTATETYPE$和$HOSTATTEMPT$。
腳本須檢測這些做爲命令行參數傳入的值,並採起必要動做來處理這些值。
事件處理命令一般是與運行於本機上的Nagios程序的權限是相同的(下面例子中Nagios服務是以nagios用戶運行的)。這可能會有問題,若是你 想寫成一個用於系統服務重啓的命令,它須要有root權限才能執行一系列命令與任務。你或許會嘗使用sudo命令來實現它。
本例經過Nagios檢測遠程機器上的MySQL服務,當服務出現問題時經過Nagios的事件處理邏輯來重啓遠程機器上的MySQL服務。
1.配置在Nagios服務器(192.168.0.200)上無密碼登陸遠程機器(MySQL服務運行在上面-192.168.0.210)
[root@nagios ~]# su - nagios
[nagios@nagios ~]$ ssh-keygen -t rsa
# 下面一直回車,不要設置密碼
Generating public/private rsa key pair.
Enter file in which to save the key (/home/nagios/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/nagios/.ssh/id_rsa.
Your public key has been saved in /home/nagios/.ssh/id_rsa.pub.
The key fingerprint is:
d2:82:61:12:53:f9:53:75:77:8d:32:c0:ca:c8:20:60  nagios@nagios.itech.com
# 將生成的密鑰拷貝到要遠程登陸的機器上
[nagios@nagios ~]$ scp .ssh/id_rsa.pub 192.168.0.210:/home/nagios/
nagios@192.168.0.210's password:
id_rsa.pub  100%  233  0.2KB/s  00:00
# 在要遠程登陸的機器上配置公鑰
[nagios@nagios ~]$ ssh  nagios@192.168.0.210
nagios@192.168.0.210's password:
Last login: Sat Nov 29 22:30:55 2008 from 192.168.0.200
[nagios@nagios1 ~]$ cat id_rsa.pub >> .ssh/authorized_keys
[nagios@nagios1 ~]$ chmod 600 .ssh/authorized_keys
[nagios@nagios1 ~]$ exit
logout
Connection to 192.168.0.210 closed.
# 測試無密碼登陸
[nagios@nagios ~]$ ssh  nagios@192.168.0.210
Last login: Sat Nov 29 22:35:27 2008 from 192.168.0.200
2.在遠程機器上配置sudo
使nagios用戶能夠以root身份運行/usr/local/nagios/libexec/eventhandlers/restart-mysql腳本
[root@MySQL ~]# visudo
nagios  ALL=(root) NOPASSWD:/usr/local/nagios/libexec/eventhandlers/restart-mysql
3.在遠程機器上編寫MySQL重啓腳本
[root@MySQL ~]# vi /usr/local/nagios/libexec/eventhandlers/restart-mysql
#!/bin/sh
#
# Event handler script for restarting the MySQL server on the remote machine
#
# Note: This script will only restart the MySQL server if the service is
retried 2 times (in a "soft" state) or if the web service somehow
manages to fall into a "hard" error state.
#
#
# What state is the MySQL service in?
case "$1" in
OK)
  ;;
WARNING)
  ;;
UNKNOWN)
  ;;
CRITICAL)
  # Is this a "soft" or a "hard" state?
  case "$2" in
  SOFT)
  # What check attempt are we on?  We don't want to restart the MySQL server on the first
  # check, because it may just be a fluke!
  case "$3" in
  2)
  echo -n "Restarting MySQL service..."
  /sbin/service mysqld restart
  ;;
  esac
  ;;
  HARD)
  echo -n "Restarting  MySQL service..."
  /sbin/service mysqld restart
  ;;
  esac
  ;;
esac
exit 0
上面的腳本只會在MySQL處於軟狀態,且第二次檢查出現故障時或者進入硬狀態時重啓MySQL。
4.配置Nagios服務器上的配置文件
[root@nagios ~]# cd /usr/local/nagios/etc/
# 檢查全局事件處理是否打開
[root@nagios etc]# vi nagios.cfg
enable_event_handlers=1
# 在命令配置文件中定義重啓MySQL的命令
[root@nagios etc]# vi objects/commands.cfg
# restart the service on a remote server
define command{
  command_name restart-mysql
  command_line /usr/bin/ssh  nagios@$HOSTADDRESS$ "sudo /usr/local/nagios/libexec/eventhandlers/restart-mysql $SERVICESTATE$ $SERVICESTATETYPE$ $SERVICEATTEMPT$"
  }
 
# 配置主機監控文件
[root@nagios etc]# vi servers/mysql.cfg
# 省略主機定義和其餘服務定義
define service{
  use  generic-service  ; Name of service template to use
  host_name  MySQL
  service_description  MySQL
  check_command  check_nrpe!check_mysql
  notifications_enabled  1
  event_handler_enabled  1
  event_handler  restart-mysql
  }
這個腳本理論上在服務轉入硬態故障以前能夠重啓MySQL服務以修復故障,這裏包含了首次重啓沒有成功的狀況。須注意的是事件處理將只是第一次進入硬態緊急狀態時纔會被觸發,這將阻止Nagios在服務一直處於硬態故障狀態時反覆地重啓MySQL服務。
相關文章
相關標籤/搜索