本文介绍告警相关问题的排查方法。
分类 | FAQ |
---|---|
告警策略 | |
告警通知渠道 | |
告警通知内容 |
触发告警后,告警接收人未收到通知。告警历史页面中有该告警策略对应的告警事件记录,您可以在其对应的操作列单击查看详情,页面会跳转到该告警策略的执行信息页面,其通知状态一栏中会显示发送失败或部分发送成功。
日志写入到查询期间存在低延时、索引构建存在低时间差,如果您在告警策略中配置查询时间范围和执行周期时未考虑上述时间差,可能导致告警监控任务的查询结果不准确,从而出现漏告警、误告警问题。
您可以通过扩大查询的时间范围来避免漏告警、误告警。详细说明,请参考告警监控任务时效性。
日志服务告警触发条件之间为或关系,检索分析结果按照触发条件的顺序逐条匹配,检索分析结果符合第一条触发条件后,不再匹配后面的触发条件。即您在添加多条触发条件时,需按照高级别到低级别的顺序配置。具体步骤请参考创建告警策略。
当告警通知内容中包含特殊字符导致告警通知发生失败时,您可以在告警通知内容的变量中添加过滤器{{变量|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}}
。
使用日志服务默认的内容通知模板时,触发时间取值为{{StartTime}}
,即表示第一次触发告警的时间。告警触发后,在下一个周期仍未恢复时,第二次告警通知中的触发时间仍为上一个周期中第一次触发告警的时间。如果告警一直未恢复,则告警触发时间不会更新,因此造成告警触发时间和通知时间相差较大。
各个告警通知渠道都存在通知内容长度限制,当内容渲染后的通知内容长度超过限制时,超过限制部分会被截断。通知内容长度限制请参考创建内容模板。
您可以使用 for 循环语句对数组和对象进行迭代操作,避免通知内容被截断。示例如下:
{%-for logs in QueryLog%} {%- for log in logs%} {{log.msg}} {%endfor-%} {%endfor-%}
COUNT(*)
结果为 0,但我配置的“有数据”告警条件仍然被触发?COUNT(*)
函数统计相关的日志数量,且设置触发条件为有数据
。当 COUNT(*)
结果为 0 时,仍然触发了告警。COUNT(*)
函数时,返回结果中始终会返回一行数据,这行数据记录了 COUNT(*)
函数的计算结果。而设置触发条件为有数据
,表示返回结果中有数据行就会触发结果。因此即使 COUNT(*)
结果为 0,即没有符合条件的日志,仍然会触发告警。有数据匹配$1.num >= 1
,表示至少存在 1 条符合条件的日志才会触发告警。您在创建告警策略时,可通过告警测试预览告警通知以及验证告警策略配置的正确性。本文罗列了告警测试相关的错误码及其原因和解决方案。
错误码 | 错误信息 | 错误原因 | 解决方案 |
---|---|---|---|
AlarmProjectNotExist | 日志项目(%s)不存在 | 告警监控的日志项目被删除。 | 创建新的日志项目和日志主题,并上传日志,然后在新日志项目中重新创建告警策略。 |
AlarmParseSQLErr | 告警执行语句%d解析失败:%s | 您所填写的执行语句的语法错误。 | |
AlarmParseTriggerConditionErr | 告警触发条件%d解析失败:%s | 您所填写的触发条件表达式的语法错误。 | 根据错误提示修改告警策略中的触发条件表达式。详细说明请参考触发条件表达式。 |
AlarmNotifyGroupNotExist | 通知组(%s)不存在 | 您所选择的通知组被删除。 | 重新创建通知组,并在告警策略中绑定新的通知组。 |
ErrAlarmUserDefineMsgParseErr | 用户自定义通知内容解析失败:%s | 您所填写的通知内容的语法错误。 | |
ErrAlarmWebhookBodyParseErr | 通知组(%s)中第%d个webhook请求体解析失败:%s | 您所填写的 WebHook 请求体语法错误。 | 根据错误提示修改 WebHook 请求体。 |
ErrAlarmCallWebhookErr | 通知组(%s)中第%d个webhook地址错误 | 调用 WebHook 地址失败。 | 检查通知组中 WebHook 地址的可用性。 |
ErrAlarmContentTemplateParseErr | 内容模版(%s)解析失败:%s | 您所填写的内容模版的语法错误。 | 根据错误提示修改内容模板。详细说明请参考创建内容模板。 |
ErrSendSmsMessageOutOfQuota | 用户%s发送短信超出限额 | 指定的 IAM 用户的短信通知频率超出限额。 | 参考告警限制了解限额,并稍后重试。 |
ErrMobileNotVerified | 用户%s电话未认证 | 指定的 IAM 用户在个人信息中配置的手机号码未通过验证。 | 在安全设置页面完成安全手机验证。 |
ErrSendVmsMessageOutOfQuota | 用户%s电话超出限额 | 指定的 IAM 用户的电话通知频率超出限额。 | 参考告警限制了解限额,并稍后重试。 |
ErrEmailNotVerified | 用户%s邮箱未认证 | 指定的 IAM 用户在个人信息中配置的邮箱未完成认证。 | 在安全设置页面完成安全邮箱验证。 |
ErrSendSmsFail | 用户%s发送短信失败:%s | 短信通知发送失败。 | 根据错误提示检查手机设置,并稍后重试。 |
ErrSendVmsFail | 用户%s语音通知失败:%s | 语音通知发送失败。 | 根据错误提示检查手机设置,并稍后重试。 |
ErrSendEmailFail | 用户%s发送邮件失败:%s | 邮件通知发送失败。 | 根据错误提示检查邮箱设置,并稍后重试。 |
ErrWebhookIntegrationNotExist | 告警webhook集成(%s)不存在 | 您所配置的 WebHook 集成配置被删除。 | 重新创建 WebHook 集成配置,并在通知组中绑定新的 WebHook 集成配置。 |
ErrCallWebhookIntegration | 告警webhook集成(%s)调用失败,错误码:%v,错误信息:%s | 调用 WebHook 地址失败,HTTP 状态码显示成功,但是发送告警通知到飞书、钉钉、企业微信失败。 | 根据错误提示检查及修改 WebHook 集成配置,并稍后重试。 |
AlarmDefaultErr | 告警测试失败,请稍后重试 | 无。 | 稍后重试。 |