热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用perl+MongoDB实现一个WEB站点请求耗时日志分析系统

PS:从我的新浪博客搬过来的文章前段时间部门要我统计各个web应用的请求耗时情况,以便各个组能找出耗时多的功能进行优化。其实这个分析看似比较简单,只要拿到各个web应用的access日志就很容易获得所有请求的耗时。但调查了实际环境以后发现要填的坑还真不

PS:从我的新浪博客搬过来的文章 前段时间部门要我统计各个web应用的请求耗时情况,以便各个组能找出耗时多的功能进行优化。其实这个分析看似比较简单,只要拿到各个web应用的access日志就很容易获得所有请求的耗时。但调查了实际环境以后发现要填的坑还真不

PS:从我的新浪博客搬过来的文章

前段时间部门要我统计各个web应用的请求耗时情况,以便各个组能找出耗时多的功能进行优化。其实这个分析看似比较简单,只要拿到各个web应用的access日志就很容易获得所有请求的耗时。但调查了实际环境以后发现要填的坑还真不少啊。

1.日志位置问题

每个web应用都部署在不同的机器下,共60多个应用,每个都来一套分析程序?算了吧。。。还是需要运维的配置一个同步,每天把access日志统一放到一个单独的服务器上。

2.日志归档规则

有的是1天就一个access日志,有的则是一个小时一个access日志,这个也要考虑~~

3.日志格式

每台应用部署在不同种类的web服务器里(resin,apache,nginx),access日志格式不统一,有的耗时字段在status后面,有的则在最后;耗时项的单位也各部相同,有的是秒,有的是微秒;带引号的不带引号的。。。每种格式写一段分析代码?太累。。。需要建立一个可配置的分析规则。

4.效率问题

分析的日志量大概每天会有10G左右,用C做?-我不太熟,而且可维护性差点。用Java吧?-我对Java的IO的效率不是很有信心。。。可以用perl啊,脚本语言,内置正则,功能强大,而且有庞大的第三方代码库支持-CPAN,唯一的问题就是我不会perl。。。

把上面问题都搞定的话,做个每天的定时分析程序就OK了。

第一步,先学perl吧。也没找什么书,直接去perl网站下一个perl的解释器,里面就会有完整的tutorial,我完全看的这个,大概1天就会了,之后碰到什么问题直接去tutorial里查一下。perl的解释器流行的有两个,ActivePerl和strawberry-perl,他们的区别就是后面那个除了有perl解释器外,还赠送了很多linux下的基础工具,如make,gcc,如果在windows下开发最好还是用strawberry。学习perl的过程中,香港虚拟主机,发现perl是一个很漂亮的语言,香港服务器,符号多,潜规则多,强大的正则api,使程序写出来很干净,开发速度很快。

第二步,香港虚拟主机,关于日志格式的问题,我找到了一个专门做access日志分析的开源项目-AWStat(version7.0),支持access格式的自定义,仔细研究了一下源代码,找到解析格式的那部分代码-DefinePerlParsingFormat函数,随后我对这个函数做了一下改进,增加了解析耗时项的代码逻辑。其实这个解析的原理就是构造一个大的正则表达式,里面有很多的match group来表示不同的日志项。

第三步,日志位置和归档规则问题,需要设计一个配置文件,将系统名称,日志位置,文件名和归档规则一一对应起来,以便后续可以方便执行日志分析和生成分析报告。这部分偏逻辑性的工作我决定由Java来完成。

至此,整个分析程序的大致轮廓已经出来了,以AWStat项目的DefinePerlParsingFormat函数为基础,编写一个分析单个access日志文件的perl脚本,并由一个Java应用程序来调用,而后者主要负责控制日志分析的过程,采用多线程并发调用perl解释器执行perl脚本来分析多个日志文件,最终汇总分析结果。由于每个perl脚本的执行会在单独的linux进程中,所以对Java虚拟机不会构成压力,Java应用程序可以专注于分析任务的调度以及整理分析报告,这样的架构应该能得到不错的性能。

后续的开发中,我在perl脚本中又增加了mongoDB的支持,为每一个系统的每天日志建立能快速索引查询的日志数据库,但为了性能考虑,只提取access日志中时间,url,耗时几个字段。又顺便加了个内嵌jetty服务器,可以随时查看mongoDB中的日志数据。

这个日志分析程序部署在8核的RedHat上,每天10GB的日志量能在2分钟内完成所有分析并建立数据库,性能上还说的过去。其实更好的解决方案是建立分布式的存储架构,用hadoop来做,但需要的物理机器比较多,目前毕竟给我的资源有限,所以无法实施。

参考实现代码:git://github.com/frozen007/LogAnalysis.git

推荐阅读
  • CentOS 7配置SSH远程访问及控制
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • LVS-DR直接路由实现负载均衡示例
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • 构建LNMP架构平台
    LNMP架构的组成:Linux、Nginx、MySQL、PHP关于NginxNginx与apache的作用一样,都是为了搭建网站服务器,由俄罗斯人lgorsysoev开发,其特点是 ... [详细]
  • centos php部署到nginx 404_NodeJS项目部署到阿里云ECS服务器全程详解
    本文转载自:http:www.kovli.com20170919ecs-deploy作者:Kovli本文详细介绍如何部署NodeJS项目到阿里云ECS上, ... [详细]
  • MR程序的几种提交运行模式本地模型运行1在windows的eclipse里面直接运行main方法,就会将job提交给本地执行器localjobrunner执行-- ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • Windos10系统下,Nginx设置文件服务器下载,关于中文路径被浏览器编码后,nginx无法访问问题
    windows10默认编码为gbk,需要在区域设置中,启用UTF—8编码,然后nginx配置文件中在设置charset,(edge可借助charset工具扩展,查看当 ... [详细]
  • PHP编程能开发哪些应用?
    导读:很多朋友问到关于PHP编程能开发哪些应用的相关问题,本文编程笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!本文目录一览: ... [详细]
author-avatar
小D申俊浩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有