进程状态的动态追踪:利用脚本实现自动日志分析

作者:袖梨 2026-07-07
动态监控进程需用轻量脚本持续采集CPU、内存、状态码等指标,结合ps/pgrep实时抓取快照,awk/grep解析日志,阈值触发告警,并通过nohup实现自动化闭环。

要动态观察进程状态并自动分析日志,核心是用轻量级脚本持续采集关键指标(如 CPU、内存、状态码),再按需过滤、聚合和告警。

实时抓取进程快照

Linux 下 pspgrep 是最直接的工具。例如,每 5 秒记录一次指定进程(如 nginx)的 PID、CPU 使用率、内存占用和运行状态:

  • ps -o pid,pcpu,pmem,state,comm -C nginx 获取结构化输出
  • 配合 watch -n 5 可临时查看,但不适合存档;建议用循环 + date 时间戳写入文件
  • 注意加 --no-headers 避免表头干扰后续解析

日志行匹配与状态提取

应用日志(如 access.log 或自定义 debug 日志)里常含进程行为线索。可用 awkgrep -E 提取关键字段:

  • 匹配含 “starting”、“exited”、“segfault” 的行,定位异常生命周期事件
  • awk '{print $1, $4, $9}' 抽取时间、路径、HTTP 状态码,辅助判断服务响应健康度
  • 对多行日志(如 panic 堆栈),先用 sed '/^$/d' 清空空行,再用 awk '/pattern/,/end/' 截取上下文

简单聚合与阈值触发

不需要上 ELK,用 shell 脚本就能完成基础分析:

  • 统计 1 分钟内 “state == Z”(僵尸进程)出现次数,超 3 次就发邮件或写告警文件
  • awk '{sum+=$2} END {print sum/NR}' 计算平均 CPU 占用,对比阈值(如 >80%)标红输出
  • 结合 tail -n 1000 log | grep "ERROR" | wc -l 判断错误密度,避免单次误报

轻量级自动化闭环

把采集、分析、响应串成可后台运行的小闭环:

  • nohup ./monitor.sh & 启动守护脚本,标准输出重定向到日志
  • 脚本内用 trap 'kill $(jobs -p) 2>/dev/null' EXIT 保证退出时清理子进程
  • 每次分析后生成简明摘要(如 “nginx: 2 zombie, avg CPU=72.4%, errors/min=0”),追加到 summary.log 方便人工巡查

不复杂但容易忽略细节:时间戳统一用 UTC 或本地时区并注明,字段分隔符尽量固定(推荐制表符),避免空格导致 awk 解析错位。

相关文章

精彩推荐