Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >指定时间内网站访问次数的监控

指定时间内网站访问次数的监控

作者头像
洗尽了浮华
发布于 2018-03-28 05:29:40
发布于 2018-03-28 05:29:40
1.6K00
代码可运行
举报
文章被收录于专栏:散尽浮华散尽浮华
运行总次数:0
代码可运行

需求说明: 在日常运维工作中,为了防止一些恶意访问的行为,例如不断的请求刷流量,通过实时过滤Nginx访问日志,将单位时间内访问次数达到指定阀值的来源ip查找出来,并通过邮件报警方式及时通知运维人员!

比如针对url为http://192.168.10.202:8888的访问进行监控,当在1分钟内访问次数超过300次数,就邮件报警给运维人员。 1)nginx日志监控脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@Fastdfs_storage_s1 ~]# cat /opt/nginx_log_monit.sh 
#!/bin/bash
#日志文件
logfile=/usr/local/nginx/logs/access.log
  
#开始时间
start_time=`date -d"$last_minutes minutes ago" +"%H:%M:%S"`
  
#结束时间
stop_time=`date +"%H:%M:%S"`
  
#过滤出单位之间内的日志并统计最高ip数
tac $logfile | awk -v st="$start_time" -v et="$stop_time" '{t=substr($4,RSTART+14,21);if(t>=st && t<=et) {print $0}}' \
| awk '{print $1}' | sort | uniq -c | sort -nr > /root/log_ip_top10
ip_top=`cat /root/log_ip_top10 | head -1 | awk '{print $1}'`
# 单位时间[1分钟]内单ip访问次数超过300次,则触发邮件报警
if [[ $ip_top -gt 300 ]];then
 /usr/bin/python /opt/send_mail.py &
fi

2)python报警脚本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@Fastdfs_storage_s1 ~]# cat /opt/send_mail.py 
# -*- coding: utf-8 -*-
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from datetime import datetime
import os
import smtplib
def _format_addr(s):
 name, addr = parseaddr(s)
 return formataddr((Header(name, 'utf-8').encode(), addr))
# 邮箱定义
smtp_server = 'smtp.kevin.com'
smtp_port = 465
from_addr = 'monit@kevin.com'
password = os.environ.get('monit@123')
to_addr = ['wangshibo@kevin.com']
# 邮件对象
msg = MIMEMultipart()
msg['From'] = _format_addr('发件人 <%s>' % from_addr)
msg['To'] = _format_addr('收件人 <%s>' % to_addr)
msg['Subject'] = Header('Warning:单ip请求次数异常', 'utf-8').encode()
# 获取系统中要发送的文本内容
with open('/root/log_ip_top10', 'r') as f:
 line = f.readline().strip()
 line = line.split(" ")
print(line)
# 邮件正文是MIMEText:
html = '<html><body><h2>一分钟内单ip请求次数超过阀值</h2>' + \
 '<p>ip:%s  请求次数/min:%s</p>' % (line[1],line[0]) + \
 '</body></html>' 
msg.attach(MIMEText(html, 'html', 'utf-8'))
server = smtplib.SMTP_SSL(smtp_server, smtp_port)
server.login(from_addr, password)
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()

3)写个测试脚本不停curl请求资源触发报警

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@Fastdfs_storage_s1 ~]# cat /opt/curl.sh 
#!/bin/bash
#example:curl.sh http://www.kevin.com 100
usage()
{
 echo "usage: `basename $0` url count"
}
if [ $# -ne 2 ]; then
 usage
 exit 1
fi
for i in `seq 1 $2`;do
 http_code=`curl -o /dev/null -s -w %{http_code} $1`
 echo $1 $http_code
done


手动执行测试脚本
[root@Fastdfs_storage_s1 ~]# /bin/bash /opt/curl.sh http://192.168.10.202:8888 300
http://192.168.10.202:8888 200
http://192.168.10.202:8888 200
http://192.168.10.202:8888 200
http://192.168.10.202:8888 200
http://192.168.10.202:8888 200
http://192.168.10.202:8888 200
http://192.168.10.202:8888 200
http://192.168.10.202:8888 200
http://192.168.10.202:8888 200
http://192.168.10.202:8888 200
http://192.168.10.202:8888 200
...........

4)定时任务,由于上面脚本是监控一分钟内的日志,因此每分钟执行一次

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@Fastdfs_storage_s1 ~]# crontab -e
* * * * * /bin/bash -x /opt/nginx_log_monit.sh >/dev/null 2>&1

这里仅仅是实现了邮件告警功能,实际上还可以实现自动屏蔽恶意访问的ip。 可以通过Nginx deny来实现,也可以通过iptables屏蔽("iptables -I INPUT -s x.x.x.x -j DROP"方式)。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
监控服务器ssh登录,并发送报警邮件
最近想监控下云主机的ssh登录情况,所以开始写ssh登录报警监控。实现方式并不难。
yaohong
2019/09/11
1.8K0
监控服务器ssh登录,并发送报警邮件
Python爬虫系列:用邮件来通知爬虫异常状况
如果Python爬虫发生了故障,希望第一时间来通知自己,这个时候可以通过email来向自己报告。
龙哥
2018/10/22
1.1K0
Python爬虫系列:用邮件来通知爬虫异常状况
Python:一周笔记
主题 邮件处理 日志模块 pdf处理 md5 mongodb索引和聚合 excel 读写 1. 发送邮件模块 这里指的邮件功能当然不是指的是职场上所谓的邮件,指的是程序运行中希望将程序运行的日志信息或者错误捕获信息发送给指定的收件人,通过邮件可以了解程序运行的状态或者出错信息。 关于邮件的基本概念,这里引用廖雪峰老师python教程中的邮件模块: 假设我们自己的电子邮件地址是me@163.com,对方的电子邮件地址是friend@sina.com(注意地址都是虚构的哈),现在我们用Outlook或者Fox
谢伟
2018/06/06
7710
进来看冰冰!用Python写了一个青年大学习提醒系统
链接:https://blog.csdn.net/weixin_45304503/article/details/117730712
Crossin先生
2021/07/02
5310
Python脚本监控mysql数据库,P
任务:应帅气的领导要求,需要监控生产环境mysql和mongo数据库服务。不仅要connect successful还要进行数据交互进一步确认数据库服务正常。
py3study
2020/01/08
2.8K0
告警监控系统开发
一、需求分析 需求: 使用shell定制各种个性化告警工具,但需要统一化管理、规范化管理。 思路: 指定一个脚本包,包含主程序、子程序、配置文件、邮件引擎、输出日志等。 主程序: 作为整个脚本的入口,是整个系统的命脉。 配置文件: 是一个控制中心,用它来开关各个子程序,指定各个相关联的日志文件。 子程序: 这个才是真正的监控脚本,用来监控各个指标。 邮件引擎: 是由一个python程序来实现,它可以定义发邮件的服务器、发邮件人以及发件人密码。 输出日志: 整个监控系统要有日志输出。 要求: 我们的机器角色多
老七Linux
2018/05/09
1.5K0
ELK总结——第三篇Logstash监控Nginx日志存入redis,实现服务解耦
为了节省资源,博主这里只搭建了一台,只有一台主的服务器。端口:6301密码:rds6301_paswd
胡齐
2019/12/19
9300
ELK总结——第三篇Logstash监控Nginx日志存入redis,实现服务解耦
从零搭建一个django项目-6-注册实现(上)
点击注册,控制台报错Access to XMLHttpRequest at 'http://localhost:8000/api/register/' from origin 'http://localhost:8081' has been blocked by CORS policy:
怪盗LYL
2022/06/13
4610
从零搭建一个django项目-6-注册实现(上)
python发送邮件案例分析
1、运用for循环,实现群发功能 接收方的昵称是统一的一个,可再优化一下,实现更加个性化,更加自由的发送邮件 from email.header import Header #处理邮件主题 from email.mime.text import MIMEText # 处理邮件内容 from email.utils import parseaddr, formataddr #用于构造特定格式的收发邮件地址 import smtplib #用于发送邮件 # 函数小工具 def _format_addr(s):
Elsa_阿尼
2021/07/28
7890
python发送邮件(二)——smtplib模块和email模块
一、模块介绍 1、smtplib 模块(用于邮件的发送) ①理论解释 smtplib.SMTP([host[, port[, local_hostname[, timeout]]]]) 通过这个语句,可以向SMTP服务器发送指令,执行相关操作(如:登陆、发送邮件)。所有的参数都是可选的。 host:smtp服务器主机名 port:smtp服务的端口,默认是25;端口号可以省略。 但是使用25号端口有一个问题,就是保密性不够好,数据都是明文传输,没有加密。 现在一般都推荐使用SSL,Secure So
Elsa_阿尼
2021/07/27
5.1K0
python发送邮件(二)——smtplib模块和email模块
基于Nginx+Keepalived的LB服务监控(邮件报警)
IDC两台机器上部署了Nginx+Keepalived主从模式的LB代理负载层,现在需要对LB进行每日巡检和服务监控,利用SendEmail邮件监控。
洗尽了浮华
2018/09/28
9510
基于Nginx+Keepalived的LB服务监控(邮件报警)
九、Python发送QQ邮件(SMTP)
看了廖雪峰老师的教程: 一封电子邮件的旅程就是 发件人 -> MUA -> MTA -> MTA -> 若干个MTA -> MDA <- MUA <- 收件人 有了上述基本概念,要编写程序来发送和接收邮件,本质上就是: 编写MUA把邮件发到MTA; 编写MUA从MDA上收邮件。 发邮件时,MUA和MTA使用的协议就是SMTP:Simple Mail Transfer Protocol,后面的MTA到另一个MTA也是用SMTP协议。 收邮件时,MUA和MDA使用的协议有两种:POP:Post Of
酱紫安
2018/04/16
2.4K0
python3备份juniper交换机
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """   Author:  Linxy -- <592901071@qq.com>   Purpose: Juniper备份脚本   Created: 2017-6-23 """
py3study
2020/01/03
6080
LB层到Real Server之间访问请求的响应时间及HTTP状态码监控及报警设置
为了监控到各业务的访问质量,基于LB层的Nginx日志,实现LB层到Real Server之间访问请求的响应时间(即upstream_response_time)及HTTP状态码(即upstream_status)的监控及报警。操作记录如下:
洗尽了浮华
2022/03/29
6030
LB层到Real Server之间访问请求的响应时间及HTTP状态码监控及报警设置
python发送邮件
文章目录 1. python发送邮件 1.1. 准备 1.1.1. smtplib 1.2. email 1.3. 普通文本邮件 1.4. 发送html邮件 1.5. 附件的发送 1.6. 将图片嵌入到正文信息中 python发送邮件 准备 python中发送邮件主要用的是smtplib和email两个模块,下面主要对这两个模块进行讲解 在讲解之前需要准备至少两个测试的邮箱,其中要在邮箱的设置中开启smtplib协议才可以进行发送和接受 smtplib smtplib.SMTP( [host
爱撒谎的男孩
2019/12/31
7840
python之SMTP发送邮件
假设我们自己的邮件地址是myemail@163.com,对方的邮件地址是friend@qq.com,我们在网易提供的163邮箱界面编写邮件,然后发送给对方。那么,这封邮件是怎么从我方发送到对方的呢?
菲宇
2019/06/13
1.3K0
Python编写的Linux邮件发送工具
之前有用过Linux自带的mail工具来定时发送邮件,但是要装mailx还有配mail.rc,这还比较正常,关键是到了ubantu下这工具用起来真是操蛋,如果哪天其他的unix like操作系统也有需求,那就太麻烦了,所以我用自带的python2.6.6和自带的邮件相关的库写了个小工具,使用步骤如下:
py3study
2020/01/17
7310
使用python的email、smtplib、poplib模块收发邮件
https://blog.csdn.net/weixin_35955795/article/details/52881044
用户1214487
2018/07/31
1K0
Python抓取指定微博用户最新动态
首先需要获取目标用户的oid。进入目标用户主页,按F12打开控制台,在Element页按Ctrl+F打开搜索栏,输入oid即可,然后将oid填入get_weibo.py
Naraku
2021/07/29
1.3K0
Python抓取指定微博用户最新动态
基于人体红外热释电检测的树莓派邮件报警器
只要标题够唬人,你们就会点进来,内容什么的其实都无所谓,无聊已经逼迫帅气的我做出了这种东西?!
聪明的瓦肯人
2020/02/26
1.5K0
基于人体红外热释电检测的树莓派邮件报警器
推荐阅读
相关推荐
监控服务器ssh登录,并发送报警邮件
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文