log4j+kafka+ElasticSearch+Kibana

2017-09-20  本文已影响785人  小志码字

前言:最近这一段时间对接合作方的广告项目统计数据,每天一上班,合作方就一大堆问题,为什么昨天数据又怎么不对呀,问题在哪, 数据统计问题 道不明,很难去找原因,搞的LZ头都大了,老板也催,真是无奈,我已经把代码已经调整到没有问题的状态,他妈还是统计数据不对,不知道是对方的原因还是我们自身的原因,很难去定位,没办法,最终我只能使出大招,每天打日志数据文件,看到底是什么原因的,最终预料之中背锅侠不是我,的确是合作方自身的原因。统计的问题也就告一段落了,也就闲下来和大家聊聊技术,吹吹牛皮了。今天和大家聊聊日志统计收集的问题,通过log4j 打日志的方式,通过kafka生产和消费 入到ElasticSearch中,然后再用Kibana做展示层实时的看每天的数据。咋们回归正题,我给大家一一道来(里面的技术很多是CTO实现的,我只是个打杂的)。

今天先简单的给大家介绍 log4j  kafka  ElasticSerach  kibana 这些技术在我们的系统中扮演了什么角色。以及它们的基础知识。

Log4j:其实就是一个日志文件系统的具体实现,当然还有其他的日志文件的系统实现,比如Log4j 的升级版Logback,是不消耗内存和计算开销的日志系统。据说很吊的样子 虽然我也用过,但是感觉不出来。没看过源码 不知道它对于Log4j 优化了哪些。

我们经常提Log4j  也会提到Logback,SLF4J,那他们三者是个什么样的关系?

官方是这样说明的:

slf4j译为简单日志门面,是一系列的日志接口,是日志框架的抽象。而log4j和logback是众多日志框架中的几种,SLF4J在具体开发中,需要绑定一个日志框架,才能正常的使用slf4j。而日志框架比如就是Log4j或者logback等等

而log4j和logback的区别:

log4j是apache实现的一个开源日志组件。(Wrapped implementations)

logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架。是slf4j的原生实现

在Log4j在我们的系统中作用是以JSON的格式输出统计日志文件。

我们的log4J配置文件类似如下: 下一章给大家md代码并给大家介绍具体的配置

KafKa: 其实就是消息队列,业内有很多成熟的消息队列 有redis java原生的消息队BloackQueue,阿里的RabbitMQ,Apache下的ActiveMQ等等,大家都大同小异,而我们采用的是kafka而已。

简单的介绍kafka的基本知识,kafka中有以下概念:

producer:消息生产者,发布消息到 kafka 集群的终端或服务。

.broker:kafka 集群中包含的服务器。

topic:每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的。

partition:partition 是物理上的概念,每个 topic 包含一个或多个 partition。kafka 分配的单位是 partition。

consumer:从 kafka 集群中消费消息的终端或服务。

Consumer group:high-level consumer API 中,每个 consumer 都属于一个 consumer group,每条消息只能被 consumer group 中的一个 Consumer 消费,但可以被多个 consumer group 消费。

replica:partition 的副本,保障 partition 的高可用。

leader:replica 中的一个角色, producer 和 consumer 只跟 leader 交互。

follower:replica 中的一个角色,从 leader 中复制数据。

controller:kafka 集群中的其中一个服务器,用来进行 leader election 以及 各种 failover。

zookeeper:kafka 通过 zookeeper 来存储集群的 meta 信息。

下载window kafka的包 可以通过以下方式来操作kafka 

打开kafka:(打开kafka之前 首先要启动zookeeper)

.\bin\windows\kafka-server-start.bat .\config\server.properties

创建topics(主题)

.\bin\windows\kafka-topics.bat --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test


这个报创建的主题我之前创建过了 报存在 可以忽视

打开producer:

.\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test

打开Consumer:

.\bin\windows\kafka-console-consumer.bat --zookeeper localhost:2181 --topic test

在producer生产界面生产数据 在消费者界面就可以看到消费的数据 例如:

kafka 在我们的系统中扮演的角色是生产日志文件 并进行消费到ES中。

ElasticSearch

Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

而我们用ES来收集统计日志,可以实时的分析数据。

简单的介绍一下ES中的基本知识点:

index

ES中的索引,类似于mysql中的database

Type

文档类型, 类似于mysql中的table,根据用户需求每个index中可以新建任意数量的type。

Document

定义:对应mysql中的row。有点类似于MongoDB中的文档结构,每个Document是一个json格式的文本。每个文档由不同的结构,限制条件:不同的文档类型对同一个字段不能设置为不同的字段类型。

Mapping

更像是一个用来定义每个字段类型的语义规范在mysql中类似sql语句,在ES中经过包装后,都被封装为友好的Restful风格的接口进行操作。这一点也是为什么开发人员更愿意使用ES或者compass这样的框架而不是直接使用Lucene的一个原因。

分片:将数据切分,分布在不同的机器上,但归属一个index

副本:副本分片是对原始分片的一个精准拷贝,原始分片被称为主分片。

在官网上https://www.elastic.co/cn/downloads/elasticsearch 下载windows版本。

进入bin目录启动elasticsearch.bat文件即可  es单机版就启动了  访问9200端口 即可看到数据

9300 是es客户端操作es数据存储端口,9200是展示数据的端口

访问内容如下:

具体url后面带的参数我后面再给大家介绍,这里不做具体的讨论。

在我们的系统中  ES 扮演着收集日志数据的存储系统。

Kibana:

Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图表、表格、地图等kibana能够很轻易地展示高级数据分析与可视化。其实就是ES的web展示层 可以实时看到数据和统计数据。统计数据可以采用表格 图形都可以支持的。

在官网上https://www.elastic.co/cn/downloads/kibana 下载windows版本。一定要下载ES对应适配的版本,否则启动不了Kibana。会报以下的错:直接报警了

版本不兼容  大意就是下载一个5.4.2的版本就可以解决了。我用的是5.5.2版本 肯定不行 不兼容。

换了个版本也就正常了   正常的如下:

kibana通过http访问 默认端口是5601

我在里面建立了业务相关的三个索引 也可以看到我们展示的数据 我们对这些数据做分组统计 也可以建图表 或者表格的方式来进行统计 kinana支持很多种方式的统计。而且还是实时的 非常的方便。

Kibana在我们的系统中扮演的角色作为ES数据的展示层,给我们实时的统计数据和以表格或者图表的方式看数据 非常的方便 看到想要统计的BI数据。

说了这么多,今天介绍的内容大概就这些了,简单介绍了log4j、kafka、ElasticSearch、Kibana 这些是什么  基础的相关知识点 以及在我们的系统中扮演的角色。下一章我们将以我们的具体业务如何将这些知识点应用到具体的场景中去的 我会以代码的形式给大家分享,感谢上次肖大神给我提的建议 贴代码不好 优好性太差,不便于阅读,我记住了,下次直接md贴代码 哈哈。你们的建议是我最大的向前奔跑的动力。

我是小志码字,一个简单码代码的小人物。看了这么多,喜欢就关注我 或者点赞哦

上一篇下一篇

猜你喜欢

热点阅读