基于Storm的Nginx log实时监控系统

【编者按】Hadoop的缺点也和它的优点同样鲜明——延迟大,响应缓慢,运维复杂。被人广受诟病,但是 有需求就有创造,在Hadoop基本奠定了大数据霸主地位的时候,很多的开源项目都是以弥补Hadoop的实时性为目标而被创造出来,Storm正是在这个时候横空出世,Storm是一个免费开源、分布式、高容错的实时计算系统。Storm令持续不断的流计算变得容易,弥补了Hadoop批处理所不能满足的实时要求。

以下为原文:

背景UAE(UC App Engine)是一个UC内部的PaaS平台,总体架构有点类似CloudFoundry,包括:

快速部署:支持Node.js、Play!、PHP等框架 信息透明:运维过程、系统状态、业务状况 灰度试错:IP灰度、地域灰度 基础服务:key-value存储、MySQL高可用、图片平台等

这里它不是主角,不作详细介绍。

有数百个Web应用运行在UAE上,所有的请求都会经过UAE的路由,每天的Nginx access log大小是TB级,如何实时监控每个业务的访问趋势、广告数据、页面耗时、访问质量、自定义报表和异常报警?

Hadoop可以满足统计需求,但秒级的实时性不能满足;用Spark Streaming又有些大材小用,同时我们也没有Spark的工程经验;自写分布式程序调度比较麻烦并且要考虑扩展、消息流动;

最后我们的技术选型定为Storm:相对轻量、灵活、消息传递方便、扩展灵活。

另外,而由于UC的各地集群比较多,跨集群日志传输也会是其中一个比较大的问题。

技术准备 基数计数(Cardinality Counting)

在大数据分布式计算的时候,PV(Page View)可以很方便相加合并,但UV(Unique Visitor)不能。

分布式计算的情况下,几百个业务、数十万URL同时统计UV,如果还要分时段统计(每分钟/每5分钟合并/每小时合并/每天合并),内存的消耗是不可接受的。

这个时候,概率的力量就体现了出来。我们在Probabilistic Data Structures for Web Analytics and Data Mining可以看到,精确的哈希表统计UV和基数计数的内存比较,并不是一个数量级的。基数计数可以让你实现UV的合并,内存消耗极小,并且误差完全在可接受范围内。

可以先了解LogLog Counting,理解均匀哈希方法的前提下,粗糙估计的来由即可,后面的公式推导可以跳过。

具体算法是Adaptive Counting,使用的计算库是stream-2.7.0.jar。

实时日志传输

实时计算必须依赖于秒级的实时日志传输,附加的好处是可以避免阶段性传输引起的网络拥堵。

实时日志传输是UAE已有的轻量级的日志传输工具,成熟稳定,直接拿来用了,包括客户端(mca)和服务器端(mcs)。

客户端监听各个集群的日志文件的变化,传输到指定的Storm集群的各台机器上,存储为普通日志文件。

我们调整了传输策略,使得每台Storm机器上的日志文件大小大致相同,所以Spout只读取本机数据即可。

数据源队列

我们并没有用Storm常用的队列,如Kafka、MetaQ等,主要是太重了…

fqueue是一个轻量的memcached协议队列,把普通的日志文件转为memcached的服务,这样Storm的Spout就可以直接以memcached协议逐条读取。

这个数据源比较简单,它不支持重新发射(replay),一条记录被取出之后就不复存在,如果某个tuple处理失败或超时,则数据丢失。

它比较轻量,基于本地文件读取,做了一层薄的缓存,并不是一个纯内存的队列,它的性能瓶颈在于磁盘IO,每秒吞吐量跟磁盘读取速度是一致的。但对于我们这个系统已经足够,后续有计划改成纯内存队列。

架构

通过上面的技术储备,我们可以在用户访问几秒后就能获取到用户的日志。

整体架构也比较简单,之所以有两种计算bolt,是基于计算的均匀分布考虑。业务的量相差极大,如果仅按业务ID去进行fieldsGrouping,计算资源也会不均衡。

spout将每条原始日志标准化,按照URL分组(fieldsGrouping,为保持每台服务器计算量的均匀),派发到对应的stat_bolt上; stat_bolt是主要的计算Bolt,将每个业务的URL梳理并计算,如PV、UV、总响应时间、后端响应时间、HTTP状态码统计、URL排序、流量统计等; merge_bolt将每个业务的数据合并,如PV数,UV数等。当然,这里的UV合并就用到了前面提到的基数计数; 自写了一个简单的Coordinator协调类,streamId标记为”coordinator”,作用:时间协调(切分batch)、检查任务完成度、超时处理。原理跟Storm自带的Transactional Topolgoy类似。 实现一个Scheduler通过API获取参数,动态调整Spout、Bolt在各服务器的分布,以便灵活分配服务器资源。 支持平滑升级Topology:当一个Topology升级的时候,新Topology和旧Topology讲同时运行,协调切换时间,当新的Topology接管了fqueue之后,过河拆桥,杀死旧的Topology。

注意点:

Storm机器尽量部署在同一个机柜内,不影响集群内的带宽; 我们的Nginx日志是按小时切分的,如果切分的时间不准确,在00分的时候,就可以看到明显的数据波动,所以,尽量使用Nginx module去切日志,用crontab发信号切会有延迟。切日志这种10秒级的延迟,在大尺度的统计上没有问题,秒级的统计时波动却很明显; 堆太小会导致woker被强制杀死,所以要配置好-Xmx参数; 自定义项 静态资源:静态资源过滤选项,通过Content-Type或后缀筛选特定的静态资源。 资源合并:URL合并,比如RESTful的资源,合并后方便展示; 维度与指标:通过ANTLR v3做语法、词法分析,完成自定义维度和指标,并且后续的报警也支持自定义表达式。 其他

我们还用其他方式实现了:

业务的进程级(CPU/MEM/端口)监控 业务依赖的服务,如MySQL/memcached等的监控 服务器的磁盘/内存/IO/内核参数/语言环境/环境变量/编译环境等监控 原文链接:基于Storm的Nginx log实时监控系统 (责编/魏伟)

免费订阅“CSDN云计算(左)和CSDN大数据(右)”微信公众号,实时掌握第一手云中消息,了解最新的大数据进展!

CSDN发布虚拟化、Docker、OpenStack、CloudStack、数据中心等相关云计算资讯,     分享Hadoop、Spark、NoSQL/NewSQL、HBase、Impala、内存计算、流计算、机器学习和智能算法等相关大数据观点,提供云计算和大数据技术、平台、实践和产业信息等服务。

时间: 2024-10-22 18:02:45

基于Storm的Nginx log实时监控系统的相关文章

基于Lua+Kafka+Heka的Nginx Log实时监控系统

背景 在我们的系统架构中,Nginx作为所有HTTP请求的入口,是非常重要的一层.每天产生大量的Nginx Access Log,闲置在硬盘上实在是太浪费资源了.所以,能不能把Nginx日志利用起来,实时监控每个业务的访问趋势.用户行为.请求质量和后端异常呢,这就是本文要探讨的主题. 目的 1. 错误码告警(499.500.502和504): 2. upstream_response_time超时告警: 3. request_time超时告警: 4. 数据分析: 关于错误和超时监控有一点要考虑的

网站实时监控系统的设计与实现

监控|设计 摘 要: 本文提出了基于操作系统内核服务和多线程技术的网站实时监控系统,解决了以往监控系统不能及时恢复异常网页的问题.重点介绍了系统的传送控制部分和监控部分 关键词: 实时监控:多线程:API 引言 对网页监控比较成熟的技术是定时监控,即由用户设定时间间隔,系统按时对需监控的网页文件轮询一遍,来判断文件是否被非法删除或篡改.若发现,立即用备份盘上的备份文件进行恢复.这样的监控存在一个缺陷:被非法删除或篡改的网页不能得到及时的恢复. 本文介绍的网站实时监控系统创造性地利用操作系统内核提

开源倾情奉献:基于.NET打造IP智能网络视频监控系统

转载自 http://www.cnblogs.com/gaochundong/p/opensource_ip_video_surveillance_system_part_1_introduction.html     开源倾情奉献系列链接 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(一)开放源代码 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(二)基础类库介绍 开源倾情奉献:基于.NET打造IP智能网络视频监控系统(三)命令行工具集 开源倾情奉献:基于.NET打造IP智能

财付通构建网络支付反欺诈实时监控系统

本文讲的是财付通构建网络支付反欺诈实时监控系统,2014年9月17日-19日,2014 中国系统架构师大会(SACC 2014)在北京五洲皇冠国际酒店盛大开幕.作为中国规模最大的架构师豪门盛会,本届中国系统架构师大会以"发现架构之美"为主题,探讨最具前瞻性的行业趋势与技术热点,分享架构在企业中的最佳实践,共同领略架构之美. ▲腾讯财付通的助理总经理张平 互联网金融爆发一方面带来了一场金融体系的变革,另一方面也让金融朝向普惠金融方向发展.但是,互联网金融也是金融,背后的风险控制在互联网时

基于云计算的分布式校园视频监控系统的设计

基于云计算的分布式校园视频监控系统的设计 朱琳 针对传统校园视频监控系统存在的因数据传输量过大而造成的带宽资源不足 数据存储量有限 系统计算能力不足等问题提出基于云计算的分布式校园视频监控系统 通过分布式计算将海量视频数据拆分处理应用虚拟化资源替代有限的物理资源实现存储的的完全虚拟化提供更强的存储和共享功能 并将校园监控系统的有线网络与无线网络融合在一起最合理化的使用系统资源 实验证明应用云计算架构的校园视频监控系统视频图像清晰流畅信息处理能力大大提高拥有海量存储能力具有安全稳定高性能和高可扩展

基于云计算物联网循环经济实时监控平台

基于云计算物联网循环经济实时监控平台 欧阳钟辉  马瑾玉 中国高速发展带来的系列环境污染问题已开始影响我国城乡人民的生活环境.身体健康甚至日常出行.为了既能发展经济又能保护环境和资源,阻断恶化环境的建设项目和污染源是的必走的途径.我们设计的基于云计算物联网的循环经济测度平台,可实时监控各类循环经济指标.预警值.临界值,及时发出不同等级的预警,引导相关管理行动的执行. 基于云计算物联网循环经济实时监控平台

基于物联网的车载称重监控系统

基于物联网的车载称重监控系统 张荣军  罗向东  许晨光  张伟 针对目前货车的源头治超,货车的电子不停车收费( ETC).渣土车治理及物流信息化等难题,提出基于物联网的车载称重监控系统的解决方案.本方案利用传感器技术及称重技术实现了车载动静态称重,利用无线通信网络实现了车辆信息的传输,利用识别技术实现了货车的身份识别,利用后台应用管理平台实现了数据的交互及信息的共享.试点应用表明,系统称重精度高.性能稳定.适用性强,能够满足当前车载称重的要求. 基于物联网的车载称重监控系统

python实现实时监控文件的方法_python

在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控nginx的$request_time和$upstream_response_time时间,分析出最耗时的请求,然后去改进代码,这时就要对日志进行实时分析了,发现时间长的语句就要报警出来,提醒开发人员要关注,当然这是其中一个应用场景,通过这种监控方式还可以应用到任何需要判断或分析文件的地方,所以今天我们就来看看如何用python实现实时监

Eagle - 来自eBay的分布式实时监控及预警框架

Eagle 是来自eBay的面向大型分布式系统比如Hadoop, Spark 以及Cloud等设计的通用实时监控与与预警框架. Eagle主要由基础的核心框架以及针对不同应用领域的诸多app组成,专注于解决大数据时代大型分布式系统自身监控这个复杂的大数据问题,具有高扩展性,高实时性,以及高可用性等特点,同时支持使用机器学习为复杂情况提供预测分析. Eagle核心框架提供实时监控系统开发过程中所需要的大部分重要基础组件,例如: 轻量级分布式流处理框架:以DAG为基础模型对通用流处理范式进行抽象,在