![在邮件脚本中针对 Icinga2 宏变量运行 Linux 命令?](https://linux22.com/image/668915/%E5%9C%A8%E9%82%AE%E4%BB%B6%E8%84%9A%E6%9C%AC%E4%B8%AD%E9%92%88%E5%AF%B9%20Icinga2%20%E5%AE%8F%E5%8F%98%E9%87%8F%E8%BF%90%E8%A1%8C%20Linux%20%E5%91%BD%E4%BB%A4%EF%BC%9F.png)
例如,我只能将其添加"HOSTDURATIONSEC" = "$host.duration_sec$",
到我的模板中,然后在脚本中使用它,mail-host-notification
例如:State: $HOSTSTATE for $HOSTDURATIONSEC
它告诉我主机处于该状态的时间。但它只给我几秒钟的时间,这在接收警报时乍一看没有什么帮助。
因为HOSTDURATION
不再可用或尚未实施,我尝试使用函数和其他 bash 尝试将秒转换为更易读的内容,mail-host-notification
但似乎不起作用。
我希望能够在该脚本中创建一个新变量,也许使用来自 Linux 包 timetrans 的命令,如下所示:
#!/bin/sh
SECS=$HOSTDURATIONSEC
CONVERTSECONDS=`timetrans -c $SECS`
eval $CONVERTSECONDS
$HRTIME=`eval $CONVERTSECONDS`
template=`cat <<TEMPLATE
Date/Time: $SHORTDATETIME (EST)
Notification Type: $NOTIFICATIONTYPE
Host: $HOSTALIAS
Address: $HOSTADDRESS
State: $HOSTSTATE for $HRTIME
------------------------------------------
New Jersey DC Icinga Monitoring
Additional Info: $HOSTOUTPUT
Notes on this device:
$HOSTNOTES
Comments: $NOTIFICATIONAUTHORNAME $NOTIFICATIONCOMMENT
TEMPLATE
`
...但就像我尝试使用函数转换秒变量一样$HOSTDURATIONSEC
,它不起作用。我尝试了很多方法,但在我看来,Icinga 没有传递env
模板中设置的那些值。
env = {
"NOTIFICATIONTYPE" = "$notification.type$"
"HOSTALIAS" = "$host.display_name$",
"HOSTADDRESS" = "$address$",
"HOSTSTATE" = "$host.state$",
"HOSTNOTES" = "$host.notes$",
"HOSTDURATIONSEC" = "$host.duration_sec$",
"LONGDATETIME" = "$icinga.long_date_time$",
"SHORTDATETIME" = "$icinga.short_date_time$",
"HOSTOUTPUT" = "$host.output$",
"NOTIFICATIONAUTHORNAME" = "$notification.author$",
"NOTIFICATIONCOMMENT" = "$notification.comment$",
"HOSTDISPLAYNAME" = "$host.display_name$",
"USEREMAIL" = "$user.email$"
}
当然,我添加到此列表中的所有内容(例如"SHORTDATETIME" = "$icinga.short_date_time$",
、"HOSTNOTES" = "$host.notes$",
等)都可以正常工作,但我在尝试针对脚本中的这些变量运行 Linux 命令时遇到了麻烦。我遗漏了什么吗?有人知道我哪里做错了吗?非常感谢任何/所有帮助。
答案1
我会把这些计算技巧留在通知脚本中。由于您没有使用 Icinga 2 内部组件,因此摆弄函数毫无意义。
我在你的脚本中注意到的是:
$HRTIME=`eval $CONVERTSECONDS`
正确的是:
HRTIME=`eval $CONVERTSECONDS`
顺便说一句,如果您正在使用timetrans
包dnssec-tools
,那么它在/usr/sbin
,所以不在 icinga/nagios 用户的路径中。
修改后的工作示例:
#!/bin/sh
SECS=$HOSTDURATIONSEC
TIMEREADABLE=`/usr/sbin/timetrans -c $SECS`
template=`cat <<TEMPLATE
Date/Time: $SHORTDATETIME (EST)
Notification Type: $NOTIFICATIONTYPE
Host: $HOSTALIAS
Address: $HOSTADDRESS
State: $HOSTSTATE for $TIMEREADABLE
------------------------------------------
New Jersey DC Icinga Monitoring
Additional Info: $HOSTOUTPUT
Notes on this device:
$HOSTNOTES
Comments: $NOTIFICATIONAUTHORNAME $NOTIFICATIONCOMMENT
TEMPLATE
`
/usr/bin/printf "%b" "$template"
通过以下方式调用:
HOSTDURATIONSEC=123 sh test.sh
PS(1) 如果你在 Icinga 2 中缺少宏,请打开问题来提出建议
PS(2) 不要称呼其他用户为懦夫,这样不好!