前言
夜莺的 v7.3.2 版本,在告警事件的结构体中,添加了 Target 字段,通过这个新的字段,我们可以在告警通知内容中,展示更详细的机器信息,可以帮助运维人员更快速地定位和解决问题。
Target 字段包含了告警机器更详细的元信息,元信息包括下面这些字段:

核心要点
Target字段用于在告警事件里携带机器元信息,适合补充机器名、IP、CPU、内存、采集器版本等上下文。- 通知模板可以通过
{{.Target.字段名称}}读取这些信息,并用{{if .Target}}避免非机器类告警模板渲染异常。 - 对机器相关告警来说,把关键机器信息放进通知正文,可以减少值班人员打开多个页面确认告警对象的时间。
- 本文以钉钉通知为例,其他通知媒介使用同一套模板变量思路。
在告警中添加机器信息
本文主要介绍如何在机器相关的告警通知中展示更丰富的机器信息。配置过程可以拆成三步:确认 Target 可用字段、修改通知模板、验证最终通知内容。
以钉钉通知举例,如果我们想将告警机器的 CPU使用率 和 内存使用率 在告警通知中展示出来,可以按照如下方式配置通知模板。
首先,了解下 Target 字段有哪些内容可以使用,主要有下面这些字段,其中 CpuUtil 是 cpu 使用率,MemUtil 是机器的内存使用率,待会我们编写通知模板的时候,会用到这两个字段。
type Target struct {
Id int64
GroupId int64 // 机器所属业务组的 id
Ident string // 机器的标识
Note string // 机器的备注
Tags string // 机器在页面上打的标签,字符串格式
TagsJSON []string // 机器在页面上打的标签,数组格式
HostTags []string // categraf上报的标签,数组格式
TagsMap map[string]string // 机器的所有标签 map 格式
UpdateAt int64 // 机器最新的心跳时间
HostIp string // 机器的 ip
AgentVersion string // 机器上采集器的版本
OS string // 机器的操作系统
UnixTime int64 // 机器的系统时间
Offset int64 // 机器和夜莺服务端偏离的时间
TargetUp float64 // 机器是否部署了采集器
MemUtil float64 // 机器的内存使用率
CpuNum int // 机器的 cpu 核数
CpuUtil float64 // 机器的 cpu 使用率
Arch string // 机器的 cpu 架构
}
其次,修改通知模板,完整的通知模版可以参考这里,我们可以在通知模板中增加下面的字段:
{{if .Target}}
- **机器详情**:
- 机器名:{{.Target.Ident}}
- 内存使用率:{{printf "%.2f" .Target.MemUtil}}
- CPU使用率:{{printf "%.2f" .Target.CpuUtil}}
{{end}}
备注:如果想使用其他字段,在模板中添加
{{.Target.字段名称}}即可,比如想要展示机器的 IP 地址,可以添加机器 IP:{{.Target.HostIp}}。
| 常用字段 | 含义 | 通知模板示例 |
|---|---|---|
Ident |
机器标识 | {{.Target.Ident}} |
HostIp |
机器 IP | {{.Target.HostIp}} |
CpuUtil |
CPU 使用率 | {{printf "%.2f" .Target.CpuUtil}} |
MemUtil |
内存使用率 | {{printf "%.2f" .Target.MemUtil}} |
AgentVersion |
采集器版本 | {{.Target.AgentVersion}} |
TagsMap |
机器标签 map | {{.Target.TagsMap}} |
最后收到的通知内容如下图所示,可以在通知内容中看到机器的内存和 CPU 使用率:

常见注意事项
- 只在机器相关告警里使用
Target信息;模板里建议保留{{if .Target}}判断。 - 展示数值类字段时,可以用
printf控制小数位,避免通知内容过长。 - 通知正文只放排障最需要的信息即可,更多元信息可以通过告警详情页继续查看。
参考链接
FAQ
Q1:为什么要在告警通知里展示机器信息?
机器名、IP、CPU、内存等信息能帮助值班人员先判断告警对象和资源状态,减少在通知、机器列表和告警详情之间来回切换。
Q2:模板中为什么要写 {{if .Target}}?
并不是所有告警事件都一定有机器对象。加上判断后,只有存在 Target 时才渲染机器详情,模板更稳妥。
Q3:除了 CPU 和内存,还能展示哪些字段?
可以展示 Ident、HostIp、AgentVersion、OS、TagsMap 等字段,具体取决于告警事件里的 Target 内容。
