温馨提示×

怎样用脚本处理centos日志

小樊
37
2026-10-17 18:51:39
栏目: 智能运维

在 CentOS 上“用脚本处理日志”通常分为几类场景:日志收集/过滤、统计分析、自动清理、异常报警。下面我用 Shell / Bash 脚本 为主,结合 CentOS 常见日志位置,给你一套实用思路和示例。


一、CentOS 日志基础知识

常见日志位置

  • /var/log/messages:系统常规日志
  • /var/log/secure:登录、SSH、认证
  • /var/log/cron:定时任务
  • /var/log/httpd/:Apache
  • /var/log/nginx/:Nginx
  • journalctl:systemd 日志(CentOS 7+)

二、基础脚本示例

1️⃣ 提取特定关键字(如 ERROR / Failed)

#!/bin/bash

LOG=/var/log/messages
KEYWORD="error"

grep -i "$KEYWORD" "$LOG" >> /tmp/error_log.txt

2️⃣ 统计某时间段内的 SSH 登录失败次数

#!/bin/bash

LOG=/var/log/secure

echo "SSH 登录失败次数:"
grep "Failed password" "$LOG" | wc -l

3️⃣ 按日期过滤日志(journalctl)

#!/bin/bash

journalctl -u nginx \
  --since "2026-01-21 00:00:00" \
  --until "2026-01-21 23:59:59" \
  > /tmp/nginx.log

三、日志统计分析(AWK 很常用)

统计访问 IP 排名(Nginx)

awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head

统计每小时请求量

awk '{print $4}' /var/log/nginx/access.log | cut -d: -f2 | sort | uniq -c

四、日志自动清理脚本(防磁盘爆)

#!/bin/bash

find /var/log -name "*.log" -mtime +30 -exec rm -f {} \;

或只清特定服务:

find /var/log/nginx -name "*.log" -mtime +7 -delete

⚠️ 建议配合 logrotate 使用(CentOS 自带)


五、异常自动报警(邮件 / 钉钉)

检测暴力破解并报警

#!/bin/bash

COUNT=$(grep "Failed password" /var/log/secure | wc -l)

if [ "$COUNT" -gt 20 ]; then
  echo "SSH 暴力破解警告!失败次数:$COUNT" | mail -s "安全警告" admin@xxx.com
fi

六、配合 crontab 定时执行

crontab -e

示例(每天 3 点执行):

0 3 * * * /root/scripts/log_check.sh

七、进阶方案(生产推荐)

  • ✅ logrotate:日志切割、压缩
  • ✅ rsyslog / syslog-ng:集中日志
  • ✅ ELK / Loki:大规模日志分析
  • ✅ Python 脚本:复杂解析和处理

八、我可以继续帮你的方向

你可以告诉我:

  1. 处理 哪种日志(系统 / Nginx / 应用)
  2. 想做 统计 / 报警 / 清理 / 分析
  3. 是否 生产环境 / 学习用途

我可以给你可直接用的完整脚本。

0 踩