在项目中用到了ELK进行日志收集。本文简单梳理一下ELK部署流程,因为资源限制和技术水平有限,参考了很多其它博客(也用了其中一些图),仅供参考。
一、系统总体架构

- 构件说明
Filebeat:轻量级数据收集引擎,可以高效地从服务器收集数据并将数据推送到指定的输出上。支持多种输入数据源和输出方式。
Kafka:数据缓冲队列。有效地防止系统因为负荷过大而崩溃。
Logstash:数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。
Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。
Kibana :可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。
- 系统运行流程
Filebeat将会在每一个需要进行日志收集的服务上部署,我们将设置输入源为日志文件,同时作为生产者将内容输出到kafka中,logstash作为消费者从kafka中取出日志数据并进行处理后输出到elasticsearch以供检索,kibana以可视化的方式允许我们向elasticsearch发出查询请求,elasticsearch根据请求搜索出数据返回给kibana展示给我们。
二、系统搭建说明
1.资源说明
Filebeat: 6.2.4,Kafka: 2.11-1,Logstash: 6.2.4,Elasticsearch: 6.2.4,Kibana: 6.2.4
预装CentOS7的服务器3台假定命名为os1,os2,os3,预装CentOS7且部署了系统微服务的服务器若干。
注意:以下组件运行几乎都需要java1.8以上环境支持,请自行安装配置。
2.filebeat部署
在部署了系统微服务的每一台服务器上均需安装filebeat,下载对应版本以及平台的压缩包,解压后进入文件目录可以看到。

其中filebeat.yml即是我们需要修改的配置文件。基于filebeat的作用,显然我们最需要配置的就是输入和输出,即从哪里搜集文件和把文件送到哪。

如图所示,我们将输入类型设置为日志,配置enabled为true以允许这种输入方式,paths即为我们需要收集的文件路径,此处路径应当参照统一日志记录模块中日志的存放位置进行配置。

如图所示,我们将输出方向配置为kafka,hosts即是我们配置的kafka服务集群ip地址,每一个kafka服务地址放在双引号中,不同地址之间以引号隔开。具体地址配置请和kafka配置统一。
Topic指明该filebeat输出消息的主题(或者说类别)。Topic是kafka中的概念,通过不同的topic,我们可以给消息(日志)进行分类。本系统将采用微服务名称作为topic,即将不同的微服务产生日志分为不同类别。
配置完成后使用安装目录下 /bin/filebeat –c filebeat.yml 启动filebeat。
注意:filebeat.yml中可能有默认存在的输入或输出配置,请将其余输入或输出配置注释掉,只留下我们需要的一个输入和一个输出配置,不然会引出冲突报错。
系统topic命名:
Api网关:service-gateway
认证服务:service-authentication
基础数据服务:service-base-data
用户和权限服务:service-user-permission
试卷服务:service-paper
考试服务:service-exam
其他待定
3.kafka部署
考虑到系统的稳定和效率,我们不能只部署单个kafka服务,考虑部署kafka集群,集群含有三个kafka服务分别部署在os1,os2,os3上。
在os1上下载相应软件包,解压后进入安装目录如图示。

在config目录下存放kafka的配置文件,kafka采用zookeeper来管理集群下的服务,所以我们打开config目录下的zookeeper.properties进行配置。

配置中server.n即是服务器的数量,这里配置的就是kafka服务所部署在的服务器地址。在配置集群时zookeeper需要知道每个服务的id,否则会报错。我们需要在dataDir指定的目录下创建一个myid文件,在文件中写入一个代表id的数字,这里写入1。
打开config目录下的server.properties配置Kafka服务。

Port即为kafka服务所监听端口,host.name即是本服务器的ip地址,broker.id用于唯一标识集群中的kafka服务,这里将默认的0修改为1以于myid对应。Zookeeper.connect即是Kafka服务与zookeeper集群的连接,我们将端口设置为2181。
到此一台服务器上基本配置结束。我们将它拷贝到os2和os3上,对应的,在os2和os3上创建相应的myid并写入2和3,以及在server.properties中修改broker.id分别为2和3。
在每台服务器依次使用
bin/zookeeper-server-start.sh –daemon config/zookeeper.properties
bin/kafka-server-start.sh –daemon config/server.properties
命令启动zookeeper集群和kafka服务。
关于topic的进一步说明。在kafka中,一个topic可以拥有多个分区,每个分区可以理解为一个消息队列,分区会均匀分布在不同kafka服务上,使得同一个topic的消息可以并行处理,并且避免了某一个kafka服务过于拥挤。除此之外,我们还可以设置主题的备份数量,备份数量不能超过broker的数量,备份的机制是以一个服务为leader,其他剩余的备份为follow,在leader正常服务时,follow只进行数据拷贝以同步。当leader不能提供服务时,就从follow中选一个成为新的leader继续服务,可见这提供了系统的健壮性。分区和备份均可以在创建时进行设置,初步考虑为系统每个topic建立6个分区和3个备份。关于创建topic的命令请参考kafka的资料。
注意:在kafka服务中服务器ip地址+9092端口即为filebeat配置的输出方向以及logstash的输入方向。
4.logstash部署
采用rpm的方式安装logstash。安装完成后在/etc目录下会创建出logstash目录,进入该目录,在该目录用vim命令创建logstash.conf配置文件。
Logstash基于管道的理念,有一个输入流和对应的输出流,我们只需要配置输入流入口和输出流的出口即可。在本系统中输入流入口即是kafka服务的输出,输出流出口即是elasticsearch服务集群的地址集合。基础结构如下图所示。

在input下我们指定输入为kafka服务,其中topics即是我们感兴趣的topic集合,类似于消息订阅,只有写入这个集合的topic logstash才会接收。Bootstrap_servers即是kafka服务的地址,我们部署了kafka集群,所以这里应当用中括号包围和逗号隔开分别书写每个kafka服务的ip地址+9092端口号。
在output下我们指定输出到elasticsearch,hosts即是elasticsearch地址,同样本系统将部署3个elasticsearch服务组成集群,这里应该填上所有服务地址。Index指的是生成的输出内容的索引格式。这个是我们最后查询这条内容的一个依据。
配置完成后找到并进入logstash安装目录。使用
bin/logstash –f /etc/logstash/logstash.conf
读取配置文件后启动logstash。
5.elasticsearch部署
同样采用rpm方式进行安装。配置/etc/elasticsearch/elasticsearch.yml

在os1上依图示进行配置。集群主机名如果不写ip地址的话,需要在/etc/hosts文件里配置相应的映射。配置完后拷贝到os2和os3上,只需修改node.name为es2和es3即可。
采用图示方式正常启动所有服务。Elasticsearch集群就可以工作了。
注意:此处的elasticsearch服务的ip地址就是logstash output配置中应该填的hosts。
6.kibana部署
同样采用rpm安装。找到安装目录。编辑config下的kibana.yml进行配置。

基本只需配置elasticsearch.url即可。该配置项可以书写多个,一个对应一个es服务地址。
如
elasticsearch.url: “es1ip”
elasticsearch.url: “es2ip”
elasticsearch.url: “es3ip”
结束后使用图示命令启动kibana服务。之后即可在浏览器访问部署的ip地址+5601端口访问kibana页面。我们在filebeat部署的地方指定位置放入新的.log文件或改变内容,即可在kibana上查看到。
本文介绍了ELK(Elasticsearch, Logstash, Kibana)日志收集系统的部署流程,包括Filebeat从服务器收集日志并发送到Kafka,Logstash消费Kafka数据并处理后存储至Elasticsearch,Kibana则用于数据的可视化展示。系统架构涉及Filebeat、Kafka、Logstash、Elasticsearch和Kibana的详细配置,适合对ELK有兴趣的读者参考。"
1341546,160113,NetBPM安装指南,"['数据库管理', '软件安装', 'Web服务器', '.NET框架', 'SQL Server']

被折叠的 条评论
为什么被折叠?



