如何配置Datadog告警,监控未正常结束的后台进程?
在Datadog中为进程启停事件配置超时告警
我们的后端应用运行多个带有独立id的进程,每个进程会向Datadog发送process.started和process.finished两类事件。需要在以下两种场景触发告警:
- 同一进程的
process.finished与process.started时间差超过1分钟 - 进程发送
process.started后,未触发任何process.finished事件
一、处理进程运行超时场景(时间差>1分钟)
核心是通过进程id关联同一进程的两类事件并计算时间差:
- 在Datadog中创建自定义告警规则,使用事件关联语法关联同
id的started和finished事件 - 用Datadog查询语法计算时间差,示例逻辑如下:
events("process.started").by("id") .join(events("process.finished").by("id"), on: "id") .as(start_event, finish_event) .where(finish_event.timestamp - start_event.timestamp > 60000) - 将该查询设置为告警触发条件,当查询返回匹配结果时,触发告警通知
二、处理未触发process.finished事件的场景
需要追踪已启动但未结束的进程,并计算从启动到当前的时间差:
- 利用Datadog的缺失事件检测功能:
- 先创建基于
process.started事件的查询,按id分组记录每个进程的启动时间戳 - 配置检测规则:当某一
id对应的process.started事件触发后,超过1分钟仍未出现同id的process.finished事件,则触发告警 - 时间差由Datadog自动计算,逻辑为当前时间减去
process.started的事件时间戳
- 先创建基于
- 也可以用查询语句直接实现,示例如下:
给这个查询设置阈值为“超过60秒未出现对应finished事件”即可events("process.started").by("id") .where(not events("process.finished").by("id").since(last(process.started.timestamp)))
关键注意事项
- 确保两类事件的
id字段完全一致,否则无法准确关联同一进程的事件 - 可根据业务需求灵活调整告警的时间阈值
- 配置完成后,建议手动模拟场景(比如触发
started后不触发finished)验证告警是否正常触发
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

