#!/bin/bash # 日志文件路径 LOG_FILE="/data/logs/nginx/www.rebatesme.com.log" # 获取当前时间(格式为 30/Nov/2024:00:05:18 +0800) CURRENT_TIME=$(date +"%d/%b/%Y:%H:%M:%S %z") # 计算 5 分钟之前的时间 THREE_MINUTES_AGO=$(date -d "5 minutes ago" +"%d/%b/%Y:%H:%M:%S %z") # outlog OUT_LOG="/data/logs/nginx/logbackup/count/out.log" # 使用 awk 处理日志文件,提取符合条件的 IP 地址 awk -v start_time="$THREE_MINUTES_AGO" -v end_time="$CURRENT_TIME" ' BEGIN { # 设置字段分隔符 FS="[][]" } { # 提取时间戳 log_time = $2 # 去除时间戳中的空格 gsub(/ /, "", log_time) # 检查时间是否在时间窗口内 if (log_time >= start_time && log_time <= end_time) { ip_count[$4]++ } } END { # 输出访问次数超过 1000 的 IP 地址 for (ip in ip_count) { if (ip_count[ip] > 1000) { print ip, ip_count[ip] } } }' "$LOG_FILE" > $OUT_LOG # 检查是否有符合条件的 IP 地址 if [ -s "$OUT_LOG" ]; then # 发送邮件 SUBJECT="Nginx: IPs 5 minutes" TO="xxx@qq.com" FROM="yxxg@sina.com" # 构建邮件内容 MAIL_CONTENT="The following IPs have more than 1000 requests in the last 5 minutes:\n\n" while IFS= read -r line; do MAIL_CONTENT+="$line\n" done < "$OUT_LOG" # 使用 mail 命令发送邮件 echo -e "$MAIL_CONTENT" | mail -s "$SUBJECT" -r "$FROM" "$TO" fi
标签:log,IP,报警,分钟,time,MAIL,OUT,LOG From: https://www.cnblogs.com/yangmeichong/p/18611631