Docker 应用如何用 Filebeat + Logstash 收集日志?

Docker 应用日志收集方案:应用写 stdout → json-file 落盘 /var/lib/docker/containers → Filebeat 采集 → Logstash 清洗 → ES。本文给出挂载要点与 autodiscover 配置。

最佳实践
Docker 应用如何用 Filebeat + Logstash 收集日志?封面

标准链路:容器日志写 stdout/stderr(Docker json-file 驱动落盘)→ Filebeat 挂宿主机的 /var/lib/docker/containers 目录采集 → 送 Logstash 解析 → 入 ES。容器内不要自己写日志文件。

关键配置

应用侧:日志输出到 stdout(12-Factor 原则),Docker 默认 json-file 驱动落盘。

Filebeat(宿主机或容器均可,推荐宿主机 DaemonSet):

filebeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true     # 支持容器 labels 声明日志类型
processors:
  - add_docker_metadata: ~    # 附加容器名/镜像/标签

Logstash 侧:按容器标签(如 co.elastic.logs/multiline.*)做多行合并与 grok 解析。

注意事项

  • 挂载只读:-v /var/lib/docker/containers:/var/lib/docker/containers:ro,并挂载 docker.sock 供元数据查询;
  • json-file 驱动要配轮转:--log-opt max-size=10m --log-opt max-file=3
  • K8s 环境同理,路径为 /var/log/containers。

观测云对照

观测云 DataKit 一条 DaemonSet YAML 即完成容器 stdout/stderr 全量采集,自动附加 K8s 元数据,Pipeline 在线完成清洗——无需维护 Filebeat+Logstash 双层。

常见问题(FAQ)

Q:应用已经写日志文件了怎么办? 挂卷到宿主机,Filebeat 按文件路径采集。

Q:多行堆栈怎么处理? Filebeat multiline 或 Logstash multiline codec,按日期行首合并。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台