Sumo Logic多查询合并:JVM内存告警阈值设置问题
合并Sumo Logic查询计算JVM内存异常节点占比并触发告警
高效合并查询方案(单日志扫描)
直接通过一次日志扫描完成总节点数、异常节点数的统计及占比计算,性能更优:
_sourceName="/var/log/jvm_metrics.log" | parse regex "used=(?<used>\d*)" nodrop | parse regex "total=(?<total>\d*)" nodrop | num(used)/1000/1000 as used | num(total)/1000/1000 as total | used/total as ratio | eval is_issue = if(ratio > 0.9, 1, 0) | stats count_distinct(_sourceHost) as total_workers, count_distinct(if(is_issue=1, _sourceHost, null())) as issue_workers | eval issue_ratio = issue_workers / total_workers | where issue_ratio > 0.2
逻辑说明
- 统一解析日志中的
used和total字段,转换为MB单位并计算内存使用率ratio - 用
eval标记出内存使用率超过90%的节点(is_issue=1) - 通过
stats一次性完成两个统计:count_distinct(_sourceHost):统计15分钟窗口内的总工作节点数count_distinct(if(is_issue=1, _sourceHost, null())):仅统计内存超标的异常节点数
- 计算异常节点占总节点的比例
issue_ratio,最后过滤出占比超过20%的结果(满足告警触发条件)
子查询合并方案(兼容原有查询逻辑)
如果想保留原有两个查询的结构,可通过join合并子查询结果:
[ _sourceName="/var/log/jvm_metrics.log" | parse regex "used=(?<used>\d*)" nodrop | parse regex "total=(?<total>\d*)" nodrop | count_distinct(_sourceHost) as total_workers ] | join [ _sourceName="/var/log/jvm_metrics.log" | parse regex "used=(?<used>\d*)" nodrop | parse regex "total=(?<total>\d*)" nodrop | num(used)/1000/1000 as used | num(total)/1000/1000 as total | used/total as ratio | where ratio > 0.9 | count_distinct(_sourceHost) as issue_workers ] | eval issue_ratio = issue_workers / total_workers | where issue_ratio > 0.2
告警设置步骤
- 将上述合并后的查询保存为定时搜索,设置时间窗口为15分钟(与统计逻辑匹配)
- 进入告警配置页面,选择该定时搜索作为触发源
- 设置告警条件为「当查询返回结果时触发」(因为
where issue_ratio > 0.2仅在满足占比要求时返回数据) - 配置通知方式(邮件、即时通讯工具等),完成告警设置
内容的提问来源于stack exchange,提问作者x3nr0s
相关产品推荐
相关产品推荐

