通过python统计nginx日志定位php网站响应慢的问题

news/2024/5/9 5:53:34/文章来源:https://blog.csdn.net/weixin_33772645/article/details/93297184

# 公司网站反映很慢,可能是一些页面的访问方法或者页面引起,通过程序统计nginx访问日志的页面和具体的action方法访问次数以及平均响应时间可以为程序开发的同事提供参考定位具体的代码


# 默认的nginx日志

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

现在加上响应时间,方便统计

log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$http_host" "$upstream_response_time" "$request_time"' ;

发现统计出来的响应时间$upstream_response_time无法参与计算,于是去掉引号,变为如下,方便计算:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" "$http_host" $upstream_response_time $request_time';

不需要去掉双引号也可以,用python处理一下去掉两边的双引号即可,如下:

_time = _time.lstrip('"').rstrip('"')

具体的python代码

#encoding=utf-8from decimal import Decimal
# 找到日志中的top n,日志格式如下
# 192.168.5.46 - - [01/Dec/2017:09:47:21 +0800] "GET /api_moblie_idol.php?action=get_user_guangying_comment&app_platform=android&channelId=S007&starid=6730&version=164&unique_id=A73308A15313C8E34B518CA515288A13&messageid=5a20ae347a11737a288b4738&gtui_cid=03908d9fa39c8de124aa01688109b26c&page=7&type=latest HTTP/1.0" 200 70 "-" "-" "223.89.74.82" "data.android.idol001.com" 0.050 0.052
# 统计访问网站php页面和方法的次数,并且生成响应时间
def log_analysis(log_file, dpath, topn = 10):path=log_fileshandle = open(path, 'r')count = 1log_dict = {}log_dict2 = {}total_time = 0.0while True:
     # 最好加上strip()碰到换行就无法识别了line
= shandle.readline().strip()# 如果到了文件末尾就终止if line == '':breaknodes = line.split()# 192.168.9.187 - - [30/Nov/2017:18:28:35 +0800] "GET /api_moblie_idol.phpnique_id=5ACE6943 HTTP/1.0" 200 13950 "-" "idol/5900 (iPhone; iOS 10.3.2; Scale/3.00)" "171.221.169.54" "data.idol001.com" "0.144" "0.144" _url, _time = nodes[6], nodes[-2]# 使用?分割页面,获取url,通过action和&分割出action动作_tmp = _url.split('action')if len(_tmp) != 2:continue_url = _url.split('?')[0]_method = _tmp[1].split('&')[0]# print 'url:%s, method:%s, time:%s' % (_url,_method,_time)# 如果不是数字就跳出本次循环if _time == '-':continuetry:# {(url,method):count}当做字典的key# 统计url,method的次数if (_url, _method) not in log_dict:log_dict[(_url, _method)] = 1else:log_dict[(_url, _method)] = log_dict[(_url, _method)] + 1# 统计url,method的累计时间if (_url, _method) not in log_dict2:log_dict2[(_url, _method)] = Decimal(_time)else:log_dict2[(_url, _method)] = Decimal(_time) + Decimal(log_dict2[(_url, _method)])except Exception,e:continue# print log_dict# print log_dict2# 关闭文件句柄 shandle.close()# 对字典进行排序# ('/index', 'post'): 2rst_list = log_dict.items()# print rst_listfor j in range(topn):# 冒泡法根据rst_list中的count排序,找出访问量最大的10个IPfor i in range(0,len(rst_list) - 1):if rst_list[i][1] > rst_list[i+1][1]:temp = rst_list[i]rst_list[i] = rst_list[i+1]rst_list[i+1] = temp# 获取 topn 个数need_list = rst_list[-1:-topn - 1:-1]rt_list = []for _line, _num in need_list:_tmp_dict = {}_avg_time = Decimal(log_dict2[_line])/Decimal(_num)# print '_avg= %s' % _avg_time_tmp_dict['_num'] = _num_tmp_dict['_avg'] = _avg_timert_list.append((_line,_tmp_dict))# print rt_list# 打印出top 10访问日志,并写入网页中title = 'nginx访问日志'tbody = ''for k,v in rt_list:print v['_num'],k[1],k[0],v['_avg']tbody += '<tr>\n<td>%s</td><td>%s</td><td>%s</td><td>%s</td>\n<tr>\n' % (v['_num'],k[1],k[0],v['_avg'])html_tpl = '''<!DOCTYPE html><html><head><meta charset="utf-8"><title>{title}</title></head><body><table border="1" cellspacing="0" cellpadding="0" color='pink'><thead><tr cellspacing="0" cellpadding="0"><th>访问次数</th><th>method</th><th>url</th><th>平均响应时间</th></tr></thead>{tbody}</table></body></html>'''html_handle = open(dpath,'w')html_handle.write(html_tpl.format(title = title, tbody = tbody))html_handle.close()# 函数入口 if __name__ == '__main__':# nginx日志文件log_file = 'access_android_idol001_com.log'dpath = 'top1000.html'# topn 表示去top多少个# 不传,默认10个topn = 1000log_analysis(log_file,dpath,topn)

 最终的效果:

转载于:https://www.cnblogs.com/reblue520/p/7940936.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_795030.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

精心整理的前端开发必备网站推荐

本人是一个纯正的小白&#xff0c;在学习的过程中搜集了一些关于前端开发的网站&#xff0c;希望对大家能够有所帮助&#xff01;授人以鱼不如授人以渔&#xff01; 1.MDN开发者文档网址:https://developer.mozilla.org/zh-CN/ 2.CSS教程:https://www.schoolw3c.com/html-css/…

前端开发学习及工具网站

1、w3cschool(编程狮) 这个网站适合0基础学前端的同学&#xff0c;内容简单易懂&#xff0c;在闯关中进行学习&#xff0c;能够刺激你的学习欲望&#xff0c;可以在这里进行HTMLCSSJS以及一些前端框架的简单学习&#xff0c;闯关成功还能获得证书哦 2、freeCodeCamp 这个网站可…

个人精心整理的前端开发必备网站推荐

本人是一个纯正的小白&#xff0c;在学习的过程中搜集了一些关于前端开发的网站&#xff0c;希望对大家能够有所帮助&#xff01;授人以鱼不如授人以渔&#xff01; 1.MDN开发者文档网址:https://developer.mozilla.org/zh-CN/ 2.CSS教程:https://www.schoolw3c.com/html-css/…

2021学习前端常用网站,你用过吗

一&#xff0c;bilibili 什么&#xff0c;你认为这是一个看搞笑鬼畜&#xff0c;二次元网站&#xff1f;不不不&#xff0c;它也是一个超级棒的学习网站&#xff0c;首推&#xff01;&#xff01;最最重要的是它是免费的。 二&#xff0c;慕课网 程序员的梦工厂&#xff0c;这…

个人精心整理的前端开发必备网站推荐

本人是一个纯正的小白&#xff0c;在学习的过程中搜集了一些关于前端开发的网站&#xff0c;希望对大家能够有所帮助&#xff01;授人以鱼不如授人以渔&#xff01; 1.MDN开发者文档网址:https://developer.mozilla.org/zh-CN/ 2.CSS教程:https://www.schoolw3c.com/html-css/…

前端项目资源网站

1.CodePen&#xff1a;http://codepen.io/ 网站里有很多很酷的特效&#xff0c;而且可以看到效果的源代码&#xff0c;也可以看到实现效果&#xff0c;是一个非常不错的前端开发学习资源网站。这个是CodePen网站里的一个效果的源码截图&#xff0c;是不是很酷呀&#xff01; …

学前端的你,还在迷茫吗?快看看这些前端学习网站吧

1、博客园(http://www.cnblogs.com/) 博客园创立于2004年1月&#xff0c;是一个面向开发者的知识分享社区。自创建以来&#xff0c;博客园一直致力并专注于为开发者打造一个纯净的技术交流社区&#xff0c;推动并帮助开发者通过互联网分享知识&#xff0c;从而让更多开发者从中…

推荐 12 个学习前端必备的神仙级工具类项目与网站

前言 我是一个常年混迹在 GitHub 上的猫星人&#xff0c;所以发现了不少好的前端开源项目、常用技巧&#xff0c;在此分享给大家。 今天给大家推荐的是平时学习前端时&#xff0c;经常用到的一些辅助工具类网站。 网址描述unbug.github.io/codelf变量命名智能推荐&#xff08…

「颜值即正义」那些管UI的妹子要来的网站啦

今天小编要和大家分享一波硬核网站&#xff0c;作为一名前端工程师&#xff0c;不能总依靠UI小姐姐&#xff0c;工作上要为UI小姐姐能分担多少就分担多少&#xff0c;做事情不要设边界。生活上也是&#xff0c;多请她喝几杯奶茶&#xff0c;她也许就会告诉你下面这些网站。 0.…

前端10 个“哇塞”的 学习资源网站,收藏等于学会~

1. responsively responsively是干嘛吃的&#xff1f;一张图你就懂了&#xff1a; ​ 你可以在上面输入你的 web 网站&#xff0c;一次性查看它在各个设备下的响应式布局表现~ 并且支持自定义选择设备、导出为图片等&#xff1b;响应式布局&#xff0c;一个界面尽收眼底&…

还在为满意的渐变色发愁吗?10+个网站帮你解决烦恼

前言&#x1f384; 前端开发中&#xff0c;色彩的搭配非常重要&#xff0c;好的色彩设计会给网站增光添彩&#xff0c;让用户一看上去就感觉心情愉悦&#xff1b;坏的色彩~~~ 随着设计技术的进步&#xff0c;渐变颜色在色彩设计中越来越受欢迎&#xff0c;但想设计出满意的渐…

推荐 12 个学习前端必备的神仙级工具类项目与网站

1. codelf 有一种痛&#xff0c;不是程序员可能不懂&#xff0c;但如果是程序员一定懂&#xff0c;那就是给变量或函数命名。 随着项目越来越复杂&#xff0c;变量和函数数量越来越多&#xff0c;英语水平貌似也 hold 不住了。 虽然每个编程语言都有各种命名规范&#xff0c…

前端工程师必备九大网站

01 GitHub https://github.com/ 这个网站托管着很多优质的开源项目&#xff0c;像你可能听说过的 Linux&#xff0c;React&#xff0c;Vue&#xff0c;Webpack&#xff0c;JQuery等都在这个网站上开源。你可以轻松地获取源码并为相应的项目发送 pull request&#xff0c;然后…

比收费的还好用,7个自学python的网站

今天给大家分享几个自学python经常用到的网站&#xff0c;非常实用&#xff0c;建议收藏&#xff01; 0.Crossin的编程教室 python666.cn 首先当然要自我推荐一下我自己的python学习网站。内容面向python入门学习者&#xff0c;通俗易懂&#xff0c;零基础也可以学习。课程内容…

比收费的还好用,7个自学python的网站

很多同学在学习编程之初&#xff0c;都苦于不知道上哪里寻找学习资料。其实网上免费的教程就有很多&#xff0c;足够我们入门学习。 今天给大家分享几个自学python经常用到的网站&#xff0c;非常实用&#xff0c;建议收藏&#xff01; 0.Crossin的编程教室 python666.cn 首先…

贼适合初学者 这些练习 Python 的网站太好玩了

1. LeetCode LeetCode 是一个刷算法题的网站&#xff0c;里面有多种语言可选 &#xff0c;题目分为简单、中等和困难三个级别&#xff0c;可以根据自己的水平进行选择&#xff0c;想进大厂的话&#xff0c;这可能是必不可少的一关。 网址&#xff1a;https://leetcode-cn.com/…

中国铁路 12306 网站全新改版升级:支持扫码登录

百度智能云 云生态狂欢季 热门云产品1折起>>> 中国铁路官方宣布&#xff0c;全新改版升级的中国铁路 12306 网站将于11月3日&#xff08;即今天&#xff09;正式上线运营&#xff0c;网站客运服务功能更趋完善&#xff0c;旅客购票将更加方便快捷。▲全新改版升级的…

web学习网站

23、vxe-table v3 22、web前端开发视频教程资料&#xff0c;免费领&#xff01;-老汤博客 21、jQuery插件库-收集最全最新最好的jQuery插件 jquery插件库 20、ss免费账号 Alvin9999/new-pac Wiki GitHub 下载在客户端填充图一数据 19、 css样式查看网站 Can I use..…

【壹加壹SEO技术博客】SEO优化过程中排名下降的原因

【壹加壹SEO技术博客】SEO优化过程中排名下降的原因 1、网站上HTML标签的过度使用H1标签可以减少网站关键词排名的难度。但是很多网站管理员和朋友知道这种方法后&#xff0c;在自己的首页上无限制地添加H1标签&#xff0c;这不仅有不利于优化&#xff0c;还会导致网站过度优化…

yoast造成php内存,DUX主题与Yoast SEO插件导致网站重复出现网站标题和副标题

0x00 症状五天前&#xff0c;也就是6月23日&#xff0c;我的网站出现与本文标题相同的症状&#xff0c;那天下午&#xff0c;突然发现网站的标题与副标题重复出现&#xff0c;例如本站标题与副标题是“郁闷老鸟之家 | 一个关于技术与生活的家园”&#xff0c;但是当时的情况是“…