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

推荐阅读
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • 构建LNMP架构平台
    LNMP架构的组成:Linux、Nginx、MySQL、PHP关于NginxNginx与apache的作用一样,都是为了搭建网站服务器,由俄罗斯人lgorsysoev开发,其特点是 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • svnWebUI:一款现代化的svn服务端管理软件
    svnWebUI是一款图形化管理服务端Subversion的配置工具,适用于非程序员使用。它解决了svn用户和权限配置繁琐且不便的问题,提供了现代化的web界面,让svn服务端管理变得轻松。演示地址:http://svn.nginxwebui.cn:6060。 ... [详细]
  • Centos下安装memcached+memcached教程
    本文介绍了在Centos下安装memcached和使用memcached的教程,详细解释了memcached的工作原理,包括缓存数据和对象、减少数据库读取次数、提高网站速度等。同时,还对memcached的快速和高效率进行了解释,与传统的文件型数据库相比,memcached作为一个内存型数据库,具有更高的读取速度。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • ZooKeeper 学习
    前言相信大家对ZooKeeper应该不算陌生。但是你真的了解ZooKeeper是个什么东西吗?如果别人面试官让你给他讲讲ZooKeeper是个什么东西, ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 现在比较流行使用静态网站生成器来搭建网站,博客产品着陆页微信转发页面等。但每次都需要对服务器进行配置,也是一个重复但繁琐的工作。使用DockerWeb,只需5分钟就能搭建一个基于D ... [详细]
  • Windos10系统下,Nginx设置文件服务器下载,关于中文路径被浏览器编码后,nginx无法访问问题
    windows10默认编码为gbk,需要在区域设置中,启用UTF—8编码,然后nginx配置文件中在设置charset,(edge可借助charset工具扩展,查看当 ... [详细]
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社区 版权所有