宏如何使用
巨集
使Nagios如此靈活的主要功能之一是能夠在命令定義中使用宏。宏允許您在命令中引用來自主機,服務和其他來源的信息。
宏替換-宏如何工作
在Nagios Core執行命令之前,它將使用相應的值替換在命令定義中找到的所有宏。此宏替換發生在Nagios執行的所有類型的命令上-主機和服務檢查,通知,事件處理程序等。
某些宏本身可能包含其他宏。其中包括$ HOSTNOTES $,$ HOSTNOTESURL $,$ HOSTACTIONURL $,$ SERVICENOTES $,$ SERVICENOTESURL $和$ SERVICEACTIONURL $宏。
示例1:主機地址宏
當您在命令定義中使用主機和服務宏時,它們指的是為其運行命令的主機或服務的值。讓我們嘗試一個例子。假設我們使用主機定義和如下定義的check_ping命令:
定義主機{
host_name linuxbox
地址 192.168.1.2
check_command check_ping
…
}
?
定義命令{
command_name check_ping
command_line / usr / local / nagios / libexec / check_ping -H $ HOSTADDRESS $ -w 100.0,90%-c 200.0,60%
}
要為主機的check命令執行的擴展/最終命令行如下所示:
/ usr / local / nagios / libexec / check_ping -H 192.168.1.2 -w 100.0,90%-c 200.0,60%
這樣做的好處是,您可以使用單個命令定義來檢查無限數量的主機。可以使用相同的命令定義檢查每個主機,因為在執行之前,會在命令行中自動替換每個主機的地址。
示例2:命令參數宏
您也可以將參數傳遞給命令,如果您想保持命令定義的通用性,這將非常方便。在對象(即主機或服務)定義中指定參數,方法是使用感嘆號(!)將它們與命令名稱分開,如下所示:
定義服務{
host_name linuxbox
service_description PING
check_command check_ping!200.0,80%!400.0,40%
…
}
在上面的示例中,服務檢查命令具有兩個參數(可以使用$ ARGn $宏進行引用)。$ ARG1 $宏將為“ 200.0,80% ”,而$ ARG2 $宏將為“ 400.0,40% ”(均不帶引號)。假設我們使用前面給出的主機定義和如下定義的check_ping命令:
定義命令{
command_name check_ping
命令行/ usr / local / nagios / libexec / check_ping -H $ HOSTADDRESS $ -w $ ARG1 $ -c $ ARG2 $
}
要為服務的check命令執行的擴展/最終命令行如下所示:
/ usr / local / nagios / libexec / check_ping -H 192.168.1.2 -w 200.0,80% -c 400.0,40%
提示:如果需要在命令參數中傳遞bang(!)字符,可以通過使用反斜杠(\)對其進行轉義來實現。如果需要在命令參數中包含反斜杠,則也應使用反斜杠對它們進行轉義。
按需宏
通常,當您在命令定義中使用主機和服務宏時,它們指的是為其運行命令的主機或服務的值。例如,如果正在為名為“ linuxbox”的主機執行主機檢查命令,則所有標準主機宏都將引用該主機(“ linuxbox”)的值。
如果要在命令中(對于該命令未運行)引用其他主機或服務的值,則可以使用所謂的“按需”宏。按需宏看起來像普通宏,不同之處在于它們包含主機或服務的標識符,并從中獲取其值。這是按需宏的基本格式:
$ HOSTMACRONAME:host_name $
$ SERVICEMACRONAME:主機名:service_description $
將HOSTMACRONAME和SERVICEMACRONAME替換為在此處找到的標準服務宏主機之一的名稱。
請注意,宏名稱由冒號(:)與主機或服務標識符分隔。對于按需服務宏,服務標識符包括主機名和服務描述-它們也用冒號(:)分隔。
提示:按需服務宏可以包含一個空的主機名字段。在這種情況下,將自動使用與服務關聯的主機名。
按需主機和服務宏的示例如下:
$ HOSTDOWNTIME:myhost $ <—點播主機宏
$ SERVICESTATEID:novellserver:DS Database $ <—按需服務宏
$ SERVICESTATEID :: CPU Load $ <—主機名字段為空的按需服務宏
按需宏也可用于主機組,服務組,聯系人和聯系人組宏。例如:
$ CONTACTEMAIL:john $ <—點播聯系人宏
$ CONTACTGROUPMEMBERS:linux-admins $ <—按需聯系人組宏
$ HOSTGROUPALIAS:linux-servers $ <—按需主機組宏
$ SERVICEGROUPALIAS:DNS群集$ <—按需服務組宏
按需組宏
通過為按需宏聲明使用特殊格式,可以獲取特定組中所有聯系人,主機或服務之間的宏值。通過在按需宏中引用特定的主機組,服務組或聯系人組名稱來執行此操作,如下所示:
$ HOSTMACRONAME:hostgroup_name:分隔符 $
$ SERVICEMACRONAME:servicegroup_name:分隔符 $
$ CONTACTMACRONAME:contactgroup_name:定界符 $
將HOSTMACRONAME,SERVICEMACRONAME和CONTACTMACRONAME替換為在此處找到的標準主機,服務或聯系宏之一的名稱。您指定的定界符用于分隔每個組成員的宏值。
例如,以下宏將返回以逗號分隔的hg1主機組成員主機的主機狀態ID列表:
$ HOSTSTATEID:hg1:,$
此宏定義將返回如下所示的內容:
0,2,1,1,0,0,2
自定義變量宏
您在主機,服務或聯系人定義中定義的 任何自定義對象變量也可用作宏。自定義變量宏的命名如下:
$ _HOST 變量名 $
$ _Service VARNAME $
$ _CONTACT VARNAME $
使用名為“ _MACADDRESS”的自定義變量獲取以下主機定義…
定義主機{
host_name linuxbox
地址192.168.1.1
_MACADDRESS 00:01:02:03:04:05
…
}
_MACADDRESS自定義變量將在名為$ _HOSTMACADDRESS $的宏中可用。有關自定義對象變量以及如何在宏中使用它們的更多信息,請參見此處。
宏觀清潔
在將某些宏替換為要執行的命令之前,會刪除一些潛在危險的外殼元字符。從宏中剝離哪些字符取決于非法_宏輸出字符指令的設置。以下宏被去除了潛在危險的字符:
此外,為安全起見,所有包含自定義變量的宏也會被剝離。
宏作為環境變量
大多數宏都可以用作環境變量,以方便Nagios Core執行的腳本或命令進行引用。出于安全和理智的目的,$用戶N $和“按需定制”的主機和服務宏沒有可用的環境變量。
包含標準宏的環境變量的名稱與其對應的宏名稱相同(在此處列出),名稱前帶有“ NAGIOS_”。例如,$ HOSTNAME $宏可以作為名為“ NAGIOS_HOSTNAME”的環境變量使用。
可用的宏
在此處可以找到Nagios Core中可用的所有宏的列表以及使用時間的圖表。
Nagios Core中文使用教程