#!/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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了