如何在Datadog监控中用#is_match与eval实现分时段Slack告警
问题描述
想要创建一个Datadog监控,触发时向Slack频道和邮箱发送告警消息,但仅在UTC时间14:00-16:00的工作时段向Slack发送通知。参考Datadog官方“按时段向不同团队路由通知”的示例,使用了如下表达式:
{{#is_match (eval "int(last_triggered_at_epoch / 3600000 % 24)") "14" "15" "16"}} @my_Slack_team Handle that should receive notification if time is between 2PM and 5PM UTC {{/is_match}}
但配置时收到警告:In message: is_match argument (eval should be quoted (i.e. "(eval"),尝试双引号、转义等方法均未解决问题,最终采用两个独立监控(一个发邮件、一个发Slack并配置Downtime)的方案,但想了解是否可以仅用一个监控,通过#is_match和eval在“配置通知与自动化”环节实现分时段Slack告警?
解决方案
可以用单个监控实现需求,核心是修正is_match的参数格式:
- 修正
is_match表达式写法
将eval的整个调用用双引号包裹,并转义内部的双引号,让Datadog模板解析器正确识别参数:{{#is_match "(eval \"int(last_triggered_at_epoch / 3600000 % 24)\")" "14" "15" "16"}}@my_Slack_team 请处理告警(UTC时间14:00-16:00){{/is_match}} - 更简洁的
if条件写法
也可以直接用eval做时段判断,通过#if条件渲染Slack通知:{{#if (eval "int(last_triggered_at_epoch / 3600000 % 24) >=14 && int(last_triggered_at_epoch / 3600000 % 24) <=16")}}@my_Slack_team 请处理告警{{/if}} - 监控配置步骤
- 直接添加邮箱通知,无需额外条件,确保告警触发时始终发送邮件
- 在Slack通知的消息模板中加入上述条件表达式,仅在目标时段渲染Slack告警内容
之前的错误是因为is_match的第一个参数需要是字符串类型,但原写法未将eval调用整体包裹为字符串,导致解析器识别失败。修正参数格式后,即可在单个监控内实现分时段的Slack告警控制。
内容的提问来源于stack exchange,提问作者Guillermo Ojeda
相关产品推荐
相关产品推荐

