text/template 引用告警标签、查询值、关联查询结果和安全的 Sprig 函数,生成 Text 或 Markdown 格式的描述内容。
工作方式
规则触发或恢复时,monit-edge 会把完整告警事件作为模板根对象,并额外注入一组常用短变量。标签增强执行完成后,模板会基于增强后的事件渲染,结果会写入事件的Description 字段,再继续发送事件。
日常模板建议优先使用
$labels、$values、$value、$relates、$status 和 $checkMode。其他短变量用于高级模板或兼容场景,只有确实需要时再使用。Sprig 函数名
monit-edge 会使用 Sprig 标准函数名注册安全的 Sprig 函数。同一个可用函数也会额外注册一份sprig_ 前缀形式,方便在命名冲突时使用。
应该这样写:
sprig_ 前缀调用。
内置变量
示例:
根对象字段
根对象字段使用.FieldName 访问。
.Queries 中的 Query 对象包含 .Name、.Expr、.LabelFields、.ValueFields 和 .Args。
.RelateQueries 中的 RelateQuery 对象包含 .Name、.Expr 和 .Args。
关联查询结果行
关联查询结果通过$relates 访问。map 的 key 是关联查询名称,例如 R1。
示例:
Go Template 内置函数
以下函数由 Gotext/template 提供。
monit-edge 自定义函数
以下函数由 monit-edge 注册,使用时不需要前缀。Sprig 函数
monit-edge 会使用 Sprig 标准函数名注册安全的 Sprig 函数,同时也注册sprig_
前缀形式。Sprig 函数来自 Masterminds/sprig;
需要查看上游函数行为时,可以参考该仓库文档。
常用示例:
regexFind 和 sprig_regexFind 返回的是完整匹配文本,不返回捕获组。如果要提取捕获组,请使用 regexReplaceAll 或 sprig_regexReplaceAll:
常用 Sprig 函数
同一个函数也可以使用
sprig_ 前缀调用,例如 sprig_contains 和 sprig_regexReplaceAll。
禁用的 Sprig 函数
为了保证告警描述渲染过程可预测且安全,monit-edge 不会注册会读取进程环境变量、执行 DNS 解析、生成随机输出、创建凭证或证书、加解密数据,或者主动让模板失败的 Sprig 函数。 以下 Sprig 函数的标准形式和sprig_ 前缀形式都不可用:
function "env" not defined 或 function "sprig_env" not defined 的错误。
完整示例:提取 MySQL Unknown Column 字段名
排障
function "contains" not defined 表示规则运行在较旧的 monit-edge 版本上,该版本尚未启用 Sprig 标准函数名。请升级 monit-edge;如果该版本支持前缀形式,也可以临时改用 sprig_contains。
function "env" not defined 或 function "sprig_env" not defined 表示模板使用了被禁用的 Sprig 函数。请删除该函数,或改用确定性的模板逻辑。
regexFind 或 sprig_regexFind 返回 Unknown column 'x' 而不是 x 是预期行为。提取捕获组请使用 regexReplaceAll 或 sprig_regexReplaceAll。