0

0

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

php中文网

php中文网

发布时间:2016-06-07 17:45:23

|

1340人浏览过

|

来源于php中文网

原创

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

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

 

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

1.日志位置问题

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

2.日志归档规则

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

3.日志格式

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

4.效率问题

炫图AI
炫图AI

全能AI修图神器,AI换装、修图、改图、P图

下载

    分析的日志量大概每天会有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

相关文章

B站看视频
B站看视频

B站汇集了丰富的热门视频资源,海内外流量爆款的这里都有,最新最热的视频资源第一时间奉上,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
batoto漫画官网入口与网页版访问指南
batoto漫画官网入口与网页版访问指南

本专题系统整理batoto漫画官方网站最新可用入口,涵盖最新官网地址、网页版登录页面及防走失访问方式说明,帮助用户快速找到batoto漫画官方平台,稳定在线阅读各类漫画内容。

127

2026.02.25

Steam官网正版入口与注册登录指南_新手快速进入游戏平台方法
Steam官网正版入口与注册登录指南_新手快速进入游戏平台方法

本专题系统整理Steam官网最新可用入口,涵盖网页版登录地址、新用户注册流程、账号登录方法及官方游戏商店访问说明,帮助新手玩家快速进入Steam平台,完成注册登录并管理个人游戏库。

18

2026.02.25

TypeScript全栈项目架构与接口规范设计
TypeScript全栈项目架构与接口规范设计

本专题面向全栈开发者,系统讲解基于 TypeScript 构建前后端统一技术栈的工程化实践。内容涵盖项目分层设计、接口协议规范、类型共享机制、错误码体系设计、接口自动化生成与文档维护方案。通过完整项目示例,帮助开发者构建结构清晰、类型安全、易维护的现代全栈应用架构。

15

2026.02.25

Python数据处理流水线与ETL工程实战
Python数据处理流水线与ETL工程实战

本专题聚焦 Python 在数据工程场景下的实际应用,系统讲解 ETL 流程设计、数据抽取与清洗、批处理与增量处理方案,以及数据质量校验与异常处理机制。通过构建完整的数据处理流水线案例,帮助开发者掌握数据工程中的性能优化思路与工程化规范,为后续数据分析与机器学习提供稳定可靠的数据基础。

1

2026.02.25

Java领域驱动设计(DDD)与复杂业务建模实战
Java领域驱动设计(DDD)与复杂业务建模实战

本专题围绕 Java 在复杂业务系统中的建模与架构设计展开,深入讲解领域驱动设计(DDD)的核心思想与落地实践。内容涵盖领域划分、聚合根设计、限界上下文、领域事件、贫血模型与充血模型对比,并结合实际业务案例,讲解如何在 Spring 体系中实现可演进的领域模型架构,帮助开发者应对复杂业务带来的系统演化挑战。

1

2026.02.25

Golang 生态工具与框架:扩展开发能力
Golang 生态工具与框架:扩展开发能力

《Golang 生态工具与框架》系统梳理 Go 语言在实际工程中的主流工具链与框架选型思路,涵盖 Web 框架、RPC 通信、依赖管理、测试工具、代码生成与项目结构设计等内容。通过真实项目场景解析不同工具的适用边界与组合方式,帮助开发者构建高效、可维护的 Go 工程体系,并提升团队协作与交付效率。

18

2026.02.24

Golang 性能优化专题:提升应用效率
Golang 性能优化专题:提升应用效率

《Golang 性能优化专题》聚焦 Go 应用在高并发与大规模服务中的性能问题,从 profiling、内存分配、Goroutine 调度、GC 机制到 I/O 与锁竞争逐层分析。结合真实案例讲解定位瓶颈的方法与优化策略,帮助开发者建立系统化性能调优思维,在保证代码可维护性的同时显著提升服务吞吐与稳定性。

9

2026.02.24

Golang 面试题精选:高频问题与解答
Golang 面试题精选:高频问题与解答

Golang 面试题精选》系统整理企业常见 Go 技术面试问题,覆盖语言基础、并发模型、内存与调度机制、网络编程、工程实践与性能优化等核心知识点。每道题不仅给出答案,还拆解背后的设计原理与考察思路,帮助读者建立完整知识结构,在面试与实际开发中都能更从容应对复杂问题。

6

2026.02.24

Golang 运行与部署实战:从本地到云端
Golang 运行与部署实战:从本地到云端

《Golang 运行与部署实战》围绕 Go 应用从开发完成到稳定上线的完整流程展开,系统讲解编译构建、环境配置、日志与配置管理、容器化部署以及常见运维问题处理。结合真实项目场景,拆解自动化构建与持续部署思路,帮助开发者建立可靠的发布流程,提升服务稳定性与可维护性。

5

2026.02.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 12.1万人学习

CSS3 教程
CSS3 教程

共18课时 | 6.1万人学习

Git 教程
Git 教程

共21课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号