Skip to main content
Monitors 告警规则的 备注描述(Description) 用于定义告警和恢复事件中的说明文本。你可以使用 Go text/template 引用告警标签、查询值、关联查询结果和安全的 Sprig 函数,生成 Text 或 Markdown 格式的描述内容。
本文描述的模板变量、Sprig 函数名和标签增强后再渲染 Description 的行为需要 monit-edge v0.42.0 或以上版本。低于该版本时,部分变量或函数可能不可用,标签增强结果也可能无法在备注模板中引用。

工作方式

规则触发或恢复时,monit-edge 会把完整告警事件作为模板根对象,并额外注入一组常用短变量。标签增强执行完成后,模板会基于增强后的事件渲染,结果会写入事件的 Description 字段,再继续发送事件。
日常模板建议优先使用 $labels$values$value$relates$status$checkMode。其他短变量用于高级模板或兼容场景,只有确实需要时再使用。

Sprig 函数名

monit-edge 会使用 Sprig 标准函数名注册安全的 Sprig 函数。同一个可用函数也会额外注册一份 sprig_ 前缀形式,方便在命名冲突时使用。 应该这样写:
也可以使用带前缀的形式:
如果 Sprig 标准函数名与 monit-edge 自定义函数重名,monit-edge 自定义函数会保留标准函数名,Sprig 函数仍可通过 sprig_ 前缀调用。

内置变量

示例:

根对象字段

根对象字段使用 .FieldName 访问。 .Queries 中的 Query 对象包含 .Name.Expr.LabelFields.ValueFields.Args .RelateQueries 中的 RelateQuery 对象包含 .Name.Expr.Args

关联查询结果行

关联查询结果通过 $relates 访问。map 的 key 是关联查询名称,例如 R1 示例:

Go Template 内置函数

以下函数由 Go text/template 提供。

monit-edge 自定义函数

以下函数由 monit-edge 注册,使用时不需要前缀。

Sprig 函数

monit-edge 会使用 Sprig 标准函数名注册安全的 Sprig 函数,同时也注册 sprig_ 前缀形式。Sprig 函数来自 Masterminds/sprig; 需要查看上游函数行为时,可以参考该仓库文档。 常用示例:
正则使用注意事项:regexFindsprig_regexFind 返回的是完整匹配文本,不返回捕获组。如果要提取捕获组,请使用 regexReplaceAllsprig_regexReplaceAll
结果是:

常用 Sprig 函数

同一个函数也可以使用 sprig_ 前缀调用,例如 sprig_containssprig_regexReplaceAll

禁用的 Sprig 函数

为了保证告警描述渲染过程可预测且安全,monit-edge 不会注册会读取进程环境变量、执行 DNS 解析、生成随机输出、创建凭证或证书、加解密数据,或者主动让模板失败的 Sprig 函数。 以下 Sprig 函数的标准形式和 sprig_ 前缀形式都不可用:
如果模板使用这些函数,解析阶段会报类似 function "env" not definedfunction "sprig_env" not defined 的错误。

完整示例:提取 MySQL Unknown Column 字段名

排障

function "contains" not defined 表示规则运行在较旧的 monit-edge 版本上,该版本尚未启用 Sprig 标准函数名。请升级 monit-edge;如果该版本支持前缀形式,也可以临时改用 sprig_contains function "env" not definedfunction "sprig_env" not defined 表示模板使用了被禁用的 Sprig 函数。请删除该函数,或改用确定性的模板逻辑。 regexFindsprig_regexFind 返回 Unknown column 'x' 而不是 x 是预期行为。提取捕获组请使用 regexReplaceAllsprig_regexReplaceAll