You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式统计各服务的many open files错误日志次数

解决方案:关联服务与"many open files"错误的正则及统计方法

正则表达式方案

要匹配服务标识行后(中间可包含WARNING等非服务行)的目标错误,需允许中间存在任意非服务行,同时避免跨服务关联,正则如下(需支持PCRE语法,比如grep -P):

(?s)(\w+Service).*?(?:(?!\w+Service).)*many open files

正则解释

  • (?s):开启单行模式,让.匹配换行符,支持跨多行匹配
  • (\w+Service):捕获服务名称(如DEFService),可根据实际服务标识格式调整(比如服务行带括号就改成\[(\w+Service)\])
  • .*?:非贪婪匹配服务行到错误行前的内容,避免过度匹配
  • (?:(?!\w+Service).)*:匹配中间任意行(包括WARNING),但遇到新的服务标识行就停止,确保错误只关联到最近的服务
  • many open files:精准匹配目标错误字符串

更高效的大型日志统计方案

纯正则匹配后还需二次统计,针对大型日志,用awk逐行处理更高效,直接完成服务关联与计数:

# 匹配服务标识行,记录当前服务(根据实际服务行格式调整$1的取值)
/[A-Za-z]+Service/ { current_svc = $1 }
# 匹配目标错误行,给当前服务计数+1
/many open files/ { count[current_svc]++ }
# 最后输出每个服务的错误次数
END { for (svc in count) printf "%s: %d\n", svc, count[svc] }

使用时直接执行:awk -f count_errors.awk your_log_file.log,或把脚本写在一行:

awk '/[A-Za-z]+Service/{c=$1} /many open files/{cnt[c]++} END{for(s in cnt)print s": "cnt[s]}' your_log_file.log

内容的提问来源于stack exchange,提问作者Surabhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 15:25:06