在邮件脚本中针对 Icinga2 宏变量运行 Linux 命令?

在邮件脚本中针对 Icinga2 宏变量运行 Linux 命令?

看起来有些宏在冰加1冰加2

例如,我只能将其添加"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`

顺便说一句,如果您正在使用timetransdnssec-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) 不要称呼其他用户为懦夫,这样不好!

相关内容