容器日志错误频次自动分析核心是用shell/python脚本提取error/exception等标识,按错误类型或时间聚合统计并定时执行;需过滤干扰项、归一化时间戳、支持多容器与增量分析,并确保docker权限和日志驱动可用。

容器日志自动分析错误频次,核心是:提取错误标识(如 ERROR、Exception、panic)、按时间或错误类型聚合统计,并用脚本周期化执行。不需要上重型日志平台,Shell 或 Python 脚本就能搞定。
定位并提取有效错误行
容器日志格式不一,但常见错误关键词较固定。优先匹配带明确等级或异常堆栈的行:
- 用 grep -E 匹配多模式,例如:
grep -E "(ERROR|FATAL|Exception|panic|Traceback|failed.*to|cannot.*connect)" - 排除误报:加 -v 过滤干扰项,比如健康检查日志
grep -v "GET /health" | grep -v "probe succeeded" - 若日志含时间戳(如
2024-05-20T14:23:01.123Z),可用 awk 截取前若干字段做归一化,方便后续按小时/分钟分组
按错误类型或时间窗口聚合计数
单纯“有多少行错误”意义有限,需区分是同一问题反复刷屏,还是多种故障并发:
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 按错误摘要聚合:用 awk 提取关键上下文(如异常类名、HTTP 状态码、错误消息前 80 字符),再 sort | uniq -c | sort -nr
- 示例命令:
docker logs myapp 2>/dev/null | grep -E "ERROR|Exception" | awk '{print $5,$6,$7,$8}' | sort | uniq -c | sort -nr | head -10 - 按时间聚合:用 date -d 或 awk 解析时间字段,生成每小时错误数(适合画趋势);例如提取
$1" "$2(日期+时间)后用 cut -d: -f1 截取到小时级
封装成可定时运行的脚本
把分析逻辑写成可复用脚本,并接入系统定时任务:
- Shell 脚本开头加 #!/bin/bash,支持传参(如容器名、时间范围、阈值告警值)
- 输出结果建议写入文件(如
/var/log/container-error-trend.log),保留最近 7 天,用 date +\%Y-\%m-\%d 命名归档 - 加入简单告警逻辑:若某类错误单小时超 50 次,echo 提示并 mail 或 curl 推送企业微信/钉钉(用 Webhook)
- 用 crontab -e 添加定时任务,例如每 10 分钟扫一次:
*/10 * * * * /opt/bin/analyze-container-errors.sh myapp >> /var/log/analyze.log 2>&1
进阶建议:轻量适配多容器与历史对比
生产环境常有多个服务容器,可稍作扩展提升实用性:
- 用 docker ps --format "{{.Names}}" | grep -E "web|api|worker" 动态获取目标容器列表
- 每次分析结果追加写入 CSV 文件(含时间、容器名、错误类型、次数),后续可用 awk 或 csvkit 做同比(如“今天 14:00 错误数比昨天同小时高 300%”)
- 避免重复分析:记录上次处理的 log offset(对 docker logs 可用 --since 参数,配合保存时间戳文件实现增量)
不复杂但容易忽略:确保脚本运行用户有 docker logs 权限(通常需在 docker 组),且容器日志驱动不是 none 或 syslog(否则 docker logs 查不到)。










