全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-21 6 分钟 ✍️ juanwangdev

外部日志聚合

多容器环境需要集中管理日志,下面介绍集成外部日志系统方法。

Fluentd + ELK

架构

YAML
容器 → Fluentd → Elasticsearch → Kibana (可视化)

配置 Fluentd

Bash
# docker-compose.yml
services:
  fluentd:
    image: fluent/fluentd:v1.16
    ports:
      - "24224:24224"
    volumes:
      - ./fluent.conf:/fluentd/etc/fluent.conf

  elasticsearch:
    image: elasticsearch:8.11
    environment:
      - discovery.type=single-node

  kibana:
    image: kibana:8.11
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch

fluent.conf

YAML
<source>
  @type forward
  port 24224
</source>

<match docker.**>
  @type elasticsearch
  host elasticsearch
  port 9200
  logstash_format true
  logstash_prefix docker
</match>

容器发送日志

Bash
# 使用 fluentd 驱动
docker run -d \
  --name my-app \
  --log-driver fluentd \
  --log-opt fluentd-address=localhost:24224 \
  --log-opt tag="docker.my-app" \
  my-app

Loki + Grafana

架构

Bash
容器 → Promtail → Loki → Grafana (可视化)

配置 Promtail

text
services:
  loki:
    image: grafana/loki:2.9
    ports:
      - "3100:3100"

  promtail:
    image: grafana/promtail:2.9
    volumes:
      - /var/lib/docker/containers:/var/lib/docker/containers:ro
      - ./promtail-config.yml:/etc/promtail/config.yml
    command: -config.file=/etc/promtail/config.yml

  grafana:
    image: grafana/grafana:10.2
    ports:
      - "3000:3000"

Logstash 集成

text
# 使用 Logstash 驱动
docker run -d \
  --name my-app \
  --log-driver gelf \
  --log-opt gelf-address=udp://localhost:12201 \
  --log-opt tag="my-app" \
  my-app

logstash.conf

text
input {
  gelf {
    port => 12201
    type => "docker"
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "docker-%{+YYYY.MM.dd}"
  }
}

日志标签与过滤

text
# 添加标签
docker run -d \
  --name my-app \
  --log-driver fluentd \
  --log-opt fluentd-address=localhost:24224 \
  --log-opt tag="docker.{{.Name}}" \
  --log-opt labels=production_status,service_name \
  --log-opt env=NODE_ENV,VERSION \
  my-app

优势

  • 集中管理:所有容器日志统一存储
  • 全文搜索:ELK 支持全文检索
  • 可视化:Grafana/Kibana 图表展示
  • 告警:配置日志阈值告警
  • 保留策略:按时间自动清理旧日志

要点总结

  • Fluentd + ELK 实现容器日志集中存储和检索
  • Loki + Grafana 轻量级替代,适合 Kubernetes 环境
  • Gelf/Logstash 驱动发送日志到外部系统
  • 日志标签(tag、labels、env)便于分类和过滤
  • 外部日志系统支持全文搜索、可视化和告警

📝 发现内容有误?点击此处直接编辑

← 上一篇 数据迁移与克隆
下一篇 → 日志查看与排查
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库