宏
使Nagios如此灵活的主要功能之一是能够在命令定义中使用宏。宏允许您在命令中引用来自主机,服务和其他来源的信息。
宏替换-宏如何工作
在Nagios Core执行命令之前,它将使用相应的值替换在命令定义中找到的所有宏。此宏替换发生在Nagios执行的所有类型的命令上-主机和服务检查,通知,事件处理程序等。
某些宏本身可能包含其他宏。其中包括$ HOSTNOTES $,$ HOSTNOTESURL $,$ HOSTACTIONURL $,$ SERVICENOTES $,$ SERVICENOTESURL $和$ SERVICEACTIONURL $宏。
示例1:主机地址宏
当您在命令定义中使用主机和服务宏时,它们指的是为其运行命令的主机或服务的值。让我们尝试一个例子。假设我们使用主机定义和如下所示的check_ping命令:
define host {
host_name linuxbox
address 192.168.1.2
check_command check_ping
...
}
define command {
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:命令参数宏
您也可以将参数传递给命令,如果您希望保持命令定义的通用性,这将非常方便。在对象(即主机或服务)定义中指定参数,方法是使用感叹号(!)将它们与命令名称分开,如下所示:
define service {
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命令:
define command {
command_name check_ping
command_line /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:host_name:service_description$
将HOSTMACRONAME和SERVICEMACRONAME替换为在此处找到的标准服务宏主机之一的名称。
请注意,宏名称由冒号(:)与主机或服务标识符分隔。对于按需服务宏,服务标识符包括主机名和服务描述-它们也用冒号(:)分隔。
提示:按需服务宏可以包含一个空的主机名字段。在这种情况下,将自动使用与服务关联的主机名。
按需主机和服务宏的示例如下:
$HOSTDOWNTIME:myhost $ <---按需主机宏 $SERVICESTATEID:novellserver:DS Database $ <-按需服务宏 $SERVICESTATEID::CPU Load $ <---带空白主机的按需服务宏名称栏位
按需宏也可用于主机组,服务组,联系人和联系人组宏。例如:
$CONTACTEMAIL:john $ <---按需联系人宏 $CONTACTGROUPMEMBERSlinux-admins $ <---按需联系人组宏 $HOSTGROUPALIAS:linux-servers $ <---按需 $SERVICEGROUPALIAS:DNS-Cluster $ <---按需服务组宏
按需组宏
通过使用特殊格式的按需宏声明,可以获取特定组中所有联系人,主机或服务中的宏的值。通过在按需宏中引用特定的主机组,服务组或联系人组名称来执行此操作,如下所示:
- $ HOSTMACRONAME:hostgroup_name:分隔符$
- $ SERVICEMACRONAME:servicegroup_name:分隔符$
- $ CONTACTMACRONAME:contactgroup_name:定界符$
将HOSTMACRONAME,SERVICEMACRONAME和CONTACTMACRONAME替换为在此处找到的标准主机,服务或联系宏之一的名称。您指定的定界符用于分隔每个组成员的宏值。
例如,以下宏将返回以逗号分隔的hg1主机组成员主机的主机状态ID列表:
$HOSTSTATEID:hg1:,$
此宏定义将返回如下所示的内容:
0,2,1,1,0,0,2
自定义变量宏
您在主机,服务或联系人定义中定义的 任何自定义对象变量也可用作宏。自定义变量宏的命名如下:
- $_HOSTvarname$
- $_SERVICEvarname$
- $_CONTACTvarname$
使用名为“ _MACADDRESS”的自定义变量获取以下主机定义…
define host {
host_name linuxbox
address 192.168.1.1
_MACADDRESS 00:01:02:03:04:05
...
}
_MACADDRESS自定义变量将在名为$ _HOSTMACADDRESS $的宏中可用。有关自定义对象变量以及如何在宏中使用它们的更多信息,请参见此处。
宏 清洁
在将某些宏替换为要执行的命令之前,会删除一些潜在危险的外壳元字符。从宏中剥离哪些字符取决于非法_宏_输出_字符指令的设置。以下宏被去除了潜在危险的字符:
- $ HOSTOUTPUT $
- $ LONGHOSTOUTPUT $
- $ HOSTPERFDATA $
- $ HOSTACKAUTHOR $
- $ HOSTACKCOMMENT $
- $ SERVICEOUTPUT $
- $ LONGSERVICEOUTPUT $
- $ SERVICEPERFDATA $
- $ SERVICEACKAUTHOR $
- $ SERVICEACKCOMMENT $
此外,为了安全起见,所有包含自定义变量的宏也会被剥离。
宏作为环境变量
大多数宏都可以用作环境变量,以方便Nagios Core执行的脚本或命令进行引用。出于安全和理智的目的,$用户N $和“按需定制”的主机和服务宏没有可用的环境变量。
包含标准宏的环境变量的名称与其对应的宏名称相同(在此处列出),名称前带有“ NAGIOS_”。例如,$ HOSTNAME $宏可以作为名为“ NAGIOS_HOSTNAME”的环境变量使用。
可用的宏
在此处可以找到Nagios Core中可用的所有宏的列表以及使用时间的图表。