運維監控利器Nagios

來源: 南非螞蟻html

1、nagios配置過程詳解mysql


一、nagios默認配置文件介紹
 nagios安裝完畢後,默認的配置文件在/usr/local/nagios/etc目錄下,每一個文件或目錄含義以下表所示:linux

 

二、配置文件之間的關係
 在nagios的配置過程當中涉及到的幾個定義有:主機、主機組,服務、服務組,聯繫人、聯繫人組,監控時間,監控命令等,從這些定義能夠看出,nagios各個配置文件之間是互爲關聯,彼此引用的。
 成功配置出一臺nagios監控系統,必需要弄清楚每一個配置文件之間依賴與被依賴的關係,最重要的有四點:
 第一:定義監控哪些主機、主機組、服務和服務組
 第二:定義這個監控要用什麼命令實現,
 第三:定義監控的時間段,
 第四:定義主機或服務出現問題時要通知的聯繫人和聯繫人組。ios

 

三、開始配置nagios
 爲了能更清楚的說明問題,同時也爲了維護方便,建議將nagios各個定義對象建立獨立的配置文件:
 即爲:
 建立hosts.cfg文件來定義主機和主機組
 建立services.cfg文件來定義服務
 用默認的contacts.cfg文件來定義聯繫人和聯繫人組
 用默認的commands.cfg文件來定義命令
 用默認的timeperiods.cfg來定義監控時間段
 用默認的templates.cfg文件做爲資源引用文件web

  (1)templates.cfg文件
 
 nagios主要用於監控主機資源以及服務,在nagios配置中稱爲對象,爲了避免必重複定義一些監控對象,Nagios引入了一個模板配置文件,將一些共性的屬性定義成模板,以便於屢次引用。這就是templates.cfg的做用。
 下面詳細介紹下templates.cfg文件中每一個參數的含義:sql

  
  
  
  
  1.  define contact{  
  2.         name                            generic-contact        #聯繫人名稱,  
  3.         service_notification_period     24x7                   #當服務出現異常時,發送通知的時間段,這個時間段「7x24"在timeperiods.cfg文件中定義  
  4.         host_notification_period        24x7                   #當主機出現異常時,發送通知的時間段,這個時間段「7x24"在timeperiods.cfg文件中定義  
  5.         service_notification_options    w,u,c,r         #這個定義的是「通知能夠被髮出的狀況」。w即warn,表示警告狀態,u即unknown,表示不明狀態,c即criticle,表示緊急狀態,r即recover,表示恢復狀態。也就是在服務出現警告狀態、未知狀態、緊急狀態和從新恢復狀態時都發送通知給使用者。  
  6.         host_notification_options       d,u,r         #定義主機在什麼狀態下須要發送通知給使用者,d即down,表示宕機狀態,u即unreachable,表示不可到達狀態,r即recovery,表示從新恢復狀態。  
  7.         service_notification_commands   notify-service-by-email  #服務故障時,發送通知的方式,能夠是郵件和短信,這裏發送的方式是郵件,其中「notify-service-by-email」在commands.cfg文件中定義。  
  8.         host_notification_commands      notify-host-by-email     #主機故障時,發送通知的方式,能夠是郵件和短信,這裏發送的方式是郵件,其中「notify-host-by-email」在commands.cfg文件中定義。  
  9.         register                        0  
  10.         }  
  11.  define host{   
  12.         name                            generic-host    #主機名稱,這裏的主機名,並非直接對應到真正機器的主機名,乃是對應到在主機配置文件裏所設定的主機名。  
  13.         notifications_enabled           1              
  14.         event_handler_enabled           1               
  15.         flap_detection_enabled          1               
  16.         failure_prediction_enabled      1             
  17.         process_perf_data               1              
  18.         retain_status_information       1             
  19.         retain_nonstatus_information    1                
  20.         notification_period             24x7           #指定「發送通知」的時間段,也就是能夠在何時發送通知給使用者。  
  21.         register                        0                
  22.         }  
  23.  
  24. define host{  
  25.         name                            linux-server    #主機名稱  
  26.         use                             generic-host    #use表示引用,也就是將主機generic-host的全部屬性引用到linux-server中來,在nagios配置中,不少狀況下會用到引用。  
  27.         check_period                    24x7            #這裏的check_period告訴nagios檢查主機的時間段  
  28.         check_interval                  5                #nagios對主機的檢查時間間隔,這裏是5分鐘。  
  29.         retry_interval                  1               #重試檢查時間間隔,單位是分鐘。  
  30.         max_check_attempts              10               #nagios對主機的最大檢查次數,也就是nagios在檢查發現某主機異常時,並不立刻判斷爲異常情況,而是多試幾回,由於有可能只是一時網絡太擁擠,或是一些其餘緣由,讓主機受到了一點影響,這裏的10就是至少試10次的意思。  
  31.         check_command                   check-host-alive  #指定檢查主機狀態的命令,其中「check-host-alive」在commands.cfg文件中定義。  
  32.         notification_period             workhours      #主機故障時,發送通知的時間範圍,其中「workhours」在timeperiods.cfg中進行了定義,下面會陸續講到。  
  33.                                                          
  34.         notification_interval           120            #在主機出現異常後,故障一直沒有解決,nagios再次對使用者發出通知的時間。單位是分鐘。若是你以爲,全部的事件只須要一次通知就夠了,能夠把這裏的選項設爲0  
  35.         notification_options            d,u,r          #定義主機在什麼狀態下能夠發送通知給使用者,d即down,表示宕機狀態,u即unreachable,表示不可到達狀態,r即recovery,表示從新恢復狀態。  
  36.         contact_groups                  admins         #指定聯繫人組,這個「admins」在contacts.cfg文件中定義。  
  37.         register                        0  
  38.         }  
  39.  
  40. define service{  
  41.         name                            generic-service   #定義一個服務名稱  
  42.         active_checks_enabled           1     
  43.         passive_checks_enabled          1      
  44.         parallelize_check                1      
  45.         obsess_over_service             1      
  46.         check_freshness                0  
  47.         notifications_enabled            1                 
  48.         event_handler_enabled           1                   
  49.         flap_detection_enabled           1                    
  50.         failure_prediction_enabled        1                   
  51.         process_perf_data               1                   
  52.         retain_status_information       1                     
  53.         retain_nonstatus_information    1                        
  54.         is_volatile                     0   
  55.         check_period                    24x7      #這裏的check_period告訴nagios檢查服務的時間段。              
  56.         max_check_attempts              3         #nagios對服務的最大檢查次數。           
  57.         normal_check_interval           10       #此選項是用來設置服務檢查時間間隔,也就是說,nagios這一次檢查和下一次檢查之間所隔的時間,這裏是10分鐘。   
  58.         retry_check_interval            2        #重試檢查時間間隔,單位是分鐘。            
  59.         contact_groups                  admins   #指定聯繫人組,同上。              
  60.         notification_options            w,u,c,r  #這個定義的是「通知能夠被髮出的狀況」。w即warn,表示警告狀態,u即unknown,表示不明狀態,c即criticle,表示緊急狀態,r即recover,表示恢復狀態。也就是在服務出現警告狀態、未知狀態、緊急狀態和從新恢復後都發送通知給使用者。  
  61.         notification_interval           60       #在服務出現異常後,故障一直沒有解決,nagios再次對使用者發出通知的時間。單位是分鐘。若是你認爲,全部的事件只須要一次通知就夠了,能夠把這裏的選項設爲0。  
  62.         notification_period             24x7     #指定「發送通知」的時間段,也就是能夠在何時發送通知給使用者。               
  63.          register                        0                       
  64.         }  
  65.  


(2)resource.cfg文件網絡

 resource.cfg是nagios的變量定義文件,文件內容只有一行:
 ssh

  
  
  
  
  1. $USER1$=/usr/local/nagios/libexec 
 其中,變量$USER1$指定了安裝nagios插件的路徑,若是把插件安裝在了其它路徑,只需在這裏進行修改便可。須要注意的是,變量必須先定義,而後才能在其它配置文件中進行引用。

(3)理解Nagios宏及其工做機制ide

Nagios配置很是靈活,繼承和引用是一大特徵,另外一個重要特徵就是能夠在命令行的定義裏使用宏,經過定義宏,nagios能夠靈活的獲取主機、服務和其它對象的信息。
宏的工做機制
在執行命令以前,nagios將對命令裏的每一個宏替換成它們應當取得的值。這種宏替換髮生在Nagios執行各類類型的宏時候。例如主機和服務的檢測、通知、事件處理等。
 this

宏的分類:
默認宏、按需而成的宏、用戶自定製宏等。
 

默認宏
主機IP地址宏
當在命令定義中使用主機或服務宏時,宏將要執行所用的值指向主機或服務所帶有值。看下面這個例子,假定在check_ping命令定義裏使用了一個主機對象,例如這樣:

  
  
  
  
  1. define host{  
  2.   host_name               ixdba  
  3.   address   192.168.12.246  
  4.   check_command               check_ping  
  5.   ...  
  6.   }  
  7. define command{  
  8.   command_name    check_ping  
  9.   command_line    /usr/local/nagios/libexec/check_ping -H $HOSTADDRESS$ -w 100.0,90% -c 200.0,60%  
  10.   } 


那麼執行這個主機檢測命令時展開並最終執行的將是這樣的:

  
  
  
  
  1. /usr/local/nagios/libexec/check_ping -H 192.168.12.246 -w 100.0,90% -c 200.0,60% 


命令參數宏
一樣你能夠向命令傳遞參數,這樣能夠保證命令定義更具通用性。參數指定在對象(象主機或服務)中定義,用一個「!」來分隔,例如這樣:

  
  
  
  
  1. define service{  
  2.   host_name  linuxbox  
  3.   service_description PING  
  4.   check_command              check_ping!200.0,80%!400.0,40%  
  5.   ...  
  6.   } 


在上例中,服務的檢測命令中含有兩個參數(請參考$ARGn$宏),而$ARG1$宏將是"200.0,80%",同時$ARG2$將是"400.0,40%"(都不帶引號)。假定使用以前的主機定義並這樣來定義你的check_ping命令:

  
  
  
  
  1. define command{  
  2.   command_name    check_ping  
  3.   command_line    /usr/local/nagios/libexec/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$  
  4.   } 


那麼對於服務的檢測命令最終將是這樣子的:

  
  
  
  
  1. /usr/local/nagios/libexec/check_ping -H 192.168.12.246 -w 200.0,80% -c 400.0,40% 

 

Nagios可用的所有的宏

主機宏
$HOSTNAME$  主機簡稱(如"web"),取自於主機定義裏的host_name域
$HOSTADDRESS$  主機地址。取自於主機定義裏的address域
服務宏
$SERVICESTATE$ 服務狀態描述,有w,u,c
$SERVICEDESC$   對當前服務的描述 
聯繫人宏
$CONTACTNAME$   表示聯繫人,在聯繫人文件中定義
通知宏
$NOTIFICATIONTYPE$    返回下面信息:("PROBLEM", "RECOVERY", "ACKNOWLEDGEMENT", "FLAPPINGSTART", "FLAPPINGSTOP", "FLAPPINGDISABLED", "DOWNTIMESTART", "DOWNTIMEEND", or "DOWNTIMECANCELLED").
日期/時間宏
$LONGDATETIME$  當前的日期/時間戳
文件宏
$LOGFILE$  日誌文件的保存位置。
$MAINCONFIGFILE$  主配置文件的保存位置。
其餘宏
$ADMINEMAIL$  全局的管理員EMail地址
$ARGn$  指向第n個命令傳遞參數(通知、事件處理、服務檢測等)。Nagios支持最多32個參數宏

 

(4)commands.cfg文件
 此文件默認是存在的,無需修改便可使用,固然若是有新的命令須要加入時,在此文件進行添加便可。這裏並未列出文件的全部內容,僅僅介紹了配置中用到的一些命令。 

  
  
  
  
  1. #下面是notify-host-by-email命令的定義  
  2. define command{  
  3.         command_name    notify-host-by-email    #命令名稱,即定義了一個主機異常時發送郵件的命令。  
  4.         command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$    #命令具體的執行方式,「-H $HOSTADDRESS$」 是定義目標主機的地址,這個地址在hosts.cfg文件中定義了。  
  5.         }  
  6. #下面是notify-host-by-email命令的定義  
  7. define command{  
  8.         command_name    notify-service-by-email   #命令名稱,即定義了一個服務異常時發送郵件的命令  
  9.         command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$  
  10.         }  
  11.  
  12. #下面是notify-host-by-email命令的定義  
  13.  define command{  
  14.         command_name    check-host-alive   #命令名稱,用來檢測主機狀態。  
  15.        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5     #這裏的變量$USER1$在resource.cfg文件中進行定義,即$USER1$=/usr/local/nagios/libexec  
  16. ,那麼check_ping的完整路徑爲/usr/local/nagios/libexec/check_ping。 「-w 3000.0,80%」中「-w」說明後面的一對值對應的是「WARNING」狀態,「80%」是其臨界值。「-c 5000.0,100%」中「-c」說明後面的一對值對應的是「CRITICAL」,「100%」是其臨界值。「-p 1」說明每次探測發送一個包。  
  17.         }  
  18. #下面是notify-host-by-email命令的定義  
  19.  define command{  
  20.         command_name    check_ftp  
  21.         command_line    $USER1$/check_ftp -H $HOSTADDRESS$ $ARG1$    #$ARG1$是指在調用這個命令的時候,命令後面的第一個參數。  
  22.         }  
  23. #下面是check_http命令的定義  
  24.  define command{  
  25.         command_name    check_http  
  26.         command_line    $USER1$/check_http -I $HOSTADDRESS$ $ARG1$  
  27.         }  
  28. #下面是check_ssh命令的定義  
  29.  define command{  
  30.         command_name    check_ssh  
  31.         command_line    $USER1$/check_ssh $ARG1$ $HOSTADDRESS$  
  32.         }  
  33.  


(5) hosts.cfg文件
 此文件默認不存在,須要手動建立,hosts.cfg主要用來指定被監控的主機地址以及相關屬性信息,一個配置好的實例以下:

  
  
  
  
  1. define host{  
  2.         use                     linux-server  #引用主機linux-server的屬性信息,linux-server主機在templates.cfg文件中進行了定義。  
  3.         host_name               web    #主機名  
  4.         alias                    ixdba-web  #主機別名  
  5.         address                 192.168.12.251  #被監控的主機地址,這個地址能夠是ip,也能夠是域名。  
  6.         }  
  7. ?  
  8.  define host{  
  9.         use                     linux-server  
  10.         host_name              mysql  
  11.         alias                    ixdba-mysql  
  12.         address                 192.168.12.237  
  13.         }  
  14. ?  
  15.  define hostgroup{      #定義一個主機組  
  16.  hostgroup_name  sa-servers        #主機組名稱,能夠隨意指定。  
  17.  alias           sa servers    #主機組別名  
  18.  members         web,mysql   #主機組成員,其中「web」、「mysql」就是上面定義的兩個主機。  
  19.  }  
  20.  


(6) services.cfg文件
 此文件默認也不存在,須要手動建立,services.cfg文件主要用於定義監控的服務和主機資源,例如監控http服務、ftp服務、主機磁盤空間、主機系統負載等等。

  
  
  
  
  1. #################  ixdba   web  #####################  
  2.  define service{  
  3.         use                             local-service  #引用local-service服務的屬性值,local-service在templates.cfg文件中進行了定義。  
  4.         host_name                       web  #指定要監控哪一個主機上的服務,「web」在hosts.cfg文件中進行了定義。  
  5.         service_description             PING  #對監控服務內容的描述,以供維護人員參考。  
  6.         check_command                   check_ping!100.0,20%!500.0,60% #指定檢查的命令,check_ping命令在commands.cfg中定義,後跟兩個參數,命令與參數間用!分割。         
  7.         }  
  8.  
  9.  define service{  
  10.         use                             local-service  
  11.         host_name                       web  
  12.         service_description              SSH  
  13.         check_command                  check_ssh    # check_ssh命令也在commands.cfg中定義。  
  14.         }  
  15.  
  16.  define service{  
  17.         use                             local-service  
  18.         host_name                       web  
  19.         service_description              SSHD  
  20.         check_command                  check_tcp!22  
  21.         }  
  22.  


(7) contacts.cfg文件
 contacts.cfg是一個定義聯繫人和聯繫人組的配置文件,當監控的主機或者服務出現故障,nagios會經過指定的通知方式(郵件或者短信)將信息發給這裏指定的聯繫人或者使用者。

  
  
  
  
  1. define contact{  
  2.         contact_name                    sasystem  #聯繫人名稱  
  3.         use                             generic-contact #引用generic-contact的屬性信息,其中「generic-contact」在templates.cfg文件中進行定義  
  4.         alias                           sa-system  #聯繫人別名  
  5.         email                          ixdba@126.com  #聯繫人的郵件地址  
  6.         }  
  7. define contactgroup {  
  8.       contactgroup_name    admins #聯繫人組名稱  
  9.       alias                system administrator group #聯繫人組描述  
  10.       members              sasystem  #聯繫人組成員,其中「sasystem」就是上面定義的聯繫人  
  11. }  
  12.  


(8) timeperiods.cfg文件
 此文件只要用於定義監控的時間段,下面是一個配置好的實例:

  
  
  
  
  1. #下面是定義一個名爲24x7的時間段,即監控全部時間段  
  2. define timeperiod{  
  3.         timeperiod_name 24x7     
  4.         alias           24 Hours A Day, 7 Days A Week  
  5.         sunday          00:00-24:00  
  6.         monday          00:00-24:00  
  7.         tuesday         00:00-24:00  
  8.         wednesday       00:00-24:00  
  9.         thursday        00:00-24:00  
  10.         friday          00:00-24:00  
  11.         saturday        00:00-24:00  
  12.         }  
  13. #下面是定義一個名爲workhours的時間段,即工做時間段。  
  14. define timeperiod{  
  15.         timeperiod_name workhours   
  16.         alias           Normal Work Hours  
  17.         monday          09:00-17:00  
  18.         tuesday         09:00-17:00  
  19.         wednesday       09:00-17:00  
  20.         thursday        09:00-17:00  
  21.         friday          09:00-17:00  
  22.         }  
  23.  


(9) cgi.cfg文件
 此文件用來控制相關cgi腳本,若是想在nagios的web監控界面執行cgi腳本,例如重啓nagios進程、關閉nagios通知、中止nagios主機檢測等,這時就須要配置cgi.cfg文件了。
 因爲nagios的web監控界面驗證用戶爲ixdba,因此只需在cgi.cfg文件中添加此用戶的執行權限就能夠了,須要修改的配置信息以下:

  
  
  
  
  1. default_user_name=ixdba 
  2. authorized_for_system_information=nagiosadmin,ixdba  
  3. authorized_for_configuration_information=nagiosadmin,ixdba  
  4. authorized_for_system_commands=ixdba 
  5. authorized_for_all_services=nagiosadmin,ixdba  
  6. authorized_for_all_hosts=nagiosadmin,ixdba  
  7. authorized_for_all_service_commands=nagiosadmin,ixdba  
  8. authorized_for_all_host_commands=nagiosadmin,ixdba  
  9.  

(10) nagios.cfg文件
  Nagios.cfg默認的路徑爲/usr/local/nagios/etc/nagios.cfg,是nagios的核心配置文件,全部的對象配置文件都必須在這個文件中進行定義才能發揮其做用,這裏只需將對象配置文件在Nagios.cfg文件中進行引用便可。

  
  
  
  
  1. log_file=/usr/local/nagios/var/nagios.log  
  2. 「log_file」變量用來定義nagios日誌文件的路徑。  
  3. cfg_file=/usr/local/nagios/etc/hosts.cfg  
  4. cfg_file=/usr/local/nagios/etc/services.cfg  
  5. cfg_file=/usr/local/nagios/etc/commands.cfg  
  6. cfg_file=/usr/local/nagios/etc/contacts.cfg  
  7. cfg_file=/usr/local/nagios/etc/timeperiods.cfg  
  8. cfg_file=/usr/local/nagios/etc/templates.cfg  
  9.  「cfg_file」變量用來引用對象配置文件,若是有更多的對象配置文件,在這裏依次添加便可。  
  10. object_cache_file=/usr/local/nagios/var/objects.cache  
  11. 該變量用於指定一個「全部對象配置文件」的副本文件,或者叫對象緩衝文件  
  12.  
  13. resource_file=/usr/local/nagios/etc/resource.cfg  
  14. 該變量用於指定nagios資源文件的路徑,能夠在Nagios.cfg中定義多個資源文件。  
  15. status_file=/usr/local/nagios/var/status.dat  
  16. 該變量用於定義一個狀態文件,此文件用於保存nagios的當前狀態、註釋和宕機信息等。  
  17. status_update_interval=10 
  18.  該變量用於定義狀態文件(即status.dat)的更新時間間隔,單位是秒,最小更新間隔是1秒。  
  19. nagios_user=nagios  
  20. 該變量指定了Nagios進程使用哪一個用戶運行。  
  21. nagios_group=nagios  
  22.  該變量用於指定Nagios使用哪一個用戶組運行。  
  23. check_external_commands=1 
  24.  該變量用於設置是否容許nagios在web監控界面運行cgi命令,也就是是否容許nagios在web界面下執行重啓nagios、中止主機/服務檢查等操做。「1」爲運行,「0」爲不容許。  
  25. command_check_interval=2 
  26.  該變量用於設置nagios對外部命令檢測的時間間隔,若是指定了一個數字加一個"s"(如10s),那麼外部檢測命令的間隔是這個數值以秒爲單位的時間間隔。若是沒有用"s",那麼外部檢測命令的間隔是以這個數值的「時間單位」的時間間隔。  
  27. interval_length=60 
  28.  該變量指定了nagios的時間單位,默認值是60秒,也就是1分鐘,即在nagios配置中全部的時間單位都是分鐘。  

未完待續!

相關文章
相關標籤/搜索