网站运维:使用python+pycurl查看网站性能指标
衡量一个网站好坏的维度有很多,但对于运维人员来说,网站性能指标才是我们更关注的。从用户的角度来看,最直观的感受就是用户输入URL后网站内容打开的速度有多快。由用户向服务器发起请求,然后服务器响应并将数据传送给客户端。了解http协议的朋友应该知道,其中涉及到很多流程。这只能通过以下步骤来实现,所以如果网站出现访问速度问题,应该从整个链路而不是某一方面来排查原因。访问示意图如下:
在本次访问过程中,我们会关注以下几点指标:
- DNS解析时间消耗
- 从建立连接到准备传输的时间消耗
- 时间从建立连接到开始传输的消耗时间
- 传输结束时的总时间消耗
- 平均下载速度
- 返回的HTTP状态码
通过在出现问题时实时监控上述指标,可以快速分析定位问题。那么如何获取这些数据呢?我们将在下面使用 pycurl。 pycurl 包是 libcurl 的 Python 接口,用 C 语言编写,速度非常快。我们看一下我们的具体实现:
import pycurl import StringIO
def check(urls): _CODE,DNS_TIME,CONNECT_TIME ,PRETRANSFER_TIME,START传输时间、总时间、下载速度 url = 'http://' + str(urls) c = pycurl.Curl( )♶t.CON. c.setopt(pycurl.TIMEOUT,5) c.setopt(pycurl.NOPROGRESS,1) c.setopt (pycurl.FORBID_REUSE) 尝试: b = StringIO。字符串IO。 。状态码 DNS_TIME = c.getinfo(c.NAMELOOKUP_TIME) * 1000 #DNS消耗时间 CONNECT_TIME = c.getinfo(c.CONNECT_TIME) * 1000 #建立连接所需的时间 PRETRANSFER_TIME = c.getinfo(c.PRETRANSFER_TIME) * 1000 #建立连接并准备传输所需的时间 STARTTRANSFER_TIME = c.getinfo(c.STARTTRANSFER_TIME ) ) * 1000 #建立连接进行传输消耗 TOTAL_TIME = c.getinfo(c.TOTAL_TIME) * 100 c.close () pycurl.error 除外,错误: 返回 HTTP_CODE , DNS_TIME, CONNECT_TIME,PRETRANSFER_TIME, STARTTRANSFER_TIME,TOTAL_TIME,SPEED_DOWNLOAD
) as open f.write('HTTP_CODE, DNS _TIME,CONNECT_时间、预传输时间、开始传输时间、总时间、速度下载' + '\ n') res = check('www.mindg.cn') f.write(str(res) 脚本中我只得到了一些核心指标,当然pycurl还有更多功能除了这些之外,如果有需要的话,还可以得到更详细的指标,比如平均上传速度、HTTP头大小等,有需要的朋友可以自己研究一下。我不会过多解释剧本。我在关键行添加了注释,最后将获得的数据写入文本中。该脚本可以定期执行,实时获取最新数据。这个脚本在要求不高的场景下使用还是可以的,但这只是我们自动化运维的第一步,因为最好的方式还是通过Web。页面实时显示各站点状态,方便查看。要实现一个基本的网站,有几个问题需要我们思考和解决:
|
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。