1、Nagios的主配置文件
Nagios的主配置文件為nagios.cfg,其語法非常簡潔,通常#開頭的行為注釋行,而參數的設置格式為<parameter>=<value>;其中,有些參數是可以重復出現的。其中常用的參數說明如下:
log_file: 設定Nagios的日志文件;
cfg_file: Nagios對象定義的相關文件,此參數可重復使用多次以指定多個文件;
cfg_dir: 設定Nagios對象定義的相關文件所在的目錄,此目錄中的所有文件都會被作為對象定義的文件;此參數可重復使用多次以指定多個目錄;
resource_file: 設定Nagios附加的宏定義的相關文件;
status_file: 設定Nagios存儲所有主機和服務當前狀態信息的文件;
status_update_interval: 設定status_file指定的文件中狀態信息的更新頻率;
service_check_timeout: 設定服務檢測的超時時間,默認為60秒;
host_check_timeout: 設定主機檢測的超時時間,默認為30秒;
notification_timeout: 設定通知信息發送嘗試的超時時間,默認為30秒;
2、resource_file和宏定義
在主配置文件中,參數resource_file用於定義所有用戶變量(即“宏”)的存儲文件,它用於存儲對象定義中的可以訪問的額外信息,如訪問某服務的密碼等;因此,這些信息通常都是些敏感數據,一般不允許通過Web接口來訪問。此文件中可以定義的宏可多達32個,它們分別為$USER1$,$USER2$...$USER32,這些宏一般在check命令中引用。通常情況下$USER1$用於引用Nagios插件所在目錄這個路徑信息,因此,一般不建議修改其值。
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組名稱之間以逗號分隔;
Nagios 3還支持自定義宏,只是它的定義和使用方式比較獨特。管理員可以在某類型對象的定義中使用額外的指令,並能夠在命令中使用特別格式的宏來引用此指令的值。其引用方式根據對象類型的不同也有所不同,具體如下:
$_HOST<variable>$ – 引用在主機對象中定義的指令的值;
$_SERVICE<variable>$ – 引用在服務對象中定義的指令的值;
$_CONTACT<variable>$ – 引用在聯系人對象中定義的指令的值;
一個簡單的例子如下:
如某主機定義為:
define host
{
host_name somemachine
address 10.0.0.1
_MAC 12:34:56:78:90:ab
check_command check-host-by-mac
}
對應的檢測命令則可以定義為:
define command
{
command_name check-host-by-mac
command_line $USER1$/check_hostmac -H $HOSTADDRESS$ -m $_HOSTMAC$
}
3、定義主機對象
“主機”指的是被監控的機器,可是物理主機,也可以是虛擬設備。一個主機對象的定義至少應該包含一個簡名(short name)、一個別名、一個IP地址和用到的檢測命令。此外,很多時候,其定義中還應該包含監控時段、聯系人及要通知的相關問題、檢測的頻率、重試檢測的方式、發送通知的頻率等。具體的各指令及說明請參見官方文檔:http://nagios.sourceforge.net/docs/3_0/objectdefinitions.html#host。
一個主機定義的例子:
define host
{
host_name webserver1
hostgroups webservers
alias www.magedu.com
address 172.16.100.11
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
}
其中的notification_options用於指定當主機處於什么狀態時應該發送通知。其各狀態及其表示符如下:
d —— DOWN
u —— UNREACHABLE
r —— UP(host recovery)
f —— flapping
s —— 調試宕機時間開始或結束
主機可以被划分成組,這些組即主機組。每一個主機組對象一般包含一個全局唯一的簡名、一個描述名以及屬於這個組的成員。此外,一個主機組的成員也可以是其它主機組。主機組的定義例子如下:
define hostgroup
{
hostgroup_name webservers
alias Linux web servers
members webserver1
}
4、定義服務對象
“服務”即某“主機”所提供的功能或資源對象,如HTTP服務、存儲空間資源或CPU負載等。服務附屬於主機,每一個服務使用服務名來標識,此服務名要求在特定的主機上具有唯一性。每一個服務對象還通常定義一個檢測命令及如何進行問題通知等。
define service
{
host_name webserver1
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
contact_groups linux-admins
}
其中的notification_options用於指定當服務處於什么狀態時應該發送通知。其各狀態及其表示符如下:
w —— WARNING
u —— UNKNOWN
c —— CRITICAL
r —— OK(recovery)
f —— flapping
s —— 調試宕機時間開始或結束
與主機對象有所不同的是,有時個,多個主機可能會提供同樣的服務,比如多台服務器同時提供Web等。因此,在定義服務對象時,其host_name可以為逗號隔開的多個主機。
服務可以被划分成組,這些組即服務組。每一個服務組對象一般包含一個全局唯一的簡名、一個描述名以及屬於這個組的成員。此外,一個服務組的成員通常是某主機上的某服務,其指定時使用<host>,<service>的格式,多個服務也使用逗號分隔。服務組的定義例子如下:
define servicegroup
{
servicegroup_name webservices
alias All services related to web
members webserver1,www,webserver2,www
}
5、定義命令對象
“命令”用於描述如何對主機或服務進行狀態檢測。服務對象的定義包含兩個指令:名字(command_name)和命令行(command_line);名字用於標識此命令對象,命令行則是執行檢測時真正要執行的命令。
當命令對象用於檢測其它對象時,其通常需要用到額外的參數以標識要檢測的某特定對象,此時,命令對象需要以command_name[!arg1][!arg2][...]的語法格式進行引用。因此,命令對象的定義中,命令行指令中通常會用到宏$ARG1$, $ARG2$...,對應用於接收[!arg1][!arg2][...]傳遞而來的參數。
如下命令對象的定義:
define command
{
command_name check_local_swap
command_line $USER1$/check_swap -w $ARG1$ -c $ARG2$
}
如下的服務中使用上面定義的命令對象來檢測服務對象:
define service
{
host_name localhost
service_description Swap Usage
check_command check_local_swap!20!10
}
6、定義“時段”對象
“時段”用於定義某“操作”可以執行或不能執行的日期和時間跨度,如工作日內的每天8:00-18:00等,其可以在多個不同的操作中重復引用。一個時段對象的定義包含一個全局唯一的名稱標識及一個或多個時間跨度。例如:
define timeperiod
{
timeperiod_name workinghours
alias Working Hours, from Monday to Friday
monday 09:00-17:00
tuesday 09:00-17:00
wednesday 09:00-17:00
thursday 09:00-17:00
friday 09:00-17:00
}
其中,時間的指定格式有許多方式:
日歷時間:格式為YYYY-MM-DD,如2012-04-21;
日期:如 April 21;
每月的某一天:如 day 21,指每月的21號;
每月的第幾個周幾:如 saturday 1,指每月的第一個星期六;
星期幾:如monday, tuesday等;
7、定義聯系人對象
“聯系人”對象用於定義某主機設備的擁有者或某問題出現時接受通知者。聯系人對象的定義包含一個全局唯一的標識名稱、一個描述名及一個或多個郵件地址等。此外,其通常還應該包括對相應的主機或服務出現故障時所用到的通知命令。例如:
define contact
{
contact_name mageedu
alias Mage Education
email linuxedu@magedu.com
host_notification_period workinghours
service_notification_period workinghours
host_notification_options d,u,r
service_notification_options w,u,c,r
host_notification_commands host-notify-by-email
service_notification_commands notify-by-email
}
聯系人也可划分為組,即聯系人組。一個聯系人組對象包含一個全局惟一的標識名稱,一個描述名稱和屬於此聯系人組的聯系人成員(members)或其人聯系人組成員(contactgroup_members)。例如:
define contactgroup
{
contactgroup_name linux-admins
alias Linux Administrators
members magedu, mageedu
}
在主機或服務對象的定義中,既可以指定聯系人,也可以指定聯系人組。當然,某主機的問題聯系人與其上運行的服務的聯系人也可以不同。
8、模板及對象繼承
Nagios通過功能強大的繼承引擎來實現基於模板的對象繼承。這就意味着可以定義將某類型的對象的通用屬性組織起來定義為對象模板,並在定義其類型中的對象時直接從此模板繼承其相關屬性的定義。定義對象模板的方法很簡單,通常只需要在定義某類型對象時使用register指令並將其值設定為0即可。對象模板的名稱通常使用name指令定義,這與某特定類型對象使用的指令也有所不同。而定義此種類型的對象時,只需要使用use指令並將其值設定為對應模板的名稱即可。例如:
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
}
define host
{
use generic-server
name webserver1
alias Web Server 01
address 172.16.100.11
contact_groups linux-admins
}
一個對象在定義時也以同時繼承多個模板,此時只需要為use指令指定以逗號分隔的多個模板名稱即可。同時,Nagios也支持模板的多級繼承。
9、依賴關系
為了描述Nagios對象間的依賴關系,這里要用到兩個術語:master(被依賴的主機或服務)和dependent(依賴關系中的依賴於master的Nagios對象)。Nagios可以定義對象間的彼此依賴性,也可以為某對象定義其父對象,甚至也可以指定此依賴關系生效的時段。下面是一個關於依賴關系定義的例子:
define hostdependency
{
dependent_host_name backuphost
host_name vpnserver1
dependency_period maintenancewindows
}
其中host_name用於定義master主機,dependent_host_name定義dependent主機。而在依賴關系的定義中,通常還會用到execution_failure_criteria定義master主機為何種狀態時不再對依賴於此master的主機進行檢測,notification_failure_criteria用於定義master處於何種狀態時不會發送dependent相關的主機問題通知到聯系人。
服務間依賴關系的定義類似於主機間的依賴關系,例如:
define servicedependency
{
host_name mysqlserver
service_description mysql
dependent_hostgroup_name apacheservers
dependent_service_description webservice
execution_failure_criteria c,u
notification_failure_criteria c,u,w
}
