pycurl 模块监控web服务质量应用

简介:

  做过运维的应该都做过http服务了。像一些电子商城,或者是一些互联网公司,web的服务之类是至关重要的,近期看了刘天斯大哥的书觉得自己运维平台应该也可以这样去监控服务之类,今天学习了pycurl模块,这里记录一下:

  模块相关说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
=  pycurl.Curl()     #创建一个curl对象  
c.setopt(pycurl.CONNECTTIMEOUT,  5 )     #连接的等待时间,设置为0则不等待  
c.setopt(pycurl.TIMEOUT,  5 )     #请求超时时间  
c.setopt(pycurl.NOPROGRESS,  0 )     #是否屏蔽下载进度条,非0则屏蔽  
c.setopt(pycurl.MAXREDIRS,  5 )     #指定HTTP重定向的最大数  
c.setopt(pycurl.FORBID_REUSE,  1 )     #完成交互后强制断开连接,不重用  
c.setopt(pycurl.FRESH_CONNECT, 1 )     #强制获取新的连接,即替代缓存中的连接  
c.setopt(pycurl.DNS_CACHE_TIMEOUT, 60 )     #设置保存DNS信息的时间,默认为120秒  
c.setopt(pycurl.URL, "http://www.baidu.com" )     #指定请求的URL  
c.setopt(pycurl.USERAGENT, "Mozilla/5.2 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50324)" )     #配置请求HTTP头的User-Agent  
c.setopt(pycurl.HEADERFUNCTION, getheader)   #将返回的HTTP HEADER定向到回调函数getheader  c.setopt(pycurl.WRITEFUNCTION, getbody)    #将返回的内容定向到回调函数getbody  
c.setopt(pycurl.WRITEHEADER, fileobj)      #将返回的HTTP HEADER定向到fileobj文件对象  
c.setopt(pycurl.WRITEDATA, fileobj)     #将返回的HTML内容定向到fileobj文件对象
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
=  pycurl.Curl()     #创建一个curl对象  
c.getinfo(pycurl.HTTP_CODE)     #返回的HTTP状态码  
c.getinfo(pycurl.TOTAL_TIME)     #传输结束所消耗的总时间  
c.getinfo(pycurl.NAMELOOKUP_TIME)     #DNS解析所消耗的时间  
c.getinfo(pycurl.CONNECT_TIME)     #建立连接所消耗的时间  
c.getinfo(pycurl.PRETRANSFER_TIME)     #从建立连接到准备传输所消耗的时间  
c.getinfo(pycurl.STARTTRANSFER_TIME)     #从建立连接到传输开始消耗的时间  
c.getinfo(pycurl.REDIRECT_TIME)     #重定向所消耗的时间  
c.getinfo(pycurl.SIZE_UPLOAD)     #上传数据包大小  
c.getinfo(pycurl.SIZE_DOWNLOAD)     #下载数据包大小  
c.getinfo(pycurl.SPEED_DOWNLOAD)     #平均下载速度  
c.getinfo(pycurl.SPEED_UPLOAD)     #平均上传速度  
c.getinfo(pycurl.HEADER_SIZE)     #HTTP头部大小 
 
好了通过上面的思路,我们写一个脚本来完成这个工作就好了:
直接代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-  
import  os,sys  
import  time  
import  sys  
import  pycurl 
 
class  Test:
     def  __init__( self ):
         self .contents  =  ''
     def  callback( self ,curl):
         self .contents  =  self .contents  +  curl
def  test_gzip(url): 
     =  Test() 
     =  pycurl.Curl()  
     c.setopt(pycurl.WRITEFUNCTION,t.callback)
     c.setopt(pycurl.ENCODING,  'gzip' )
     c.setopt(pycurl.URL,input_url) 
     c.perform()    
     NAMELOOKUP_TIME  =   c.getinfo(c.NAMELOOKUP_TIME)  
     CONNECT_TIME  =   c.getinfo(c.CONNECT_TIME) 
     PRETRANSFER_TIME  =    c.getinfo(c.PRETRANSFER_TIME)         
     STARTTRANSFER_TIME  =  c.getinfo(c.STARTTRANSFER_TIME)   
     TOTAL_TIME  =  c.getinfo(c.TOTAL_TIME)
     HTTP_CODE  =   c.getinfo(c.HTTP_CODE)  
     SIZE_DOWNLOAD  =   c.getinfo(c.SIZE_DOWNLOAD)  
     HEADER_SIZE  =  c.getinfo(c.HEADER_SIZE)   
     SPEED_DOWNLOAD = c.getinfo(c.SPEED_DOWNLOAD)   
     print  "HTTP状态码:%s"  % (HTTP_CODE)  
     print  "DNS解析时间:%.2f ms" % (NAMELOOKUP_TIME * 1000 )  
     print  "建立连接时间:%.2f ms"  % (CONNECT_TIME * 1000 )  
     print  "准备传输时间:%.2f ms"  % (PRETRANSFER_TIME * 1000 )  
     print  "传输开始时间:%.2f ms"  % (STARTTRANSFER_TIME * 1000 )  
     print  "传输结束总时间:%.2f ms"  % (TOTAL_TIME * 1000 )  
     print  "下载数据包大小:%d bytes/s"  % (SIZE_DOWNLOAD)  
     print  "HTTP头部大小:%d byte"  % (HEADER_SIZE)  
     print  "平均下载速度:%d bytes/s"  % (SPEED_DOWNLOAD)  
if  __name__  = =  '__main__' :
     url  =  sys.argv[ 1 ]
     test_gzip(url)

#备注,上面之所以写一个类的函数,就是因为,pycurl.WRITEFUNCTION这里我们定义的是返回一个函数,然后我们给一个空的函数就好了,原先试过生成文件结果生成不了。搞出一堆的乱码,导致前端不能调用,看一下执行结果:

wKiom1T1dITD7WLkAAD80f4pfjI874.jpg

这个结果要是要求不高的话可以前端调用,我现在是铁通的线路,可以点击刷新:

wKiom1T1dTegoHQEAABKT4MEits395.jpg

效果:

wKioL1T1dorD-IPoAACzeQcQX3o959.jpg

好了今天就完成这么多了,后期的话肯定是要入库,然后结合rrdtool出图的,不过还在研究当中。










本文转自 小罗ge11 51CTO博客,原文链接:http://blog.51cto.com/xiaoluoge/1616922,如需转载请自行联系原作者
目录
相关文章
|
2天前
|
Java 应用服务中间件 测试技术
深入探索Spring Boot Web应用源码及实战应用
【5月更文挑战第11天】本文将详细解析Spring Boot Web应用的源码架构,并通过一个实际案例,展示如何构建一个基于Spring Boot的Web应用。本文旨在帮助读者更好地理解Spring Boot的内部工作机制,以及如何利用这些机制优化自己的Web应用开发。
14 3
|
11天前
|
XML 存储 Java
11:Servlet中初始化参数的获取与应用-Java Web
11:Servlet中初始化参数的获取与应用-Java Web
25 3
|
2天前
|
缓存 数据库连接 数据库
构建高性能的Python Web应用:优化技巧与最佳实践
本文探讨了如何通过优化技巧和最佳实践来构建高性能的Python Web应用。从代码优化到服务器配置,我们将深入研究提高Python Web应用性能的各个方面。通过本文,读者将了解到一系列提高Python Web应用性能的方法,从而更好地应对高并发和大流量的挑战。
|
3天前
|
缓存 监控 前端开发
探索现代Web应用的性能优化实践
【5月更文挑战第10天】随着互联网技术的飞速发展,用户对Web应用的响应速度和流畅度要求越来越高。性能优化已成为前端开发中不可或缺的一环。本文将深入探讨Web应用性能优化的关键策略,包括代码分割、资源压缩、缓存利用、服务端渲染等技术手段,以及如何通过工具进行性能监测和分析。我们将从原理出发,结合实际案例,帮助开发者构建更快速、更高效的Web应用。
|
11天前
|
设计模式 存储 前端开发
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
18:JavaBean简介及其在表单处理与DAO设计模式中的应用-Java Web
25 4
|
11天前
|
存储 前端开发 安全
13:会话跟踪技术Session的深度应用与实践-Java Web
13:会话跟踪技术Session的深度应用与实践-Java Web
25 3
|
11天前
|
存储 前端开发 搜索推荐
12:会话跟踪技术Cookie的深度应用与实践-Java Web
12:会话跟踪技术Cookie的深度应用与实践-Java Web
24 4
|
13天前
|
缓存 移动开发 前端开发
【专栏:HTML与CSS前端技术趋势篇】HTML与CSS在PWA(Progressive Web Apps)中的应用
【4月更文挑战第30天】PWA(Progressive Web Apps)结合现代Web技术,提供接近原生应用的体验。HTML在PWA中构建页面结构和内容,响应式设计、语义化标签、Manifest文件和离线页面的创建都离不开HTML。CSS则用于定制主题样式、实现动画效果、响应式布局和管理字体图标。两者协同工作,保证PWA在不同设备和网络环境下的快速、可靠和一致性体验。随着前端技术进步,HTML与CSS在PWA中的应用将更广泛。
|
13天前
|
前端开发 JavaScript 搜索推荐
【专栏:HTML 与 CSS 前端技术趋势篇】HTML 与 CSS 在 Web 组件化中的应用
【4月更文挑战第30天】本文探讨了HTML和CSS在Web组件化中的应用及其在前端趋势中的重要性。组件化提高了代码复用、维护性和扩展性。HTML提供组件结构,语义化标签增进可读性,支持用户交互;CSS实现样式封装、布局控制和主题定制。案例展示了导航栏、卡片和模态框组件的创建。响应式设计、动态样式、CSS预处理器和Web组件标准等趋势影响HTML/CSS在组件化中的应用。面对兼容性、代码复杂度和性能优化挑战,需采取相应策略。未来,持续发掘HTML和CSS潜力,推动组件化开发创新,提升Web应用体验。
|
13天前
|
缓存 前端开发 JavaScript
探索现代Web应用的性能优化策略移动应用开发的未来之路:跨平台与原生之争
【4月更文挑战第30天】随着互联网技术的迅猛发展,Web应用已成为信息交流和商业活动的重要平台。用户对Web应用的响应速度和稳定性有着极高的期望,这促使开发者不断寻求提升应用性能的有效途径。本文将深入探讨针对现代Web应用进行性能优化的关键策略,包括前端优化、后端优化以及数据库层面的调优技巧,旨在为开发者提供一套全面的优化工具箱,帮助他们构建更快速、更高效的Web应用。