可使用 journalctl -u -f 实时捕获服务日志,再通过 awk 按秒聚合含 ERROR、Exception、failed、panic 的错误行数;关键是以秒级时间戳为键,用关联数组实现滑动窗口统计,每秒刷新输出。

可以使用 journalctl -u <service> -f</service> 实时捕获服务日志,再通过 awk 按秒聚合含错误关键词(如 ERROR、Exception、failed)的日志行数。关键在于用时间戳做滑动窗口统计,而非简单计数。
提取并标准化时间戳
systemd 日志的时间戳格式为 "2024-05-22 14:36:22.123456",需截取到秒级(去掉毫秒),便于分组统计:
- 用
awk '{gsub(/\.[0-9]+/, "", $1); print $1" "$2}'清洗时间字段 - 或更稳健地用
awk '{match($0, /[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}/); print substr($0, RSTART, RLENGTH)}'提取完整秒级时间串
按秒累计错误行数
借助 awk 关联数组和当前时间判断,实现每秒刷新的实时计数:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 定义变量记录上一秒时间戳,当新日志时间 > 上一秒时,输出上一秒的计数并重置
- 匹配错误模式(如
/ERROR|Exception|failed|panic/i)才计入计数器 - 示例核心逻辑:
awk '/ERROR|Exception|failed/ { t = substr($0,1,19); if (t != prev) { if (prev) print prev ": " cnt; cnt=0; prev=t } cnt++ }'
整合成单条管道命令
以微服务 auth-service 为例,实时统计每秒错误数:
journalctl -u auth-service -f -o cat | \
awk '
/ERROR|Exception|failed|panic/ {
# 提取前19字符作为"YYYY-MM-DD HH:MM:SS"
ts = substr($0, 1, 19)
if (ts != last_ts && last_ts != "") {
print last_ts ": " count
count = 0
}
last_ts = ts
count++
}
'说明:-o cat 去掉 systemd 元数据,让时间戳稳定在行首;若日志无固定时间前缀,需先用 awk 或 grep -oE 提取时间再处理。
扩展:多服务统一监控
若需同时监控多个服务(如 auth-service、order-service),可:
- 用
journalctl -u auth-service -u order-service -f -o cat合并输出 - 在
awk中增加服务标识,例如匹配auth或order字段,用二维数组cnt[service][ts]++分别计数 - 输出时带上服务名:
print service, ts ": " cnt[service][ts]

















