跳到主要内容

通知模板变量

消息模板里可用的事件字段与辅助函数。

消息模板用的是 Go 的 text/template。

最容易踩的一点:事件字段挂在 $event 上,不是模板顶层的 .。 写成 {{"{{"}}.RuleName{{"}}"}} 会静默渲染成空字符串, {{"{{"}}timeformat .TriggerTime{{"}}"}} 直接报 invalid value; expected int64。

{{ $event.RuleName }} ✅
{{ .RuleName }} ❌ 渲染成空
{{ timeformat $event.TriggerTime }} ✅

想抄一份能跑的,看内置的 dingtalk 模板——那是最全的样例。

常用事件字段​

字段说明
$event.RuleName规则名
$event.RuleNote规则备注
$event.Severity级别,1 / 2 / 3
$event.IsRecovered是恢复事件还是触发事件
$event.TargetIdent对象标识(机器名等)
$event.TargetNote对象备注
$event.GroupName业务组名。取自规则所属业务组,不是对象所属业务组
$event.TriggerValue触发时的值
$event.TriggerTime触发时间戳,配 timeformat 用
$event.FirstTriggerTime连续告警的首次触发时间,算持续时长要用它
$event.LastEvalTime上次判定时间。恢复事件用它当恢复时间
$event.TagsJSON标签数组
$event.AnnotationsJSON.<键>注解,比如 $event.AnnotationsJSON.summary
$event.RunbookURL规则上填的处理手册链接
$event.Cate数据源类型
$event.DatasourceId数据源 ID

常用辅助函数​

函数用途
timeformat时间戳转可读时间
humanizeDurationInterface秒数转「3 分 20 秒」这类
formatDecimal保留小数位
add sub mul div四则运算
now当前时间,常用 now.Unix
toUpper toLower title大小写
contains match reReplaceAll字符串判断与替换
split join字符串切分与拼接
jsonMarshal转 JSON,webhook 类媒介常用
humanize humanizePercentage数字友好化
escape unescaped safeHtml转义控制

算持续时长的标准写法(抄自内置模板):

{{ $d := sub now.Unix $event.FirstTriggerTime }}{{ humanizeDurationInterface $d }}

恢复事件要用 sub $event.LastEvalTime $event.FirstTriggerTime。

有几类媒介不消费模板​

callback、flashduty、pagerduty 这三类不走消息模板—— 它们的请求体直接透传事件 JSON,界面上也不给选模板。 其余媒介缺模板会整条丢弃,并写一条失败的通知记录。

站点变量​

站点地址这类值用 {{"{{"}}$.domain{{"}}"}},注意有那个点。 写成 {{"{{"}}$domain{{"}}"}} 取不到,写成 {{"{{"}}.domain{{"}}"}} 在 range / with 内部会失效。

相关​