当告警通知内容中包含特殊字符导致告警通知发生失败时,您可以在告警通知内容的变量中添加过滤器{{变量|escapejs}}
。日志服务会根据该配置,将指定字符串或指定变量中的特殊字符转换为 Unicode 编码的字符串。详细说明请参考过滤器。
说明
飞书、钉钉或企业微信收到告警通知后,会重新将 Unicode 编码的字符串转换为特殊字符。
例如您在告警策略中设置了如下包含特殊字符的通知内容,并在内容模板中引用了该内容(对应的变量名为{{NotifyMsg}}
),则您可以使用如下变量和过滤器对特殊字符进行 Unicode 转码。
告警策略中的通知内容
{ "projectname":"test1", "description":"测试", "region": "cn-north-1" }
内容模板中的变量配置
原始通知内容: {{NotifyMsg|escapejs}}
日志服务发送告警时,会自动将内容变量替换为对应的实际值,如果实际值包含引号(")等特殊字符,则在使用 toJson、toPrettyJson 函数等部分场景下会被转义,使通知内容的可读性降低。针对该问题,您可以在对应的变量中添加过滤器{{变量|safe}}
,强制内容不被转义。详细说明请参考过滤器。
例如{{FireResults}}
变量的实际值为[{"cnt":1,"cnt_1":0}]
,当您使用{{toJson(FireResults)}}
时,通知内容将被转义为[{"e;cnt"e;:1,"e;cnt_1"e;:0}]
。为避免通知内容被转义,获取通知内容[{"cnt":1,"cnt_1":0}]
,您可以使用{{toJson(FireResults)|safe}}
。
各个告警通知渠道都存在通知内容长度限制,当内容渲染后的通知内容长度超过限制时,超过限制部分会被截断。通知内容长度限制请参考创建内容模板。
您可以使用 for 循环语句对数组和对象进行迭代操作,避免通知内容被截断。示例如下:
{%-for logs in QueryLog%} {%- for log in logs%} {{log.msg}} {%endfor-%} {%endfor-%}
您可以在告警通知内容模板中添加变量 {{FireResults}}
或 {{Results}}
,用于在告警通知中引用触发告警的详细内容。关于告警变量的详细说明,请参考内容变量。示例如下:
{{FireResults}}
变量示例
内容模板
触发告警的数据为{{toJson(FireResults)|escapejs}}
告警通知
{{Results}}
变量示例
内容模板
{{toJson(Results[0].RawResults)|escapejs}}
告警通知
日志服务提供了丰富的内容语法和内容函数,用于处理告警通知内容。您可以通过内容函数和内容语法对数据、文本、变量等内容进行格式化处理、自定义设计。