要统计特定时间内panic报错频率,需先用awk按时间字段过滤(如may 23日14:00–15:00),再结合-i grep匹配panic、kernel panic等关键词,linux原生命令即可完成,无需额外工具。

直接用 grep -c 只能统计全文匹配行数,无法按时间范围筛选。要统计“特定时间内 Panic 报错出现频率”,关键在于先用时间条件过滤日志行,再计数。Linux 自带工具组合(grep、awk、sed)完全可胜任,无需额外安装。
确认日志时间格式和 Panic 关键词
不同日志格式差异大,必须先看清时间字段位置和 Panic 的典型写法:
- 常见 Panic 关键词:
Panic、kernel panic、BUG: unable to handle kernel NULL pointer dereference(注意大小写,建议加-i忽略大小写) - 典型时间格式示例:
May 23 14:22:05 hostname kernel: —— 月+日+时:分:秒,无年份,适合用awk按字段匹配
2024-05-23T14:22:05.123Z —— ISO8601 格式,可用sed或awk截取前19位比较
按固定时间段精确过滤(推荐 awk)
以 /var/log/messages 为例,统计 5 月 23 日 14:00 到 15:00 的 Panic 次数:
awk '$1 == "May" && $2 == 23 && $3 >= "14:00:00" && $3 <p>说明:</p><div class="aritcle_card flexRow artxards"> <div class="artcardd flexRow"> <a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill7940" title="Zynq Linux Hardware Debug"><img src="https://img.php.cn/upload/skill/000/000/081/179177762288958.jpg" alt="Zynq Linux Hardware Debug" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a rel="nofollow" href="/xiazai/skill7940" title="Zynq Linux Hardware Debug" class="overflowclass">Zynq Linux Hardware Debug</a> <p class="overflowclass">Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。</p> </div> <a rel="nofollow" href="/xiazai/skill7940" title="Zynq Linux Hardware Debug" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>
-
$1 $2 $3分别对应日志的“月”“日”“时:分:秒”字段(空格分隔) -
tolower($0) ~ /panic/确保大小写不敏感匹配 - 最后用
grep -c ""统计管道传入的行数(比wc -l更可靠,避免空行干扰)
按相对时间窗口快速筛查(如最近1小时)
结合 date 命令动态生成时间边界,适合脚本化巡检:
start=$(date -d '1 hour ago' '+%b %d %H:%M:%S' | sed 's/^ *//')<br>end=$(date '+%b %d %H:%M:%S' | sed 's/^ *//')<br>awk -v s="$start" -v e="$end" '$1=="'$(date '+%b')'" && $2==$(date '+%d') && $3>=s && $3 <p>注意点:</p>
- 跨日需额外处理(如从 23:30 到次日 00:30),此时建议改用 ISO 格式日志或用
journalctl --since="1h ago" - 如果日志是
systemd-journald管理,优先用journalctl更准确:
journalctl --since "2024-05-23 14:00:00" --until "2024-05-23 15:00:00" | grep -i panic | wc -l
高频 Panic 的快速定位与去重分析
单纯计数不够,还需看是否重复堆栈(同一原因多次触发):
- 提取 Panic 行并去重(保留首次出现的完整上下文):
awk '/panic/i {print NR, $0}' /var/log/messages | head -20 - 统计不同 Panic 类型占比(按关键词粗略分类):
grep -i panic /var/log/messages | sed -E 's/.*Panic: (.+)$/\1/; t; s/.*kernel panic.*/generic/; t; s/.*/other/' | sort | uniq -c | sort -nr










