Nagios的配置文件:
Nagios安裝后有四種默認的配置文件:主配置文件、CGI配置文件、資源定義文件、對象定義文件。這些配置文件間具有一些關系,只有充分理解各配置文件,才能使得配置Nagios服務如行雲流水。
主配置文件(nagios.cfg):
Nagios的主配置文件是用來定義Nagios服務的基本參數信息的,其中包括:對象定義文件的聲明、CGI配置文件的聲明、資源定義文件的聲明等。其常用參數如下:
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代表不做日志回滾
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 Admin@logsite.cn #郵件地址 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相關的主機問題通知到聯系人。
}