文档章节

日志分析(二)jvm agent+kafka+es +kibana 的OLAP日志分析系统

venuser
 venuser
发布于 2015/12/14 18:10
字数 1082
阅读 726
收藏 23

jvm agent+kafka+es +kibana

    一般web业务的场景都包含了分布式,web事务的多应用间跳转,各层次间实现负载均衡等。日志分析OLAP的技术要求就需要跟踪夸web应用的多层次、多应用的链式请求,针对多应用。如果采用离线收集数据,又需要针对每个应用启动对应的日志收集实例比如 logstash的shipper或者flume 的agent等,颇为浪费;如果各个应用的日志格式或者日志路径不统一、样式复杂等,就需要针对性的去配置对应收集端的一些filter和采集路径。

     针对以上弊端,所以设计上采用各个应用日志采集采用主动push而非OLAP系统去pull。这样弊端应该是日志采集和主题业务的进程绑定,这个需要代码进行规避对主业务的影响。优点就是在日志格式上可以得到统一、减少io次数、避免数据聚合或者预预算次数等从而效率更优。热日志推送的概念,还需要降低对代码的侵入性以及日志埋点的可控。

    综上,需要针对所有web业务应用做一个字节码的嵌入,实现指定埋点的日志收集工作。实现该操作目前有两种方式:动态编译 和 动态生成二进制字节码。动态编译是指在运行期前、类装载后,进行class读取后改造,并加载到classloader。有许多实现方式比如ASM、javassist、cglib等。

     这几个的博客很多,都是比较成型的技术,各种利弊也就是asm 需要汇编语言,但是更为灵活,速度更快;cglib 在asm上进行了封装,效率比jdk自带的代理反射快了很多。具体对比看下:

        http://stackoverflow.com/questions/2261947/are-there-alternatives-to-cglib

    这部分选择了api简易的动态编译Jboss开源javassist包。实现原理是在jvm的运行期前,类加载器后,进行class的修改。逻辑类似dubbo的wrapper实现~~        

    

    源:http://jboss-javassist.github.io/javassist/

    在类加载器时期,进行class的选择性动态编译,动态添加实现其输出日志的代码逻辑。

    传输日志,使用了kafka 消息中间件,kafka的异步批量传输效率非常高而且比较稳定。kafka介绍现在较多:

        http://kafka.apache.org/documentation.html

        http://blog.csdn.net/lizhitao/article/details/39499283

        https://github.com/abhioncbr/Kafka-Message-Server

    kafka直接写入es。即kafka的producer是由javassist 的agent进行动态编译添加到所有应用中,然后consumer转写入es进行存储,建立实时索引。

    

        elasticsearch-river-kafka实现源码:

        https://github.com/xiaolongc/elasticsearch-river-kafka

        

      日志分析olap系统,业务性能损耗和成本支出,可根据第一个博客里面提到的两种日志源分:冷日志文件处理,这种系统损耗在于日志的io输出到文件的过程会损耗业务代码的响应效率,大多系统在线上会省去部分日志代码节约响应时间和物理空间,如果有对应日志收集,就要有对输出的文件再次转化为io流,进行过滤、聚合等应用成本;热日志数据传输,这种数据损耗发生在日志的传输过程,因为这种对于日志的发送和正常业务调度是同步的,这部分损耗如果对异常、日志传输等进行优化,效率应该优于第一种,还有就是应用成本会降低。

 

    综上,jvm agent+kafka+es +kibana 的OLAP日志分析系统有以下优点:成本较低、效率高、入侵性较低、可复用性强等。目前已经完成web事务traceid的方法级调用链跟踪、业务埋点的统计、应用异常的抓取等功能。后续会继续跟进。

 

 

------

补:Google的Dapper,淘宝的鹰眼,Twitter的ZipKin,京东商城的Hydra,eBay的Centralized Activity Logging (CAL),大众点评网的CAT~~~ 相同功能的架构体系。

 

    

       

 

© 著作权归作者所有

venuser
粉丝 15
博文 13
码字总数 10713
作品 0
东城
程序员
私信 提问
加载中

评论(4)

RayWang
RayWang
2好厉害~
大魔王_
大魔王_
797979
venuser
venuser 博主

引用来自“单行道”的评论

如果有个Demo就更好了
因为是公司的项目,代码不能开源,抱歉。
单行道
单行道
如果有个Demo就更好了
日志分析(一)框架选择

概要 日志分析,有两个主要模块日志收集以及分析统计。日志收集主要实现日志数据源的获取。分析统计是对数据源的聚合和统计分析。 日志收集又分为离线收集和热数据收集:离线收集的日志收集服...

venuser
2015/12/11
676
0
logstash+elasticsearch +kibana 日志管理系统

Logstash是一个完全开源的工具,他可以对你的日志进行收集、分析,并将其存储供以后使用(如,搜索),您可以使用它。说到搜索,logstash带有一个web界面,搜索和展示所有日志。 kibana 也是...

xiaoyuan234
2018/07/04
0
0
资深架构师教你如何使用elk+redis搭建nginx日志分析平台!

elk+redis 搭建nginx日志分析平台 logstash,elasticsearch,kibana 怎么进行nginx的日志分析呢?首先,架构方面,nginx是有日志文件的,它的每个请求的状态等都有日志文件进行记录。其次,需要...

java高级架构牛人
2018/06/26
24
0
使用ELK构建微服务的日志平台

1 概述 在微服务架构中,会部署众多的应用,其中有基础应用,比如:网关,服务发现等。同时还有大量的业务应用。所以,如何有效的收集它们的日志,并且方便查询,同时提供友好的可视化展示,...

Java大蜗牛
2018/08/18
81
0
线上Java应用排查和诊断规范

@郑昀 整理 标准做法一:OOM触发HeadpDump 目的: OOM发生时,输出堆栈快照文件,供研发人员分析。 在JVM中,如果98%的时间是用于 GC 且可用的 Heap size 不足2%的时候,将抛出 OOM 异常。...

旁观者-郑昀
2013/09/26
139
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
446
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
4
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
3
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
7
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部