ELK简介
ELK 已经成为目前最流行的集中式日志解决方案,它主要是由Beats 、Logstash 、Elasticsearch 、Kibana 等组件组成,来共同完成实时日志的收集,存储,展示等一站式的解决方案。本文将会介绍ELK常见的架构以及相关问题解决。
Filebeat :Filebeat是一款轻量级,占用服务资源非常少的数据收集引擎,它是ELK家族的新成员,可以代替Logstash作为在应用服务器端的日志收集引擎,支持将收集到的数据输出到Kafka,Redis等队列。
Elasticsearch: Elasticsearch 是一个分布式、实时的搜索和分析引擎,它可以用于存储、搜索和分析大规模的日志数据。在 ELK 中,Elasticsearch 负责存储日志数据,并提供高效的全文搜索和复杂的数据分析功能。通过 Elasticsearch,用户可以轻松地对大量日志数据进行快速查询和分析。
Logstash: Logstash 是一个用于日志收集、转换和传输的工具。它可以从各种来源(如文件、日志文件、消息队列等)收集日志数据,经过过滤、解析和转换后,再将数据发送到 Elasticsearch 或其他存储目标中。Logstash 提供了丰富的插件和配置选项,可以灵活地应对不同类型的日志数据处理需求。
Kibana: Kibana 是一个用于数据可视化和分析的工具,它与 Elasticsearch 集成,可以帮助用户创建丰富的图表、仪表板和报表,以直观地展示日志数据的情况和趋势。通过 Kibana,用户可以方便地进行数据探索、监控和分析,从而更好地理解日志数据并做出相应的业务决策。
在整个方案中,各组件的作用如下:
- 应用服务
生产日志,通过Logger产生日志并输出。 - Logstash
收集日志,通过http接收应用服务产生的日志。 - Elasticsearch
为日志提供全文检索功能。 - kibana
为Elasticsearch提供图形化界面。
ELK常见部署架构
1. Logstash作为日志收集器
这种架构是比较原始的部署架构,在各应用服务器端分别部署一个Logstash组件,作为日志收集器,然后将Logstash收集到的数据过滤、分析、格式化处理后发送至Elasticsearch存储,最后使用Kibana进行可视化展示。
这种架构不足的是:Logstash比较耗服务器资源,所以会增加应用服务器端的负载压力。
2. Filebeat作为日志收集器
该架构与第一种架构唯一不同的是:应用端日志收集器换成了Filebeat,Filebeat轻量,占用服务器资源少,所以使用Filebeat作为应用服务器端的日志收集器,一般Filebeat会配合Logstash一起使用,这种部署方式也是目前最常用的架构。
3 引入缓存队列的部署架构
该架构在第二种架构的基础上引入了Kafka消息队列(还可以是其他消息队列),将Filebeat收集到的数据发送至Kafka,然后在通过Logstasth读取Kafka中的数据,这种架构主要是解决大数据量下的日志收集方案,使用缓存队列主要是解决数据安全与均衡Logstash与Elasticsearch负载压力。
以上三种架构的总结
第一种部署架构由于资源占用问题,现已很少使用,目前使用最多的是第二种部署架构,至于第三种部署架构个人觉得没有必要引入消息队列,除非有其他需求,因为在数据量较大的情况下,Filebeat 使用压力敏感协议向 Logstash 或 Elasticsearch 发送数据。
如果 Logstash 正在繁忙地处理数据,它会告知 Filebeat 减慢读取速度。拥塞解决后,Filebeat 将恢复初始速度并继续发送数据。
参考链接:ELK分布式日志解决方案