nagios詳細配置

   本文是參考衆多nagios高手文檔+nagios中文手冊+個人理解加工整理的,個人水平有限難免有不對的地方,請大家能夠諒解,也請大家及時批評指出,在此先謝謝大家了!
   本文狀態:不斷修改添加中,大家有不理解的地方或者有關於nagios的各方面需求請留言,我會盡自己能力幫助大家,希望我們在開源的世界裏互相學習,共同提高。
一.簡介
    nagiso是一個非常靈活的監控系統,可以監控常見的各種服務以及服務器的運行狀態,並在監測到服務器發生故障的情況下,使用各種不同的方式通知維護人員發生了何種故障。目前nagios支持如下幾種報警方式:郵件、MSN、QQ、短信、飛信。
    nagios只提供了一個監控平臺,實際上nagios本身並不提供任何工具來對服務器進行報警,也不提供發送報警信息的代碼,所有這些功能都是由插件來實現的。nagios可以很好地整合所有的插件一起高效的工作。通過分工合作來實現一個完善的監控機制。
Nagios特徵包括:
1.監控網絡服務(SMTP、POP3、HTTP、SSH、mysql、NNTP、PING等);
2.監控主機資源(處理器負荷、磁盤利用率等);
3.簡單地插件設計使得用戶可以方便地擴展自己服務的檢測方法;
4.並行服務檢查機制;
5.具備定義網絡分層結構的能力,用"parent"主機定義來表達網絡主機間的關係,這種關係可被用來發現和明晰主機宕機或不可達狀態;
6.當服務或主機問題產生與解決時將告警發送給聯繫人(通過EMail、短信、用戶定義方式);
7.具備定義事件句柄功能,它可以在主機或服務的事件發生時獲取更多問題定位;
8.自動的日誌回滾;
9.可以支持並實現對主機的冗餘監控;
10.可選的WEB界面用於查看當前的網絡狀態、通知和故障歷史、日誌文件等;
  常用的nagios系統一般組成:nagios、nagios-plugs、nrpe、nsclient
一個典型的架構如下圖所示:
 
   上面架構只能監控到服務器的外部服務,如HTTP、SSH、FTP,要實現對本地信息的監控可以通過在被監控服務器上安裝NRPE服務,作爲監控代理來實現對本地信息的監控,架構如下:

 

   NRPE 由兩個部分組成:工作在監控機一側的check_nrpe 插件、工作在被監控機一側的NRPE 守護進程。
Nagios 服務器執行check_nrpe 插件並告訴他檢查哪個服務,check_nrpe 插件通過SSL 連接方式聯繫遠程服務器上的NRPE 守護進程,NRPE 守護進程執行相應的插件完成指定的檢查,並返回結果。
  nagios相關軟件下載地址http://sourceforge.net/projects/nagios/files/  
  nagios漢化版下載http://sourceforge.net/projects/nagios-cn/files/,感謝漢化者田朝陽
安裝步驟:
1. 安裝運行環境
yum install httpd php php-devel gd gd-devel
2.安裝nagios並配置web訪問
useradd nagios
usermod –G nagios apache   //把apache 用戶加入nagios 組,如果省略這一步會在後續的操作中產生一些問題
./configure --prefix=/usr/local/nagios
//下面根據提示操作
make all
make install    //安裝nagios 主程序、CGI 和HTML 文件
make install-init   //安裝nagios 的啓動腳本
make install-commandmode //安裝外部命令使用的目錄,並配置目錄權限
make install-config    //安裝樣板配置文件,位於/usr/local/nagios/etc 目錄下
make install-webconf //安裝apache 配置文件,以便能夠通過web 頁面訪問nagios
 
htpasswd  -c /usr/local/nagios/etc/htpasswd.users nagiosadmin //創建web驗證登錄用戶
service httpd restart
測試:用http://監控機IP/nagios 看能否用nagiosadmin登錄
  nagios 安裝完畢檢查/usr/local/nagios 目錄下是否存在如下子目錄
chkconfig  --add nagios    //將nagios加爲系統服務
chkconfig nagios on   //設置開機自啓動
/usr/local/nagios/bin/nagios ‐v /usr/local/nagios/etc/nagios.cfg //驗證Nagios的配置文件
如果沒有報錯,可以啓動Nagios服務 service nagios start
3.安裝插件nagios-plugin(用來實現各種監控取值的程序)
tar -zxvf nagios-plugins-1.4.15.tar.gz
./configure --prefix=/usr/local/nagios
make && make install   
安裝後查看/usr/local/nagios/libexec/目錄,會顯示安裝的所有插件

chown –R nagios.nagios /usr/local/nagios
4.監控機、被監控機(Linux/Unix機)上安裝nrpe(如果只需要監控服務可以不裝這個)
tar –zxvf nrpe-2.12.tar.gz
./configure --prefix=/usr/local/nagios
make all  
make install-plugin (在被監控機安裝時先useradd nagios否則會出錯)
make install-daemon
make install-daemon-config
make install-xinetd       //安裝爲xinetd服務
vim /etc/xinetd.d/nrpe
only_from = 127.0.0.1 10.1.10.23(監控機的ip地址)
vi /etc/services   增加如下一行
nrpe 5666/tcp  # NRPE
chkconfig nrpe on
service xinetd restart
NRPE 測試
在被監控機上確認服務是否啓動
netstat -at|grep nrpe
tcp 0 0 *:nrpe *:* LISTEN
在監控機上測試被監控機的NRPE 工作是否正常
/usr/local/nagios/libexec/check_nrpe -H 被監控機IP
NRPE v2.12        //顯示NRPE 版本信息,說明NRPE 工作正常
安裝完畢接下來開始配置操作
對nagios 進行配置需要了解一個概念object(對象),nagios 使用object 來對各種信息進行組織,nagios 中的包含如下obeject: 
在配置前先來說明下需要修改的各配置文件的作用:
配置文件都存放在安裝目錄下的etc/下面
cgi.cfg  用於定義瀏覽器對nagios操作,比如權限控制等
nagios.cfg 用於定義控制nagios行爲
nrpe.cfg   nrpe配置文件
resource.cfg  資源配置文件,用於定義插件路徑,一般不需修改
objects目錄  監控對象配置文件存放於下面,配置文件可以自己添加,文件名可以自行定義,只要以.cfg結尾就行,但是必須在nagios.cfg加一行代碼使nagios讀取這個文件,例如你可以新建個linux.cfg來添加linux監控設備,nagios.cfg應該添加一行“cfg_file=/usr/local/nagios/etc/objects/linux.cfg”,一般同一類設備寫到一個文件裏,當然也可以對默認的文件進行修改來添加監控設備,此目錄下默認有下面幾個文件
commands.cfg  命令定義配置文件
contacts.cfg  定義聯繫人列表
timeperiods.cfg  定義時間監控模板
templates.cfg  定義各種模板,可以是主機模板、聯繫人模板、監控服務模板等
localhost.cfg  用於定義linux監控設備
windows.cfg  用於定義windows監控設備
switch.cfg    用於定義交換機,路由器等監控設備
printer.cfg    用於定義打印機監控設備
5.添加監控設備
(1)監控linux服務器
vi /usr/local/nagios/etc/objects/localhost.cfg 根據需要定義監控主機及監控內容
下面是個比較全的主機模板,可以在/usr/local/nagios/etc/objects/templates.cfg中找到適合的模板

define host{
use model_host //定義用的模板機
host_name host_name(*) //定義主機名,可起任意名字
alias alias(*) //定義主機別名
display_name display_name  // 定義顯示名字
address address(*) //主機名對應的ip 地址
parents host_names //定義父節點
hostgroups hostgroup_names //定義主機組名
check_command command_name //檢查主機狀態的命令
initial_state [o,d,u]   //初始化狀態
max_check_attempts #(*) //當檢查命令返回值不是“OK”時最大重試次數
check_interval # //#分鐘進行一次檢查
retry_interval # //重試間隔時間
active_checks_enabled [0/1] //主動監控開關(1開0閉)
passive_checks_enabled [0/1] //被動監控開關
check_period timeperiod_name(*) //主機狀態檢查的時間段
obsess_over_host [0/1]   //是否啓用主機操作系統探測
check_freshness [0/1]    //是否啓用 freshness 檢查。freshness 檢查是對於啓用被動檢查模式的主機而言的,其作用是定期檢查主機報告的狀態信息,如果該狀態信息已經過期,freshness 將會強制做主機檢查。freshness_threshold #
event_handler command_name
event_handler_enabled [0/1] //主機事件處理是否激活
low_flap_threshold #
high_flap_threshold #
flap_detection_enabled [0/1]
flap_detection_options [o,d,u]
process_perf_data [0/1]
retain_status_information [0/1]
retain_nonstatus_information [0/1]
contacts contacts(*) //發送報警通知給誰
contact_groups contact_groups(*) //發送通知給哪個報警組
notification_interval #(*) //主機狀態通知功能激活
first_notification_delay #
notification_period timeperiod_name(*) //發送通知的時間段
notification_options [d,u,r,f,s] //定義那些情況下發送通知
notifications_enabled [0/1] //發送通告開關
stalking_options [o,d,u]
notes note_string
notes_url url
action_url url
icon_image image_file //定義主機圖標
icon_image_alt alt_string
vrml_image image_file
statusmap_image image_file
2d_coords x_coord,y_coord //定義圖標在網頁中顯示的二維座標
3d_coords x_coord,y_coord,z_coord //定義圖標在網頁中顯示的三維座標
...
}
 
定義樣例:
define host{
              host_name                  web1
              alias                            web1
              address                       192.168.1.254
              parents                        router1
              check_command               check-host-alive
              check_interval                   5
              retry_interval                     1
              max_check_attempts        5
              check_period                     24x7
              process_perf_data             0
              retain_nonstatus_information 0
              contact_groups                  router-admins
              notification_interval          30
              notification_period           24x7
              notification_options          d,u,r
              }
根據需要還可定義主機組
樣例:
define hostgroup{                        //定義主機組
hostgroup_name tianway.net ; //定義主機組的名字
alias Linux Server ;//別名
members 192.168.0.2,192.168.0.3,192.168.0.4 ; //組成員,使用逗號分隔
}
接下來根據需要定義要監控的服務和服務組,哪臺設備要監控什麼服務就在那個服務定義裏的host_name中添加在主機定義中的主機名就行,多臺設備之間用逗號隔開,下面是一些常用服務和系統狀態定義
define service{             //定義監控ping
        use                             local-service        
        host_name                       *
        service_description             PING
        check_command                   check_ping!100.0,20%!500.0,60%
        }
define service{          //定義監控根分區
        use                             local-service        
        host_name                       web1
        service_description               根分區
        check_command                   check_local_disk!20%!10%!/
        }
define service{         //定義監控登錄用戶數
        use                             local-service        
        host_name                       web1
        service_description             登錄用戶數
        check_command                   check_local_users!20!50
        }
define service{           //定義監控進程數
        use                             local-service         ;
        host_name                       web1
        service_description             進程總數
        check_command                   check_local_procs!250!400!RSZDT
        }
define service{          //定義監控系統負荷
        use                             local-service        
        host_name                       web1
        service_description             系統負荷
        check_command                   check_local_load!5.0,4.0,3.0!10.0,6.0,4.0
        }
define service{          //定義監控swap利用率
        use                             local-service        
        host_name                       web1
        service_description             交換空間利用率
        check_command                   check_local_swap!20!10
        }
define service{          //定義監控SSH服務
        use                             local-service       
        host_name                       web1
        service_description             SSH
        check_command                   check_tcp!22!1.0!10.0
        notifications_enabled           1
        }
define service{          //定義監控HTTP服務
        use                             local-service        
        host_name                       web1
        service_description                HTTP
        check_command                   check_http
        notifications_enabled           1
        }
define servicegroup{
        servicegroup_name 系統負荷檢查
        alias 負荷檢查
        members web1,進程總數,web1,登錄用戶數,web1,根分區,web1,交換空間利用率,web1,PING
        }    //服務組定義members格式:主機名1,服務名,主機名2,服務名……
配置好後/usr/local/nagios/bin/nagios ‐v /usr/local/nagios/etc/nagios.cfg檢查有無錯誤並重啓nagios服務
(2)監控windows監控設備
首先在Windows機器上安裝代理NSClient++構件,注意被監控機操作系統是32位還是64位,要安裝對應版本的NSClient++
  安裝到這一步時,文檔不用安裝,安了也看不懂都是鳥語,下面plguins選項中,nsca選擇"用時再安裝",這個在分步式監控時纔用到,nrpe支持就是windows版本的nrpe監控代理,你可以選擇用它代理監控windows機,也可以用nsclient,兩個都安裝吧,到時兩個都能用,如果用nrpe的話同監控linux機一樣設置,這裏我們用nsclient監控windows機。

  
在這裏要填寫監控機IP,設置監控機連接時要用的密碼,不設密碼爲空,爲了更安全可以設上,但我覺得沒必要設,因爲你只允許監控機連接你的nsclietn++了,別的機器是拒絕連接的,除非別人知道你的監控機IP,然後僞造個相同ip來偷偷監控你的windows機器,這概率應該很小吧,設上後監控端要做相應的設置才能正常連接windows被監控機,比較麻煩。個人愚見至於加不加密碼自己決定。下面的模塊加載與否也是自己決定。
如果加上密碼在監控機中要修改nagios安裝目錄下的etc/objects/commands.cfg修改chect_nt命令定義部分,加個-s 後跟連接密碼,注意在這裏修改的前提是每個nsclient設置的密碼都是相同的,如果設置的不同則不能改這裏,則需要改etc/objects/windows.cfg中的服務定義部分。
define command{
        command_name    check_nt
        command_line    $USER1$/check_nt -H $HOSTADDRESS$ -p 12489 -s 7758521 -v $ARG1$ $ARG2$
      }

下面配置監控機上監控windows機的設置
vi /usr/local/nagios/etc/nagios.cfg  把下面這行最前面的#號去掉,只用第一次加windows監控機時修改
#cfg_file=/usr/local/nagios/etc/objects/windows.cfg
vi /usr/local/nagios/etc/objects/windows.cfg  定義主機及監控內容
define host{
 use  windows-server 
 host_name  winserver
 alias  My Windows Server
 address  192.168.1.2
 }
下面根據需要選擇性加服務定義以使Nagios監控Windows機器上的不同屬性內容。如果是第一臺Windows機器,可以只是修改windows.cfg裏的服務對象定義。

加入下面的服務定義以監控運行於Windows機器上的NSClient++外部構件的版本。當到時間要升級Windows機器上的外部構件時這信息會很用有,因爲它可以告知這臺Windows機器上的NSClient++需要升級到最新版本。
define service{
 use          generic-service
 host_name   winserver
 service_description NSClient++ Version
 check_command  check_nt!CLIENTVERSION
 }
加入下面的服務定義以監控Windows機器的啓動後運行時間。
define service{
 use          generic-service
 host_name   winserver
 service_description Uptime
 check_command  check_nt!UPTIME
 }
加入下面的服務定義可監控Windows機器的CPU利用率,並在5分鐘CPU負荷高於90%時給出一個緊急警報或是高於80%時給出一個告警警報。
define service{
 use   generic-service
 host_name   winserver
 service_description CPU Load
 check_command  check_nt!CPULOAD!-l 5,80,90
 }
加入下面的服務定義可監控Windows機器的內存佔用率,並在5分鐘內存佔用率高於90%時給出一個緊急警報或是高於80%時給出一個告警警報。
define service{
 use   generic-service
 host_name   winserver
 service_description Memory Usage
 check_command  check_nt!MEMUSE!-w 80 -c 90
 }
加入下面的服務定義可監控Windows機器的C:盤的磁盤利用率,並在磁盤利用率高於90%時給出一個緊急警報或是高於80%時給出一個告警警報。
define service{
 use          generic-service
 host_name   winserver
 service_description C:\ Drive Space
 check_command  check_nt!USEDDISKSPACE!-l c -w 80 -c 90
 }   //把紅色c換成d就是監控d盤
加入下面的服務定義可監控Windows機器上的W3SVC服務(IIS的3w網站服務)狀態,並在W3SVC服務停止時給出一個緊急警報。
define service{
 use          generic-service
 host_name   winserver
 service_description W3SVC
 check_command  check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
 }  // W3SVC替換成別的服務名就是監控那個服務
加入下面的服務定義可監控Windows機器上的Explorer.exe進程,並在進程沒有運行時給出一個緊急警報。
define service{
 use   generic-service
 host_name   winserver
 service_description Explorer
 check_command  check_nt!PROCSTATE!-d SHOWALL -l Explorer.exe
 }  // Explorer.exe換成那個進程就是監控那個進程
配置好後/usr/local/nagios/bin/nagios ‐v /usr/local/nagios/etc/nagios.cfg檢查有無錯誤並重啓nagios服務
如果配置好了但監控機取不到值,可以用libexec/check_nt手動調試一下,看能否取到值
check_nt用法如下:
check_nt -H host -v variable [-p port] [-w warning] [-c critical] [-l params] [-d SHOWALL] [-u] [-t timeout]
選項:
 -H 後跟被監控機主機名或IP
 -p 後跟被監控nsclient端口號,默認是12489(必需有這個選項否則顯示連接拒絕)
 -s 後跟連接密碼
 -w 後跟wanring報警值
 -c 後跟critical報警值
 -t 後跟連接嘗試次數
 -h 顯示幫助
 -V 顯示check_nt版本
 -v 後跟要查看的性能值
可用的性能值有:
 CLIENTVERSION   顯示nsclient++版本
 CPULOAD   -l  <minutes range>,<warning threshold>,<critical threshold>.
  注意:<minute range> 不要大於 24*60.  
  例: -l 60,90,95,120,90,95  顯示最後60分鐘和120分鐘waring爲90%,critical爲95%的平均cpuload
 UPTIME           顯示開機運行時間
 USEDDISKSPACE  顯示磁盤空間信息
  例:-l c 顯示當前c盤空間使用信息
     -l d -w 90 -c 95  顯示d盤設waring爲90%,critical爲95%時的空間使用信息
 MEMUSE 顯示內存使用情況,後可跟-w  -c指定報警值,默認爲5分鐘內平均值
 SERVICESTATE 檢查一個或多個服務狀態
  -l <service1>,<service2>,<service3>,...
 用 -d SHOWALL 可以查看正在運行有服務
 PROCSTATE 檢查進程狀態
-l <進程名字> 
 COUNTER   檢查一些性能計數
        用法:
        -l "
\\<performance object>\\counter","<description>
         <description> 參數用於打印輸出一個需要浮點參數的命令 ,如果 <description>不包含 "%%", 它會做爲一個標籤
 例:  "Paging file usage is %%.2f %%%%"
  "%%.f %%%% paging file used."
 INSTANCES   檢查性能對象計數 
用法: check_nt -H <hostname> -p <port> -v INSTANCES -l <counter object>
  <counter object> 是一個windows性能對象計數 (eg. Process),
   如果它是兩個詞,它應該引號括起來,返回的結果將是一個逗號分隔的對象 
check_nt用法舉例:

check_nt -H 192.168.1.2 -p 12489 -v CPULOAD -l 60,90,95  //顯示最後60分鐘waring爲90%,critical爲95%時的平均cpuload
check_nt -H 192.168.1.2 -p 12489 -v UPTIME  //顯示192.168.1.2從開機到現在運行時間
check_nt -H 192.168.1.2 -p 12489 -v USEDDISKSPACE -l c //顯示192.168.1.2 C盤使用情況

check_nt -H 192.168.1.2 -p 12489 -v USEDDISKSPACE -l d -w 60 -c 95 //顯示192.168.1.2 D盤設waring爲90%,critical爲95%時的空間使用信息
check_nt -H 192.168.1.2 -p 12489 -v MEMUSE  //顯示192.168.1.2內存使用情況
check_nt -H 192.168.1.2 -p 12489 -v SERVICESSTATE -d SHOWALL  //顯示192.168.1.2所有正在運行的服務

check_nt -H 192.168.1.2 -p 12489 -v SERVICESSTATE -d SHOWALL -l W3SVC //顯示192.168.1.2上IIS網站服務運行情況
check_nt -H 192.168.1.2 -p 12489 –s 7758521 –v CLIENTVERSION  //查看192.168.1.2上nsclient++版本
check_nt -H 192.168.1.2 -p 12489 –s 7758521 -v INSTANCES -l Process //列舉192.168.1.2上運行的進程
(3)監控路由器、交換機
vi /usr/local/nagios/etc/nagios.cfg     移除文件裏下面這行的最前面的#號
#cfg_file=/usr/local/nagios/etc/objects/switch.cfg
vi /usr/local/nagios/etc/objects/switch.cfg  定義網絡設備
define host{

       use         generic-switch           
       host_name   linksys-srw224p        
       alias            Linksys SRW224P Switch      
       address         192.168.1.253           
       hostgroups    allhosts,switches
}
//監控丟包率和RTA
增加如下的服務定義以監控自Nagios監控主機到交換機的丟包率和平均回包週期RTA,在一般情況下每5分鐘檢測一次。
define service{
       use                 generic-service   
       host_name           linksys-srw224p 
       service_description    PING          
       check_command        check_ping!200.0,20%!600.0,60%
       normal_check_interval      5    
       retry_check_interval 1    
解釋:這個服務的狀態將會處於:
緊急(CRITICAL)-條件是RTA大於600ms或丟包率大於等於60%;
告警(WARNING)-條件是RTA大於200ms或是丟包率大於等於20%;
正常(OK)-條件是RTA小於200ms或丟包率小於20%
//監控SNMP狀態信息
如果交換機與路由器支持SNMP接口,可以用check_snmp插件來監控更豐富的信息。
define service{
       use                 generic-service   
       host_name           linksys-srw224p
       service_description    Uptime 
       check_command        check_snmp!-C public -o sysUpTime.0
}
在上述服務定義中的check_command域裏,用"-C public"來指定SNMP共同體名稱爲"public",用"-o sysUpTime.0"指明要檢測的OID(譯者注-MIB節點值)。
如果要確保交換機上某個指定端口或接口的狀態處於運行狀態,可以在對象定義里加入一段定義:
define service{
       use                generic-service   
       host_name          linksys-srw224p
       service_description    Port 1 Link Status
       check_command        check_snmp!-C public -o ifOperStatus.1 -r 1 -m RFC1213-MIB
}
在上例中,"-o ifOperStatus.1"指出取出交換機的端口編號爲1的OID狀態。"-r 1"選項是讓check_snmp插件檢查返回一個正常(OK)狀態,如果是在SNMP查詢結果中存在"1"(1說明交換機端口處於運行狀態)如果沒找到1就是緊急(CRITICAL)狀態。"-m RFC1213-MIB"是可選的,它告訴check_snmp插件只加載"RFC1213-MIB"庫而不是加載每個在系統裏的MIB庫,這可以加快插件運行速度。
有成百上千種信息可以通過SNMP來監控,這完全取決於你需要做什麼和如果來做監控。通常可以用如下命令來尋找你想用於監控的OID節點(用你的交換機IP替換192.168.1.253):snmpwalk -v1 -c public 192.168.1.253 -m ALL .1
 //監控帶寬和流量
可以監控交換機或路由器的帶寬利用率,用MRTG繪圖並讓Nagios在流量超出指定門限時報警。check_mrtgtraf插件可以實現。需要讓check_mrtgtraf插件知道如何來保存MRTG數據並存入文件,以及門限等。在例子中,監控了一個Linksys交換機。MRTG日誌保存於/var/lib/mrtg/192.168.1.253_1.log文件中。這就是我用於監控的服務定義,它可以用於監控帶寬數據到日誌文件之中...
define service{
       use                      generic-service   
       host_name                 linksys-srw224p
       service_description    Port 1 Bandwidth Usage
       check_command        check_local_mrtgtraf!/var/lib/mrtg/192.168.1.253_1.log!AVG!1000000,2000000!5000000,5000000!10
}
在上例中,"/var/lib/mrtg/192.168.1.253_1.log"參數傳給check_local_mrtgtraf命令意思是插件的MRTG日誌文件在這個文件裏讀寫,"AVG"參數的意思是取帶寬的統計平均值,"1000000,200000"參數是指流入的告警門限(以字節爲單位),"5000000,5000000"是輸出流量緊急狀態門限(以字節爲單位),"10"是指如果MRTG日誌如果超過10分鐘沒有數據返回一個緊急狀態(應該每5分鐘更新一次)。
配置好後/usr/local/nagios/bin/nagios ‐v /usr/local/nagios/etc/nagios.cfg檢查有無錯誤並重啓nagios服務
6.報警設置
nagios 常見的報警方式有郵件報警、短信報警、飛信報警、QQ 報警、MSN 報警等。
1) 郵件報警
郵件報警是一種廣爲使用的報警方式,具有成本低廉,性能穩定等優勢,默認採用系統自帶的mail程序來發送郵件。
# echo test |mail –s "nagios報警"  [email protected]  //發送測試郵件
如果能正常收到測試郵件,就進行下一步郵件報警配置
需要修改兩個地方,一個是contacts.cfg文件,一個是主機定義中的contacts選項
在contacts.cfg添加聯繫人對象,例如:
define contact{
        contact_name            nagiosadmin            
        use                             generic-contact         
        alias                           Nagios Admin                    
        email                           llq@163.com    ;     [email protected]    }  //多個聯繫人用分號隔開
最後在需要郵件報警的主機定義文件中加上contacets nagiosadmin
配置文件修改完成後重啓nagios 服務,
如果設置正常,發生故障時nagios 就會發送郵件給指定的E-mail 信箱。
2) 飛信報警
發生故障時nagios 發送郵件到指定的信箱是一個可行的通知辦法,但是對於關鍵的業務服務而言,這樣的報警方式顯然不能滿足需要。對於關鍵業務的運行情況,我們需要在發生故障後的第一時間獲取到相關信息,甚至希望能夠在故障發生前就進行處理。例如對磁盤空間的監控可以在磁盤被佔滿之前發出預警,是我們有足夠的時間進行處理。綜合各種情況,最合適的關鍵業務報警方式無非是短信、電話兩種方式。短信及時性好、花費低廉對終端要求低等各種優勢,往往成爲最佳的選擇。對於大企業用戶而言,可以使用短信網關來發送短信,對於小型企業可以購買短信貓來實現相同的功能,對於不原意花錢又想用短信報警的用戶,飛信就成爲最好的選擇。
用飛信報警可以通過裝飛信機器人實現。實現方法如下:
http://bbs.it-adv.net/viewthread.php?tid=1081&extra=page%3D1&page=1下載飛信程序和需要的庫文件linux飛信程序是通用的,但32位和64位系統用的庫文件不同,下載時請注意根據自已監控機系統版本下載相應庫文件
對於linux 32位系統設置:
cp庫文件到/usr/libcp fetion程序到/usr/local/bin 下面
對於linux 64位系統設置:
cp 庫文件和fetion程序到/usr/local/fetion 下面,64位的庫文件最好不要往/usr/lib/usr/lib64下面cp,防止覆蓋系統lib庫,最好單獨放到一目錄下
echo ‘/usr/local/fetion’>>/etc/ld.so.conf
ldconfig  重新加載下lib
以下以32位系統爲例子測試配置
測試前請保證監控機能夠訪問外網8080端口,飛信機器人用這個端口與移動服務器通信
自己給自己發個飛信測試一下:
fetion --mobile=15012345678 --pwd=xxxxx  --to=15012345678 --msg-utf8="測試飛信"   //pwd指飛信登錄密碼
現在飛信第一次發信時要有圖形碼驗證(在和fetion程序同目錄下生成),文件名字是150112345678.jpg,你可以把圖形弄到桌面環境讀取或者弄到windows機讀取後再輸入
輸入正確後會提示飛信發送成功!
測試成功後請不要將fetion程序同目錄下的150112345678.cache文件刪除,否則用的時候需要再次輸入驗證碼,不小心刪除了會影響nagios自動調用使用哦!!!

用飛信客戶端登錄飛信,將移動手機報警人全部加到報警發送者好友中,這是必須的,否則無法向非好友發送飛信,現在飛信也可以向非移動手機發飛信了,但是收費的,使用時請注意!向聯通,電信手機發短信買第三方短信通道會更划算一些,發一條短信是6分錢左右,但是第三方短信通道可能有時不太靠譜,存在短信延遲!相對沒有飛信靠譜,這是經過實踐檢驗的哦!

修改commands.cfg 文件,爲nagios 增加兩個報警命令
[root@nagios objects]# vi commands.cfg   //增加以下內容
define command{
command_name  notify-service-by-fetion  
command_line /usr/bin/fetion --mobile=15012345678 --pwd=xxxxx --to=$CONTACTPAGER$
--msg-utf8="$HOSTNAME$ $SERVICEDESC$ is $SERVICESTATE$ on $TIME$ result is $SERVICEOUTPUT$"    //飛信內容可自行定義,但一些變量必不可少
}
define command{
command_name notify-host-by-fetion
command_line /usr/bin/fetion --mobile=15012345678 --pwd=xxxxx --to=$CONTACTPAGER$
--msg-utf8="$NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ "
}
建議:命令定義請儘量言簡意賅,儘量縮短報警內容字符,內容太多發送時可能會被移動截斷成2條進行發送,影響收看效果
命令定義設置需要了解nagios一些宏的使用,這個請自行查手冊,其實參照郵件報警命令修改就行了
 
然後修改contacts.cfg,增加飛信報警方式
define contact{
contact_name sa
alias system admin
host_notification_period 24x7
service_notification_period 24x7
host_notification_options d,r,
service_notification_options c,w,r
service_notification_commands notify-service-by-fetion   //這裏報警命令名字與上面對應
host_notification_commands notify-host-by-fetion
pager 15012345678  //配置飛信報警接收人,注意這裏page關鍵字和命令定義中的$CONTACTPAGER$對應
}
最後在需要飛信報警的服務或主機定義文件中加上contacets sa

配置文件修改完成後重啓nagios 服務,使配置文件生效就可以使用飛信報警了

後緒:爲保證飛信通道可靠性,我在監控機上寫個crontabl任務,每天0點向我發送一個飛信是否正常的信息
0 0 * * * /usr/local/fetion/fetion --mobile=15012345678 --pwd=xxxxx  --to=15012345678 --msg-utf8="飛信通道正常!"

 

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