杨梅冲
每天在想什么呢?
随笔 - 198,  文章 - 0,  评论 - 8,  阅读 - 17万
复制代码
#!/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
复制代码

 

posted on   杨梅冲  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示