通知模板变量
消息模板里可用的事件字段与辅助函数。
消息模板用的是 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 内部会失效。