你们的服务是怎么做日志收集的?
你们的服务是怎么做日志收集的?
回答重点
我们服务采用的方案是 ELK 那套,Logstash 主要负责从微服务集群采集日志,然后将日志数据发送到 ElasticSearch,ES 主要负责数据的存储和检索,最后 Kibana 就负责日志数据的可视化分析。
流程如下图所示:
- ElasticSearch: ElasticSearch 是一个分布式搜索和分析引擎,可以存储和索引大量的日志数据,他提供了快速的搜索和聚合功能,可以实现大规模日志数据的高效处理。
- Logstash: Logstash 是一个用于采集、过滤和转发日志数据的工具。它可以从文件、消息队列、网络等多种渠道实现日志数据的采集,并对数据进行处理以及转换,最后发到 ElasticSearch 进行存储和索引。
- Kibana:Kibana 是一个日志数据可视化以及分析的工具,它提供了丰富的图表以及仪表盘工具,可以帮助用户实现日志数据的实时监控和分析。
扩展知识
日志收集的基本流程
- 日志输出:每个微服务实例通过日志框架(如 Logback、Log4j2)生成应用日志。日志可以记录在文件中,也可以直接输出到标准输出(stdout),特别是在容器化环境中,标准输出是常用方式。
- 日志收集组件:使用日志收集工具(如 Filebeat、Fluentd、Logstash 等)读取应用日志,将其传输到集中式日志存储系统。Filebeat 和 Fluentd 常用于从文件中收集日志,并将其推送到日志处理平台。
- 日志集中存储:将收集到的日志数据存储在Elasticsearch 中。Elasticsearch 是一个分布式搜索引擎,支持对日志数据的全文检索、聚合查询。
- 日志展示与分析:使用 Kibana 对 Elasticsearch 中的数据进行可视化分析。Kibana 提供了丰富的可视化工具,可以通过图表和仪表盘对日志数据进行展示,方便开发和运维人员实时监控和分析。
常用的日志收集技术栈
ELK/EFK Stack:
- ELK:Elasticsearch、Logstash、Kibana 是经典的日志收集和分析方案。Logstash 用于日志的预处理和格式化,Elasticsearch 用于存储和搜索日志数据,Kibana 用于日志的可视化展示。
- EFK:Elasticsearch、Fluentd、Kibana 是对 ELK 的改进,Fluentd 替代了 Logstash,性能更高,适合处理大量的日志数据。
Prometheus + Loki + Grafana:
- Promtail 收集日志并推送到 Loki,Loki 是专为日志存储而设计的工具,具有与 Prometheus 类似的查询语法。
- Grafana 提供对 Loki 的可视化支持,可以与 Prometheus 数据联动,适合监控和日志的统一展示。
日志收集组件对比
- Filebeat:由 Elastic 提供的轻量级日志传输工具。Filebeat 安装在每个服务所在的服务器上,监控日志文件并将其内容推送到 Logstash、Elasticsearch 或 Kafka 中。适用于低延迟、大规模的日志传输。
- Fluentd:一个开源的数据收集器,支持丰富的输入、过滤和输出插件。Fluentd 能够高效地处理日志数据的预处理工作,例如日志格式转换、日志过滤等,并将数据推送到 Elasticsearch、Kafka 等后端。
- Logstash:提供更强大的日志处理能力,可以通过复杂的过滤器对日志数据进行格式化、转换和聚合,然后将数据发送到 Elasticsearch。Logstash 功能强大,但相较于 Filebeat 和 Fluentd,性能稍低。
日志收集系统的优化策略
- 日志采样:在高并发场景下,可以对某些类型的日志进行采样,降低日志数据量。例如,对 DEBUG 级别的日志只采集 10% 的样本数据。
- 日志压缩与存储优化:在将日志数据传输到 Elasticsearch 之前,可以使用 GZIP 等压缩算法进行压缩,减少带宽消耗。同时,也可以在 Elasticsearch 中对历史数据进行归档或删除操作,节省存储空间。
- 日志切分:通过在日志文件中按日期、大小等规则进行切分,避免单个日志文件过大导致收集效率下降。Filebeat 和 Fluentd 支持对滚动日志文件的监控和收集。
Comments