💻 分布式日志系统
什么是分布式日志
在分布式应用中,日志被分散在储存不同的设备上。如果是管理数十上百台服务器,还在使用依次登录每台机器的传统方法查阅日志,这样的感觉是不是很繁琐和效率低下?因此更高效的解决方案是使用集中化的日志管理,分布式日志就是对大规模日志数据进行采集、追踪、处理。
ELK
核心产品包括 Elasticsearch、Kibana、Beats 和 Logstash(也称为 ELK Stack)等等。能够安全可靠地从任何来源获取任何格式的数据,然后对数据进行搜索、分析和可视化。
在传统架构中,比较成熟且流行的日志收集平台非ELK(Elasticsearch + Logstash + Kibana)莫属,其中Logstash负责采集日志,并输出至Elasticsearch,之后用Kibana进行展示。
缺点:
- Logstash占用资源大,语法复杂EFK
- EFK,Elasticsearch + Fluentd/Filebeat + Kibana
- EFK,是一套广泛用于日志收集、存储、分析和可视化的开源解决方案,尤其在Kubernetes生态中备受推崇。
- EFK,是一套高度灵活的日志管理方案,用户可根据实际需求选择Fluentd或Filebeat作为收集器,并结合Kubernetes特性实现自动化部署。
- EFK,核心价值在于将分散的日志集中化,并通过Kibana的交互式分析提升运维效率。
- EFK,对于需要更高吞吐或复杂处理的场景,可引入Kafka等中间件扩展架构。
Elasticsearch
Elasticsearch 是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大量日志数据,也可用于搜索许多不同类型的文档。
Beats
Beats 是数据采集的得力工具。将 Beats 和您的容器一起置于服务器上,或者将 Beats 作为函数加以部署,然后便可在 Elastisearch 中集中处理数据。如果需要更加强大的处理性能,Beats 还能将数据输送到 Logstash 进行转换和解析。
Filebeat
Filebeat 是一个轻量级的日志传输工具,由 Elastic 公司开发。它专门用于收集和发送日志数据到中央存储或分析系统,如 Elasticsearch 或 Logstash。Filebeat 可以监视指定的文件和位置,读取日志事件,并将其传输到指定的目的地。它支持多种日志格式和协议,并具有低资源消耗的特点。
优点:
- 占用系统的CPU和内存小;
- 可以更好地分析日志。
缺点:
- 依赖Elasticsearch,维护难度和资源使用都是偏高。Fluentd
Fluentd 是一个开源的日志收集器,用于统一收集、处理和传输日志数据。它可以从各种来源收集数据,并将其发送到目标存储(如 Elasticsearch)。Fluentd 支持灵活的插件系统,使用户可以根据自己的需求进行定制。
优点: Fluentd占用资源小,语法简单。
缺点:
- Fluentd只能收集控制台日志(使用logs命令查出来的日志),不能收集非控制台日志,不能很好的满足生产环境的需求;
- 依赖Elasticsearch,维护难度和资源使用都是偏高。Kibana
Kibana 核心产品搭载了一批经典功能:柱状图、线状图、饼图、旭日图,等等。不仅如此,您还可以使用 Vega 语法来设计独属于您自己的可视化图形。所有这些都利用 Elasticsearch 的完整聚合功能。
Elasticsearch 通常与 Kibana 一起部署,Kibana 是 Elasticsearch 的一个功能强大的数据可视化 Dashboard,Kibana 允许你通过 web 界面来浏览 Elasticsearch 日志数据。
Logstash
Logstash 是数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置。
Filebeat 相对 Logstash 的优点:
- 侵入低,无需修改 elasticsearch 和 kibana 的配置;
- 性能高,IO 占用率比 logstash 小太多;
当然 Logstash 相比于 FileBeat 也有一定的优势,比如 Logstash 对于日志的格式化处理能力,FileBeat 只是将日志从日志文件中读取出来,当然如果收集的日志本身是有一定格式的,FileBeat 也可以格式化,但是相对于Logstash 来说,效果差很多。