基于多行日志的异步任务SLA超时告警方案咨询
基于Datadog的异步函数SLA告警低复杂度方案
方案一:利用Datadog原生缺失日志检测(Missing Log Detection)
这是最贴近需求且无需额外工具的方案,直接基于现有日志实现实时告警:
日志属性解析
通过Datadog日志管道(Log Pipelines)解析现有日志,提取关键属性:- 用正则表达式匹配日志格式:
^"(\w+) - ([0-9a-f-]+) - process (\w+)" - 将匹配结果分别映射为Datadog日志属性:
function_name(第一个捕获组)、uuid(第二个捕获组)、event_type(第三个捕获组,值为scheduled/started/finished)
- 用正则表达式匹配日志格式:
配置缺失日志告警
创建新的日志监控,选择「Missing Log Detection」类型:- 筛选条件:
event_type:started - 分组规则:按
function_name和uuid分组,确保每个函数实例单独监控 - 告警阈值:设置「15分钟内未收到匹配以下条件的日志」,匹配条件为
event_type:finished AND uuid:<分组的uuid> AND function_name:<分组的function_name> - 触发逻辑:当某个分组的
started事件产生后,15分钟内未收到对应finished日志,立即触发告警
- 筛选条件:
这个方案完全满足核心要求:
- 实时告警:只要超过15分钟未收到完成日志,无论函数是否仍在运行都会触发
- 无状态修改:仅基于日志分析,不会干预函数的运行状态
- 扩展性好:无需生成带UUID的高基数指标,通过日志属性分组自动适配所有函数实例
方案二:结合Datadog日志与自定义度量(替代高基数指标方案)
如果缺失日志检测无法满足更复杂的统计需求,可以用更轻量的度量方案替代原UUID级指标:
生成聚合度量
通过Datadog日志管道的「Generate Metrics」功能,基于日志生成聚合型度量:- 对于
started事件,生成计数器度量function.process.started.count,按function_name和uuid标签分组 - 对于
finished事件,生成计数器度量function.process.finished.count,按function_name和uuid标签分组
- 对于
配置度量告警
创建度量监控,使用Datadog的last()函数结合时间范围计算:- 筛选度量:
function.process.started.count - 分组规则:按
function_name和uuid分组 - 告警条件:当某个分组的
last()值(即最近一次started事件的时间)距离当前时间超过15分钟,且对应的function.process.finished.count在该时间范围内无增量时触发告警
- 筛选度量:
这个方案避免了原方案中每个UUID生成独立指标的高基数问题,通过日志转度量的方式实现监控,复杂度远低于Spark等大数据工具。
内容的提问来源于stack exchange,提问作者shridharama
相关产品推荐
相关产品推荐

