笔者接触到ELK是由于公司项目采用微服务架构,这样在部署时各个服务需要在不同机器上,而且每个服务部署好几份,这个时候日志到收集就是问题了,不能像之前那样单体应用都在一个机器,可以直接登录查看,所以就开始去了解ELK,最后用ELK+Kafka来完成日志收集处理并展现,而且ELK在大数据行业应用也很广泛。
一、ELK介绍
ELK Stack是软件集合Elasticsearch、Logstash、Kibana的简称,它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。
Elasticsearch 是一个基于 Lucene 的、支持全文索引的分布式存储和索引引擎,主要负责将日志索引并存储起来,方便业务方检索查询。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。
Kibana是一个可视化工具,也是一个开源和免费的,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
Filebeat隶属于Beats。目前Beats包含四种工具:
1、Packetbeat(搜集网络流量数据)
2、Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据
3、Filebeat(搜集文件数据)
4、Winlogbeat(搜集 Windows 事件日志数据)
官方文档:
Filebeat:
https://www.elastic.co/cn/products/beats/filebeat
https://www.elastic.co/guide/en/beats/filebeat/5.6/index.html
Logstash:
https://www.elastic.co/cn/products/logstash
https://www.elastic.co/guide/en/logstash/5.6/index.html
Kibana:
https://www.elastic.co/cn/products/kibana
https://www.elastic.co/guide/en/kibana/5.5/index.html
Elasticsearch:
https://www.elastic.co/cn/products/elasticsearch
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html
elasticsearch中文社区:
https://elasticsearch.cn/
笔者ELK相关文章:
ELK架构体系、ELK运行原理、ELK应用场景、ELK简单介绍(一)
Linux安装ELK、elasticsearch部署安装(二)
Linux安装ELK、logstash部署安装(三)
Linux安装ELK、kibana部署安装(四)
ELK启动报错:OpenJDK 64-Bit Server VM warning
ELK常见错误问题、ELK的一些坑、Unable to connect to Elasticsearch at http://localhost:9200
二、ELK架构体系
架构图一:
这是最简单的一种ELK架构方式。优点是搭建简单,易于上手。缺点是Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患。
此架构由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询,操作。用户亦可以更直观的通过配置Kibana Web方便的对日志查询,并根据数据生成报表。
架构图二:
此种架构引入了消息队列机制,位于各个节点上的Logstash Agent先将数据/日志传递给Kafka(或者Redis),并将队列中消息或数据间接传递给Logstash,Logstash过滤、分析后将数据传递给Elasticsearch存储。最后由Kibana将日志和数据呈现给用户。因为引入了Kafka(或者Redis),所以即使远端Logstash server因故障停止运行,数据将会先被存储下来,从而避免数据丢失。
架构图三:
此种架构将收集端logstash替换为beats,更灵活,消耗资源更少,扩展性更强。同时可配置Logstash 和Elasticsearch 集群用于支持大集群系统的运维日志数据监控和查询。
三、ELK运行原理
笔者现在使用了微服务架构,应用流程如下:使用log4j的appender向kafka的topic发送日志信息,同时也记录了文本文件,logstash收到kafka的数据存储起来过滤后交给elasticsearch拿去建立索引分析、检索,最后kibana的web页面来搜索日志、分析出图表等。
四、ELK应用场景
1、分布式部署项目,需要收集日志。
2、微服务架构项目,收集各个服务的日志。
3、大数据行业。
五、ELK安装部署集成
ELK架构体系、ELK运行原理、ELK应用场景、ELK简单介绍(一)
Linux安装ELK、elasticsearch部署安装(二)
Linux安装ELK、logstash部署安装(三)
Linux安装ELK、kibana部署安装(四)
微服务整合ELK、Kafka搭建日志系统