-
背景
如果你是一名SRE兄弟,收到告警短信,你是否还在疯狂的敲着ssh | grep | sed | awk 这些命令的组合排查问题呢?如果1台,2台,3台机器,ok;如果有n台机器,你会不会抓狂?
如果你是一名DEV兄弟,开发一套高性能的分布式数据处理平台,你是不是还在考虑数据如何传输,中间件如何配置,资源如何调度的问题,Oops ,你应该将重点放在业务逻辑的开发而不是外围框架的Integration上, 考虑的问题太多了,你会不会抓狂?
很不幸,我是名SRE,我们需要使用一套日志分析工具来帮助我们快速定位问题。
Ops makes No Ops.
-
系统设计
这是一张组件构建图
我们设想了2条数据流处理方式:
1,实时日志分析系统(Xlog):分为5层,数据采集层,数据持久化层,数据处理层,结果数据持久化层,数据展示层。
2,tracing系统:分为5层,数据采集层,数据持久化层,数据处理层,indexing层,数据检索展示层。
本文将重点介绍下“实时日志分析系统”的构建过程和一些内部实现细节,希望对读者有些帮助。
-
组件选型
作为一名SRE,Reuse Infrustracture的能力也是一种核心竞争力!
Xlog使用下列组件来构建分布式流式日志处理系统:
- Fluentd–日志采集处理Agent
- Kafka–消息持久化队列
- Storm–分布式HPC框架
http://storm.incubator.apache.org/
- Mongodb–结果缓存
- Xperf–数据展示平台
Xlog组件选型简单说明
A. Agent选型
说到日志采集,无非三种模式
- 通过tail文件的方式采集滚动日志;
- 通过listen TCP/UDP端口进行收集;
- 通过request HTTP/HTTPS协议提供的URL进行采集;
说到组件选型,目前开源的收集组件
syslog/rsyslog/syslog-ng一般用于收集Linux系统日志,收集应用日志配置复杂且不利于二次开发;
scribe facebook开源的高性能日志收集组件,但是一年多无更新,bug fixing都成问题,c写的,不利于二次开发;
目前最火的三类Agent:logslash,fluentd,flume;分别用jruby,ruby,java实现,我个人觉得flume过于重了,先不考虑,logslash是 jruby实现的,二次开发不太熟悉,所以考虑fluentd
fluentd的优点:
- 结构化日志
- 支持插件的架构
- 消息可靠传输机制
通过使用,个人认为fluentd最方便的2点在于
a,配置十分便捷
配置一个souce用于日志的输入
配置一个match用于日志的输出
souce/match对的组合十分灵活,可以实现多对多,1对多,多对1的日志收集模式。
b,插件式架构,支持二次开发,满足不同组件系统的集成和私有化定制
比如我们需要开发一个non-buffered的out_plugin,只需要重写下列代码的method
你只需要在
B. 持久化组件
mongodb和kafka就不多说了,mongodb在这里主要利用其“Capped”的特性来缓存storm处理完毕的消息;kafka是目前当之无愧的最高性能分布式消息队列,我们在这里用kafka主要考虑到3点:
- 对数据源进行topic分流,实现Category;
- 作为一层buffer来适配输入输出的消息速率,解除系统耦合度;
- 考虑后期集群数据量规模和可扩展性;
C. 计算组件
Storm是twitter开源的分布式内存计算框架,目前已经作为apache的incubator项目,与之相提并论的有yahoo的S4,apache的spark,目前商用比较成熟的,Storm是其中之一,采用thrift c/s的框架,核心代码采用clojure编写,外围框架采用java编写,统一暴露java的api,同时还提供多语言的开发支持,同类产品还有一个twitter用ruby实现的storm,叫redstorm,国产的是淘宝用java实现的jstorm。
Hadoop的M/R这样的large-scale数据集处理大家并不陌生,但是,Hadoop的定位在于batch处理历史数据集,对于分钟级的实时不间断数据集处理并不擅长,所以,Storm是用来填补Hadoop的”空洞“的。
因此,还有一个开源项目,是twitter开源的summingbird,旨在综合了批处理和实时处理的2类需求。
选择Storm作为开发组件原因在于,Storm的支持下列特性:
- 提供丰富的应用case场景支持:比如流式处理,持续计算 , 分布式RPC,支持事务,数据聚合等;
- 集群易于扩展:根据数据量来控制集群规模非常容易,当计算能力不够时,只需要增加node节点动态扩容;
- 消息不丢,不重,和S4不同,Storm保证对每条消息进行处理,事务功能保证不重复处理消息,对于对精准性有要求的业务case,比如计费日志过滤,统计的需求是可以满足的;
- 高可靠:Storm中各个component通过zk进行交互,state信息都存在zk中,除了nimbus是一个SPOF外,其他组件都不是SPOF;其实nimbus也是个伪单点,只是在提交代码和UI展示时需要,对于已经提交集群running的代码不会有影响;
- 多语言支持:基于thrift的好处在于Storm允许你使用多语言进行编程,不仅仅说你是一个javaer才能搞定;
开发基于spout,bolt原语的程序就是这么简单!
比如我们想实现一个从kafka读取数据,然后在storm内存中对日志字段计算,最好push到mongodb中的这条业务功能只需要1个spout和2个bolt的组装即可
kafkaSpout对象实现了从Kafka中读取数据的功能;
accoutBolt对象实现了解析tuple数据,统计基数业务功能;
mongoInserter对象实现了对统计完毕数据push到Mongodb的功能;
上述不同对象组装成一个Topology即可完成一个streaming的功能。
今后我们不不同应用可以抽象出commons的需求算子,不同算子通过Topology组装成不同的服务完成各种业务功能,非常灵活。
相关推荐
从`xuexiangjys-XLog-b4a5b9a`这个压缩包中,可以看到项目的源码,可以将其导入到Android Studio工程中或者通过Gradle依赖来引入。 ```groovy dependencies { implementation 'com.xuexiang:xlog:版本号' } ``...
XLOG简介 自动保存LOG 过期删除LOG,控制LOG存储大小 自定义Crash操作 Gradle构建: compile 'com.sum.xlog:xlog:1.1.4' 初始化: XLogConfiguration.Builder builder = new XLogConfiguration.Builder(My...
首先,XLog通常会提供比系统默认的日志输出更丰富的功能,比如分类、级别控制、颜色标记、时间戳等。这使得开发者可以更加清晰地看到不同类型的日志信息,从而更容易定位问题。例如,开发者可以通过不同的级别(如...
5. **存储与查看**:Mars XLog不仅可以在控制台输出日志,还可以将日志保存到本地文件,方便后续分析和排查问题。 6. **网络上传**:通过扩展,可以实现日志的网络上传功能,这对于远程故障排查和大数据分析非常...
"xlog"通常指的是特定系统或应用的日志格式,而“xlog日志解密”则涉及到对这些日志文件进行解析和解读的过程,因为某些日志可能被加密或者采用特殊的编码方式,使得直接阅读变得困难。 在提供的压缩包文件中,我们...
Node-xlog 是一个用来捕获异步功能中的节点,还能够在日志中显示错误,比如说捕获请求。Console.log 和 console.error 都能扩展为进程的 PID,来生成日志、请求方法和 URL 路径。当此信息被索引时,仅显示第一次生成...
微信团队开源的Mars XLog库是一个高效、强大的日志系统,特别适用于Android应用。这个压缩包"Android Mars Xlog 支持自定义格式存储.zip"包含了一个经过自定义编译的XLog库,它允许开发者按照自己的需求定制日志的...
使用java语言开发的基于storm、kafka、xlog的web日志实时分析系统,实时分析指定时间周期内web日志中每个ip访问的各项数据指标(访问总次数,动、静态次数,GET、POST、HEAD等请求类型次数,HTTP状态码各种状态前缀...
java开发的基于kafka、...target/storm-xlog-version-jar-with-dependencies.jar 创建数据库 库名可以自己定,导入storm_xlog.sql文件中的ips表结构 配置 #zookeeper.server地址,多个逗号分隔 xlog.zookeeper.ser
xlog通过将日志保存到设备文件系统,确保了日志数据的持久性,便于后续分析。 其次,xlog支持日志加密输出,这是它的一个独特特性。在某些情况下,如处理敏感信息或满足隐私政策要求时,对日志进行加密至关重要。...
5. **集成性**:Xlog可以方便地与其他Mars组件集成,如网络通信模块、同步机制等,提供统一的日志监控。 6. **调试辅助**:Xlog支持时间戳、线程ID、文件名和行号等信息的自动添加,帮助开发者定位问题。 在实际...
在IT行业中,日志系统是软件开发中的重要组成部分,它能帮助开发者追踪程序运行状态、定位问题和优化性能。腾讯XLog就是一个专为Android平台设计的日志打印工具,旨在提供高效、安全的日志记录功能。本文将深入探讨...
微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog 微信终端跨平台组件 mars 系列(一) - 高性能日志模块xlog
-verbose:gc和-Xlog:gc提供基本GC信息,更详细的选项如-Xlog:gc*、-Xlog:task*、-Xlog:heap*、-Xlog:age*、-Xlog:ref*、-Xlog:ergo*、-XX:+PrintPromotionFailure等用于监控和调试GC行为。 -Xlog:safepoint显示安全...
《XLog_2.10-R0206P03:深入了解日志记录与分析系统》 在IT行业中,日志记录与分析系统扮演着至关重要的角色,它能够帮助开发者和运维人员诊断问题、优化性能以及确保系统的稳定运行。XLog作为一款专业的日志管理...
- XLOG日志被分割为多个逻辑段文件,每个文件由多个页面组成,每个页面大小与数据库块大小一致。 - XLogLongPageHeaderData用于长日志记录,提供更精确的文件定位,特别是在跨页面存储记录时。 - 当日志记录跨越...
tencent xlog
通过学习源码,开发者可以了解Android系统如何处理事件、管理内存、调度任务以及与其他组件交互等。 【课程内容概览】 1. **第一季**:虽然缺失部分集数,但依然涵盖了基础的源码阅读技巧、Android系统架构、HAL...
9. **兼容性**:由于面向Android和Java平台,xLog需要确保与不同版本的Android系统和Java环境良好兼容,以便于广泛的应用。 10. **社区支持**:开源项目通常会有活跃的社区支持,xLog可能也有自己的GitHub仓库或...
《XLog2.10-R0206P04:深入理解日志记录与分析系统》 在IT行业中,日志记录与分析系统扮演着至关重要的角色,它能够帮助开发者、运维人员以及业务分析师追踪应用程序的行为,定位问题,优化性能,并确保系统的稳定...