如何基于事件持续时长配置Splunk告警的分级触发规则?
Splunk分级告警配置方案
核心搜索查询
先构建能够区分单次超标和连续超标的搜索语句,适配5分钟检查周期:
index=<你的业务索引> sourcetype=<目标数据源> # 若response_time是字符串类型,先转数值 | eval response_time=tonumber(response_time) # 按5分钟分割时间桶,对齐检查周期 | bucket _time span=5m # 统计每个时间桶、每个应用的最大响应时间 | stats max(response_time) as max_rt by _time, app_name # 标记当前时间桶是否超标(响应时间>3秒) | eval is_over_threshold=if(max_rt>3, 1, 0) # 获取上一个5分钟桶的超标状态,判断是否连续触发 | streamstats current=f window=1 last(is_over_threshold) as prev_over by app_name # 根据当前和历史状态判定告警级别 | eval alert_severity=case( is_over_threshold=1 AND prev_over=1, "Major", is_over_threshold=1 AND prev_over=0, "Minor", 1=1, "No Alert" ) # 只保留需要告警的结果 | where alert_severity!="No Alert"
告警调度与触发配置
调度设置:
- 执行频率:每5分钟一次
- 时间范围:选择
最近5分钟,确保每次查询覆盖完整的5分钟时间桶 - 建议调度时间对齐整点(如00:05、00:10),避免时间桶数据不完整
触发条件:
- 设置为
结果数量 > 0,因为查询已经过滤出需要告警的场景
- 设置为
动作配置:
- 在告警通知(邮件/企业微信等)中,引用
alert_severity字段作为告警级别,区分Minor和Major的通知内容 - 可根据级别配置不同的通知渠道(如Major告警推送给运维群,Minor仅推送给应用负责人)
- 在告警通知(邮件/企业微信等)中,引用
去重逻辑实现
- 查询层面:通过
case分支判断,当连续两个周期超标时,只会生成Major级别的结果,不会同时输出Minor,天然避免同场景下的重复告警 - 告警抑制:在告警的
触发条件中开启抑制告警:- 抑制字段选择
app_name和alert_severity - 抑制时长设置为5分钟,防止同一应用同一级别在短时间内重复触发告警
- 抑制字段选择
注意事项
- 确认
response_time字段为数值类型,若为字符串需保留查询中的eval response_time=tonumber(response_time)语句 - 若业务需要统计“总计10分钟内任意超标时长”而非连续周期,可调整
streamstats的window参数或改用timechart统计累计超标时长
内容的提问来源于stack exchange,提问作者Nisheeth
相关产品推荐
相关产品推荐

