Nagios配置文件詳解

轉載自http://www.cnblogs.com/hanxiaomeng/p/5423028.html

 

Nagios的配置文件:

Nagios安裝後有四種默認的配置文件:主配置文件、CGI配置文件、資源定義文件、對象定義文件。這些配置文件間具有一些關係,只有充分理解各配置文件,才能使得配置Nagios服務如行雲流水。

 

主配置文件(nagios.cfg):

Nagios的主配置文件是用來定義Nagios服務的基本參數信息的,其中包括:對象定義文件的聲明、CGI配置文件的聲明、資源定義文件的聲明等。其常用參數如下:

按 Ctrl+C 複製代碼

log_file=/usr/local/nagios/var/nagios.log                        #日誌文件
cfg_file=/etc/nagios/objects/commands.cfg                        #命令定義文件
resource_file=/etc/nagios/resource.cfg                           #資源(宏)定義文件
status_file=/usr/local/nagios/var/status.dat                     #Nagios狀態文件,獲取到的監控信息存在該文件中,CGI就展示該文件信息
status_update_interval=10                                        #狀態文件多少秒更新一次
nagios_user=nagios                                               #nagios服務的運行者
nagios_group=nagios                                              #nagios服務的運行組
check_external_commands=1                                        #是否允許CGI執行外部腳本(是否允許通過Web做一些監控管理操作)
command_check_interval=-1                                        #外部命令檢測間隔,-1代表儘可能多的檢測,這個值的時間單位依賴於interval_length值
interval_length=60                                               #設定時間單位長度,默認爲60s
command_file=/usr/local/nagios/var/rw/nagios.cmd                 #命令定義文件
external_command_buffer_slots=4096                               #外部命令緩衝區大小,從命令定義文件讀取過來命令但Nagios進程還沒處理所存放的位置
enable_notifications={1|0}                                       #Nagios是否啓用通知功能,1表示啓用通知,0表示關閉通知。
service_check_timeout=60                                         #設定服務檢測命令的執行超時時長,一般是插件出問題超時
host_check_timeout=30                                            #設定主機檢測命令的執行超時時長,一般是插件出問題超時
notification_timeout=30                                          #設定通知命令的執行超時時長,一般是插件出問題超時
execute_service_checks={1|0}                                     #設定Nagios是否啓用主動服務檢測機制,1表示啓用,0表示關閉。
accept_passive_service_checks={1|0}                              #設定Nagios是否接受被動服務檢測的結果,1表示接受,0表示拒絕。
execute_host_checks={1|0}                                        #設定Nagios是否啓用主動主機檢測機制,1表示啓用,0表示關閉。
accept_passive_host_checks={1|0}                                 #設定Nagios是否接受被動主機檢測的結果,1表示接受,0表示拒絕。
enable_event_handlers=1                                          #設定Nagios是否啓用時間處理機制,1表示啓用,0表示關閉。
log_rotation_method={n|h|d|w|m}                                  #指定日誌滾動方法,日誌滾動就是將日誌分開,n代表不做日誌回滾
按 Ctrl+C 複製代碼
 

CGI配置文件(cgi.cfg):

CGI配置文件是用來定義Nagios的Web接口的配置,例如網頁目錄、認證用戶等等。CGI的配置在主配置文件也有一部分。其常用參數如下:

複製代碼
main_config_file                              #主配置文件是哪個
physical_html_path=/usr/local/nagios/share    #網頁目錄
url_html_path=/nagios                         #URL路徑
use_authentication=1                          #是否啓用認證
use_ssl_authentication=0                      #認證是否啓用SSL加密
 
#認證各權限相關,nagiosadmin是CGI用戶
authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
複製代碼
 

資源定義文件(resource.cfg):

資源定義文件用來定義Nagios的配置文件中的宏,"宏"類似變量,其可以靈活的引用到不同監控對象獲得不同值,Nagios支持用戶自定義32個宏,從$USER1~$USER32$。CGI程序不會讀取資源定義文件,所以除了宏外,還可以在其中定義一些敏感信息,例如訪問某服務的密碼等,從而避免這些敏感信息被展示到Web接口上。

資源定義文件中默認只有一行宏定義:

$USER1$=/usr/local/nagios/libexec             #定義$USER1$宏的值爲/usr/local/nagios/libexec
除了自定義宏外,Nagios還內置了一些宏,常見的有:

複製代碼
HOSTNAME:           #用於引用host_name指定所定義的主機的主機名;每個主機的主機名都是唯一的;
HOSTADDRESS:        #用於引用host對象中的address指令的值,它通常可以爲IP地址或主機名;
HOSTDISPLAYNAME:    #用於引用host對象中alias指令的值,用以描述當前主機,即主機的顯示名稱;
HOSTSTATE:         #某主機的當前狀態,爲UP,DOWN,UNREACHABLE三者之一;
HOSTGROUPNAMES:     #用於引用某主機所屬的所有主機組的簡名,主機組名稱之間以逗號分隔;
LASTHOSTCHECK:     #用於引用某主機上次檢測的時間和日期,Unix時間戳格式;
LISTHOSTSTATE:     #用於引用某主機前一次檢測時的狀態,爲UP,DOWN或UNREACHABLE三者之一;
SERVICEDESC:        #用於引用對應service對象中的desccription指令的值;
SERVICESTATE:       #用於引用某服務的當前狀態,爲OK,WARNING,UNKOWN或CRITICAL四者之一;
SERVICEGROUPNAMES:  #用於引用某服務所屬的所有服務組的簡名,服務組名稱之間以逗號分隔;
CONTACTNAME:        #用於引用某contact對象中contact_name指令的值;
CONTACTALIAS:       #用於引用某contact對象中alias指令的值;
CONTACTEMAIL:       #用於引用某contact對象中email指令的值;
CONTACTGROUPNAMES:  #用於引用某contact所屬的所有contact組的簡名,contact組名稱之間以逗號分隔;
複製代碼
 

對象定義文件(object_name.cfg):

Nagios中,需要定義的監控我們稱作一個對象,對象定義文件用來定義對哪些對象進行什麼樣的監控(對象定義文件需要事先在主配置文件中聲明纔會生效)。Nagios常定義的對象有如下幾個:

①主機:“主機”指的是被監控的機器,可是物理主機,也可以是虛擬設備。一個主機對象的定義至少應該包含一個簡名(short name)、一個別名、一個IP地址和用到的檢測命令。此外,很多時候,其定義中還應該包含監控時段、聯繫人及要通知的相關問題、檢測的頻率、重試檢測的方式、發送通知的頻率等。主機的定義例子如下:

複製代碼
define host{     #主機定義聲明
       host_name              web1                # 設定主機名
       hostgroups             web                 # 所屬主機組,可以替代hostgroup
       alias                  www                 # 主機別名
       address                172.16.100.11       # 主機IP地址
       check_command          check-host-alive    # 檢測命令
       check_interval         5                   # 檢測間隔
       retry_interval         1                   # 重試間隔,一次檢測失敗後,重試的間隔
       max_check_attempts     5                   # 最大檢測次數,一次檢測失敗後,重複檢測的次數
       check_period           24x7                # 檢測的時間段
       contact_groups         linux-admins        # 聯繫人組
       notification_interval  30                  # 再次通知間隔
       notification_period    24x7                # 通知時間
       notification_options   d,u,r               # 哪種狀態進行通知;d(Down),u(UNREACHABLE),r(recovery),f,s
}
複製代碼
其中的notification_options用於指定當主機處於什麼狀態時應該發送通知。其各狀態及其表示符如下:

d —— DOWN                       #掛掉了
u —— UNREACHABLE                #不可達
r —— UP(host recovery)          #重新恢復態
f —— flapping                   #異常
s —— 調試宕機時間開始或結束
②主機組:"主機組"由多個主機對象組成。每一個主機組對象一般包含一個全局唯一的簡名、一個描述名以及屬於這個組的成員。此外,一個主機組的成員也可以是其它主機組。主機組的定義例子如下:

define hostgroup{   #主機組定義聲明
     hostgroup_name    Web                 #主機組的名字
     alias             Linux Web Servers   #主機組別名
     members           web1,web2           #組中的主機有哪些
}
③服務:“服務”即某“主機”所提供的功能或資源對象,如HTTP服務、存儲空間資源或CPU負載等。服務附屬於主機,每一個服務使用服務名來標識,此服務名要求在特定的主機上具有唯一性。每一個服務對象還通常定義一個檢測命令及如何進行問題通知等。服務的定義例子如下:

複製代碼
define service{
     host_name               web1,web2,...     #主機名,可能有多個主機提供相同的服務
     service_description     www               #服務的描述
     check_command           check_http        #檢測的命令
     check_interval          10                #檢測時間間隔
     check_period            24x7              #檢測的時間
     retry_interval          3                 #重試時間間隔
     max_check_attempts      3                 #最大檢測次數
     notification_interval   30                #再次同時間隔
     notification_period     24x7              #通知時間
     notification_options    w,c,u,r           #哪種狀態進行通知:w(warning)/c(critical)/u(unknown)/r(recovery)
     contact_groups          linux-admins      #通知組
}
複製代碼
與主機對象有所不同的是,有時個,多個主機可能會提供同樣的服務,比如多臺服務器同時提供Web等。因此,在定義服務對象時,其host_name可以爲逗號隔開的多個主機。

其中的notification_options用於指定當服務處於什麼狀態時應該發送通知。其各狀態及其表示符如下:

w —— WARNING                     #警告
u —— UNKNOWN                     #未知
c —— CRITICAL                    #緊急
r —— OK(recovery)                #重新恢復
f —— flapping                    #異常
s —— 調試宕機時間開始或結束
④服務組:"服務組"由多個服務對象組成。每一個服務組對象一般包含一個全局唯一的簡名、一個描述名以及屬於這個組的成員。此外,一個服務組的成員通常是某主機上的某服務,其指定時使用<host>,<service>的格式,多個服務也使用逗號分隔。服務組的定義例子如下:

define servicegroup{
     servicegroup_name    webservices         #服務組名
     alias All services   related to web      #別名
     members              we1,www,web2,www    #主機的服務
}
⑤聯繫人:“聯繫人”對象用於定義某主機設備的擁有者或某問題出現時接受通知者。聯繫人對象的定義包含一個全局唯一的標識名稱、一個描述名及一個或多個郵件地址等。此外,其通常還應該包括對相應的主機或服務出現故障時所用到的通知命令。例如:

複製代碼
define contact{
     contact_name                      Admin                   #聯繫人名字
     alias                             Nagios Admin            #別名
     email                             [email protected]        #郵件地址
     host_notification_period          workinghours            #主機通知時間
     service_notification_period       workinghours            #服務通知時間
     host_notification_options         d,u,r                   #主機什麼狀態發生通知,d(down)、u(UNREACHABLE)、r(recovery)
     service_notification_options      w,u,c,r                 #服務聲明狀態發生通知,w(warning)、u(unkown)、c(critical)、r(recover)
     host_notification_commands        host-notify-by-email    #主機通知命令
     service_notification_commands     notify-by-email         #通知命令
}
複製代碼
⑥聯繫人組:"聯繫人組"由多個聯繫人對象構成。一個聯繫人組對象包含一個全局惟一的標識名稱,一個描述名稱和屬於此聯繫人組的聯繫人成員(members)或其人聯繫人組成員(contactgroup_members)。例如:

define contactgroup{
     contactgroup_name      admins                   #組名
     alias                  Nagios Administrators    #別名
     members                nagiosadmin              #組成員
}
⑦時間週期:“時間週期”用於定義某“操作”可以執行或不能執行的日期和時間跨度,如工作日內的每天8:00-18:00等,其可以在多個不同的操作中重複引用。一個時段對象的定義包含一個全局唯一的名稱標識及一個或多個時間跨度。例如:

複製代碼
define timeperiod{
    timeperiod_name     nonworkhours                #日程名稱
    alias               Non-Work Hours              #別名
    sunday              00:00-24:00                 ; Every Sunday of every week
    monday              00:00-09:00,17:00-24:00     ; Every Monday of every week
    tuesday             00:00-09:00,17:00-24:00     ; Every Tuesday of every week
    wednesday           00:00-09:00,17:00-24:00     ; Every Wednesday of every week
    thursday            00:00-09:00,17:00-24:00     ; Every Thursday of every week
    friday              00:00-09:00,17:00-24:00     ; Every Friday of every week
    saturday            00:00-24:00                 ; Every Saturday of every week
}
複製代碼
⑧命令:“命令”用於描述如何對主機或服務進行狀態檢測。服務對象的定義包含兩個指令:名字(command_name)和命令行(command_line);名字用於標識此命令對象,命令行則是執行檢測時真正要執行的命令。

當命令對象用於檢測其它對象時,其通常需要用到額外的參數以標識要檢測的某特定對象,此時,命令對象需要以command_name[!arg1][!arg2][...]的語法格式進行引用。因此,命令對象的定義中,命令行指令中通常會用到宏$ARG1$, $ARG2$...,對應用於接收[!arg1][!arg2][...]傳遞而來的參數。例如:

define command{
     command_name    notify-host-by-email        #命令名,用於調用
     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$
}
⑨模板定義及繼承:Nagios通過功能強大的繼承引擎來實現基於模板的對象繼承。這就意味着可以定義將某類型的對象的通用屬性組織起來定義爲對象模板,並在定義其類型中的對象時直接從此模板繼承其相關屬性的定義。定義對象模板的方法很簡單,通常只需要在定義某類型對象時使用register指令並將其值設定爲0即可。對象模板的名稱通常使用name指令定義,這與某特定類型對象使用的指令也有所不同。而定義此種類型的對象時,只需要使用use指令並將其值設定爲對應模板的名稱即可。例如:

複製代碼
##host模板定義:模板定義使用register 0作爲關鍵字
define host{
       name                    generic-server       #模板名字
       check_command           check-host-alive     #命令
       check_interval          5                    #多久檢測一次
       retry_interval          1                    #當服務出現問題,多久重試一次
       max_check_attempts      5                    #最大重試次數
       check_period            24x7                 #監控的時間週期
       notification_interval   30                   #錯誤通知間隔時長
       notification_period     24x7                 #通知時間週期
       notification_options    d,u,r                #變爲何種狀態通知
       register                0                    #模板定義關鍵字
}
 
##host模板繼承:繼承一般在對象定義文件中使用Use繼承
define host{
       use                     generic-server       #繼承generic-server模板
       host_name               webserver1           #主機名
       alias                   Web Server 01        #主機別名
       address                 172.16.100.11        #IP地址
       contact_groups          linux-admins         #聯繫組
}
複製代碼
一個對象在定義時也以同時繼承多個模板,此時只需要爲use指令指定以逗號分隔的多個模板名稱即可。同時,Nagios也支持模板的多級繼承。

⑩依賴關係:爲了描述Nagios對象間的依賴關係,這裏要用到兩個術語:master(被依賴的主機或服務)和dependent(依賴關係中的依賴於master的Nagios對象)。Nagios可以定義對象間的彼此依賴性,也可以爲某對象定義其父對象,甚至也可以指定此依賴關係生效的時段。下面是一個關於主機依賴關係定義的例子:

複製代碼
define hostdependency{
    dependent_host_name             backuphost    #定義dependent主機
    host_name                       vpnserver1    #dependent主機名             
    dependency_period               web1          #依賴的主機
    execution_failure_criteria      c,u           #定義master爲何種狀態時不再對依賴此master的主dependent機進行檢測
    notification_failure_criteria   c,u,w         #定義master處於何種狀態時不會發送dependent相關的主機問題通知到聯繫人。
}
複製代碼
服務間依賴關係的定義類似於主機間的依賴關係,例如:

複製代碼
define servicedependency{
       host_name                       mysqlserver       #運行該服務的主機
       service_description             mysql             #服務描述
       dependent_hostgroup_name        apacheservers     #dependent主機組
       dependent_service_description   webservice        #dependent服務描述
       execution_failure_criteria      c,u               #定義master爲何種狀態時不再對依賴此master的主機進行檢測 
       notification_failure_criteria   c,u,w             #定義master處於何種狀態時不會發送dependent相關的主機問題通知到聯繫人。
}

 

 

發佈了40 篇原創文章 · 獲贊 15 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章