#!/usr/bin/env python
#coding:utf-8 import MySQLdb,requests
import time
from datetime import datetime global sendtime
global flag
global monitor_time number = 0
to_email = []
params = {}
timedic = {}
a=[]
b=[]
c=[] def sendmail(mail_list, message):
url = "http://api.sendcloud.net/apiv2/mail/send"
for number in range(len(mail_list)):
params['apiUser'] = ""
params['apiKey'] = ""
params['from'] = ""
params['fromName'] = "bill"
params['subject'] = "warning"
params['html'] = "your html is abnormal: " + message
params['to'] = mail_list[number]
r = requests.post(url, files={}, data=params)
print r.text #get请求
def get_status(url):
g = requests.get(url,allow_redirects = False)
return g.status_code,g.content #post请求
def post_status(url):
p = requests.post(url,allow_redirects = False)
return p.status_code , p.content if __name__ == '__main__': while True: conn = MySQLdb.connect(host='127.0.0.1', user='root', passwd='734815', db='url_monitor')
cur = conn.cursor()
# 查找所有的
reCount = cur.execute('select * from url_test;')
# 获取所有的url及相关参数
all_urls = cur.fetchall() for item in all_urls:
#设置初始值
if number == 0:
timedic[item[0]] = 0
flag = 0 #监控间隔
monitor_time = int(item[5]) #判断是post还是get请求
if item[1] == 'get':
current_status = get_status(item[0])
else:
current_status = post_status(item[0]) to_email = item[3].split(',')
#print to_email
a = []
b = []
c = [] #此时存在数据库与直接获取的页面都存在空白符,所以需要去掉,用函数去出现问题
#数据库
for n in range(len(item[4])):
if item[4][n] != '\r' :
a.append(item[4][n])
for n in range(len(a)):
if a[n] != '\n':
c.append(a[n])
#直接获取
for n in range(len(current_status[1])):
if current_status[1][n] != '\n':
b.append(current_status[1][n]) #请求之后的状态跟预设的状态不一致,或者请求的页面与预设的页面不一致
if current_status[0] != int(item[2]) or c != b: #异常发送
if timedic[item[0]] == 0:
# 标志着此时的状态是不正常的
flag = 1
sendtime = datetime.now()
timedic[item[0]] = 1
message = item[0] + '\t' + str(current_status[0]) + ' is mismatch with preset! ' + 'The preset is ' + str(item[2])+'or the reponse is error'
sendmail(to_email, message)
#print message currenttime = datetime.now()
if (currenttime-sendtime).seconds >= 3:
timedic[item[0]] = 0 #如果此时恢复正常
if current_status[0] == int(item[2]) and c == b: if flag == 1:
message = item[0] + '\tChange from abnomaly to normal!'
sendmail(to_email, message)
flag = 0
#print message
else:
print item[0]+'\t is normal!'
# 正常状态 number = 1
# 控制监控的间隔,有数据库的监控间隔决定
time.sleep(monitor_time)
cur.close()
conn.close()

  

url监控的更多相关文章

  1. zabbix自动发现功能实现批量web url监控

    需求: 现在有大量url需要监控,形式如http://www.baidu.com ,要求url状态不为200即报警. 需求详细分析: 大量的url,且url经常变化,现在监控用的是zabbix,如果手 ...

  2. python url监控 并邮件报警

    import timeimport requestsimport smtplibfrom email.mime.text import MIMETextimport datetime def Send ...

  3. 利用curl 实现URL监控

    #curl 命令介绍 curl命令在运维中经常使用,但运维中常用的参数也并不多,因此也是列表如下 -I/--head  显示响应头信息 -m/--max-time <seconds>  访 ...

  4. zabbix web url监控

    一, web监控 这个监控为通过cookie的值来监控网站是否能正常使用 这里测试环境为bbs网站 二, 配置web监控 01, 创建web监控项 02,配置步骤1 查看数据是否成功 第一查看首页时候 ...

  5. 调用链监控 CAT 之 URL埋点实践

    URL监控埋点作用 一个http请求来了之后,会自动打点,能够记录每个url的访问情况,并将以此请求后续的调用链路串起来,可以在cat上查看logview 可以在cat Transaction及Eve ...

  6. zabbix系列(八)zabbix添加对web页面url的状态监控

    通过zabbi做web监控不仅仅可以监控到站点的响应时间,还可以根据站点返回的状态码,或者响应时间做报警 1.对需要监控的主机添加web监控   在configuration—hosts 中打开主机列 ...

  7. 自动发现实现url+响应时间监控

    url自动发现脚本: [root@jenkins scripts]# cat  urlDiscovery.py #!/usr/bin/env python #coding:utf-8 import o ...

  8. zabbix自动发现 url 以及对http返回状态码监控实现 告警

    2019-06-04 18:39:12 目的:批量监控业务URL的返回状态码,通过zabbix监控判断业务好坏. 1.zabbix安装 请查看此永久链接:https://www.cnblogs.com ...

  9. zabbix添加对web页面url的状态监控

    zabbix3.0.4添加对web页面url的状态监控 1.应用集配置 在配置—>主机中打开主机列表,选择需要添加监控主机的web,创建应用集 2.web监测配置 选择web场景,再单击右上角的 ...

随机推荐

  1. yii2 RESTful API Develop

    参考文档:http://www.yiiframework.com/doc-2.0/guide-rest.html 以 DB 中的 news 表为例创建该资源的 RESTful API,最终的测试通过工 ...

  2. Linux上安装Nginx及常用命令

    一.Linux安装软件常用方法 1.rpm(或pkg)安装,类似于Windows安装程序,是预编译好的程序. 1)使用的是通用参数编译,配置参数不是最佳 2)可控制性不强,比如对程序特定组件的定制性安 ...

  3. kettle的job中使用循环

     job中使用循环 在一个不稳定的网络环境下作文件传输.偶尔会有超时或连接重置.这时须要稍等片刻再重试.在重试10次之后放弃并结束该job.类似使用循环解决这类问题.  该演示样例job演示了这样 ...

  4. Linux上创建SSH隧道

    Win上有好用的Xshell,可以做SSH隧道,但是Linux没有很好用的工具,本来gSTM还可以,但是死活装不上,也很久没更新了. 但其实,Linux上直接使用ssh命令就可以创建SSH隧道,非常方 ...

  5. 如何获得<div id=”div1”>This is first layer</div>中的值?

    如何获得<div id=”div1”>This is first layer</div>中的值? 解答: <script> var div1=Document.ge ...

  6. Collection 和 Collections的区别?

    Collection 和 Collections的区别? 解答:Collection是java.util下的接口,它是各种集合的父接口,继承于它的接口主要有Set 和List:Collections是 ...

  7. SQL Server RAISERROR() 函数

    生成错误消息并启动会话的错误处理. RAISERROR 可以引用 sys.messages 目录视图中存储的用户定义消息,也可以动态建立消息. 该消息作为服务器错误消息返回到调用应用程序,或返回到 T ...

  8. Xcode The operation couldn’t be completed. (NSURLErrorDomain error -1012.)

    使用Xcode SVN 出现问题 The operation couldn’t be completed. (NSURLErrorDomain error -1012.) 解决方法: 打开终端 然后输 ...

  9. python uwsgi 部署以及优化

    这篇文章其实两个月之前就应该面世了,但是最近琐事.烦心事太多就一直懒得动笔,拖到现在才写 一.uwsgi.wsgi.fastcgi区别和联系 参见之前的文章 http://www.cnblogs.co ...

  10. java的Date类型转换为MySQL数据库的Date类型

    最近遇到一个问题,需要把java中的日期类型存放为MySQL数据库的日期类型,两个日期之间需要进行转化才能进行存储,转化代码如下: package com.alphajuns.demo1; impor ...