Nagios 宏工作原理

使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$

HOSTMACRONAMESERVICEMACRONAME替换为在此处找到的标准服务宏主机之一的名称。

请注意,宏名称由冒号(:)与主机或服务标识符分隔。对于按需服务宏,服务标识符包括主机名和服务描述-它们也用冒号(:)分隔。

 提示:按需服务宏可以包含一个空的主机名字段。在这种情况下,将自动使用与服务关联的主机名。

按需主机和服务宏的示例如下:

$HOSTDOWNTIME:myhost $ <---按需主机宏
$SERVICESTATEID:novellserver:DS Database $ <-按需服务宏
$SERVICESTATEID::CPU Load $ <---带空白主机的按需服务宏名称栏位

按需宏也可用于主机组,服务组,联系人和联系人组宏。例如:

$CONTACTEMAIL:john $ <---按需联系人宏
$CONTACTGROUPMEMBERSlinux-admins $ <---按需联系人组宏
$HOSTGROUPALIAS:linux-servers $ <---按需
$SERVICEGROUPALIAS:DNS-Cluster $ <---按需服务组宏

按需组宏

通过使用特殊格式的按需宏声明,可以获取特定组中所有联系人,主机或服务中的宏的值。通过在按需宏中引用特定的主机组,服务组或联系人组名称来执行此操作,如下所示:

  • HOSTMACRONAMEhostgroup_name分隔符$
  • SERVICEMACRONAMEservicegroup_name分隔符$
  • CONTACTMACRONAMEcontactgroup_name定界符$

HOSTMACRONAMESERVICEMACRONAMECONTACTMACRONAME替换为在此处找到的标准主机,服务或联系宏之一的名称。您指定的定界符用于分隔每个组成员的宏值。

例如,以下宏将返回以逗号分隔的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 $的宏中可用。有关自定义对象变量以及如何在宏中使用它们的更多信息,请参见此处

宏 清洁

在将某些宏替换为要执行的命令之前,会删除一些潜在危险的外壳元字符。从宏中剥离哪些字符取决于非法__输出_字符指令的设置。以下宏被去除了潜在危险的字符:

此外,为了安全起见,所有包含自定义变量的宏也会被剥离。

宏作为环境变量

大多数宏都可以用作环境变量,以方便Nagios Core执行的脚本或命令进行引用。出于安全和理智的目的,$用户N $和“按需定制”的主机和服务宏没有可用的环境变量。

包含标准宏的环境变量的名称与其对应的宏名称相同(在此处列出),名称前带有“ NAGIOS_”。例如,$ HOSTNAME $宏可以作为名为“ NAGIOS_HOSTNAME”的环境变量使用。

可用的宏

此处可以找到Nagios Core中可用的所有宏的列表以及使用时间的图表。

觉得文章有用?

点个广告表达一下你的爱意吧 !😁