Linux 日志关键字统计方法

2次阅读

统计linux日志中关键字次数需区分「含关键字的行数」和「关键字总出现次数」:前者用grep | wc -l,后者用grep -o | wc -l;压缩日志用zgrep,复杂场景用awk。

Linux 日志关键字统计方法

统计 Linux 日志中某个关键字出现的次数,核心是区分「包含关键字的行数」和「关键字实际出现的总次数」——两者结果可能完全不同,选错方法容易误判问题严重程度。

统计包含关键字的行数

这是最常用、也最稳妥的统计方式,适合快速评估“有多少条日志提到了该关键词”。命令简洁明确:

  • 基础写法:`grep “Error” /var/log/syslog | wc -l`
  • 忽略大小写:`grep -i “error” /var/log/syslog | wc -l`
  • 整词匹配(避免匹配到 error_log 或 errors):`grep -iw “error” /var/log/syslog | wc -l`
  • 递归统计整个日志目录下所有匹配行数:`grep -r -i “timeout” /var/log/ | wc -l`(注意:会把文件名也计入行数,如需精确,加 `-h` 参数隐藏文件名)

统计关键字实际出现次数

当一个日志行里多次出现同一关键词(比如一行含 3 个 “failed”),你希望知道总共出现了几次,就得用 -o 选项让 grep 把每次匹配都单独输出一行:

  • 标准组合:`grep -o “failed” /var/log/auth.log | wc -l`
  • 忽略大小写 + 统计总次数:`grep -io “warning” /var/log/syslog | wc -l`
  • 配合正则匹配多个变体(如 error / ERROR / Error):`grep -E -io “error|fail” /var/log/app.log | wc -l`

压缩日志与多文件批量统计

生产环境日志常被轮转压缩,直接解压再查既慢又占空间:

  • 查 .gz 文件无需解压:`zgrep -i “panic” /var/log/kern.log.1.gz | wc -l`
  • 同时查普通日志和压缩日志:先用 `find` 找出所有相关文件,再统一处理:
    `find /var/log -name “syslog*” -exec zgrep -i “oom” {} ; | wc -l`(自动适配 .gz 和未压缩文件)

用 awk 做更精细的统计

当需要按条件累加、跨字段关联或排除干扰内容时,awk 更灵活:

  • 统计某列中关键词出现次数(如只统计第 4 列为 “500” 的行数)
    `awk ‘$4 == “500” {count++} END {print count+0}’ /var/log/nginx/access.log`
  • 统计每行中关键词出现频次并求和(等效于 grep -o)
    `awk ‘{n += gsub(/timeout/, “&”)} END {print n+0}’ /var/log/messages`
  • 排除带注释或空行干扰后再统计
    `awk ‘!/^#/ && NF > 0 {n += gsub(/debug/, “&”)} END {print n+0}’ app.conf`
text=ZqhQzanResources