Skip to content

可观测性:分布式日志系统

📖 简介

分布式日志系统(Distributed Logging)是指在分布式系统中,对来自多个服务、节点或组件的日志进行统一收集、存储、管理和分析的过程。由于现代应用通常由大量微服务组成,这些服务可能部署在不同的服务器、容器或云环境中,因此传统的单机日志管理方式已无法满足可观测性、故障排查和性能监控的需求。

⚠️ 分布式日志的核心挑战

  • 日志分散:日志分布在多个节点、容器或服务中,难以集中查看。
  • 日志关联:一次用户请求可能跨越多个服务,如何将这些日志关联起来(如通过 Trace ID)是关键。
  • 高吞吐与可靠性:系统需处理海量日志数据,同时保证不丢失。
  • 实时性要求:运维和开发需要近实时地查看日志以快速响应问题。
  • 结构化与可查询性:非结构化文本日志难以高效检索,结构化(如 JSON)更利于分析。

🏗️ 典型架构(日志管道)

一个典型的分布式日志系统通常包含以下组件:

组件作用常见工具
日志生成应用输出结构化日志(含 Trace ID、服务名等)Logback, log4j2, Winston, Zap
日志采集从各节点收集日志并发送到中央系统Fluentd, Filebeat, Vector, Logstash
日志传输/缓冲高吞吐、可靠的消息队列Kafka, Pulsar, RabbitMQ
日志存储存储日志供查询与分析Elasticsearch, Loki, ClickHouse
日志查询与可视化提供搜索、过滤、仪表盘功能Kibana, Grafana, OpenSearch Dashboards

示例:EFK 栈(Elasticsearch + Fluentd + Kibana)或 ELK 栈(Logstash 替代 Fluentd)
轻量级方案:Grafana + Loki + Promtail

📊 主流开源方案对比

方案特点适用场景
ELK / EFK功能强大,支持全文搜索,资源消耗较高中大型系统,需要复杂查询
Loki + Promtail + Grafana轻量、成本低,基于标签索引,不全文索引云原生、K8s 环境,日志量大但查询较简单
ClickHouse + Vector高性能列式存储,适合日志分析和聚合需要实时分析、BI 场景
OpenTelemetry Logs(新兴)统一日志、指标、链路追踪标准未来兼容性好,逐步替代传统方案