热门标签 | 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

推荐阅读
  • 本文将深入探讨PHP编程语言的基本概念,并解释PHP概念股的含义。通过详细解析,帮助读者理解PHP在Web开发和股票市场中的重要性。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文详细介绍了如何在云服务器上配置Nginx、Tomcat、JDK和MySQL。涵盖从下载、安装到配置的完整步骤,帮助读者快速搭建Java Web开发环境。 ... [详细]
  • 深入解析BookKeeper的设计与应用场景
    本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • MySQL缓存机制深度解析
    本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文详细介绍了在 Windows 7 系统中配置 Nginx 1.10.3 和 PHP 7.1.1 NTS 的步骤,包括修改 PHP 配置文件、处理依赖项以及创建批处理脚本启动和停止服务。重点解释了如何解决常见的运行时错误。 ... [详细]
  • 优化Flask应用的并发处理:解决Mysql连接过多问题
    本文探讨了在Flask应用中通过优化后端架构来应对高并发请求,特别是针对Mysql 'too many connections' 错误的解决方案。我们将介绍如何利用Redis缓存、Gunicorn多进程和Celery异步任务队列来提升系统的性能和稳定性。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
author-avatar
Jerl
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有