插件窝 干货文章 如何在Linux上配置容器日志管理

如何在Linux上配置容器日志管理

日志 Docker 容器 elasticsearch 106    来源:    2025-04-15

Linux容器日志管理配置指南

一、容器日志基础

容器日志主要分为两类: 1. 标准输出/错误日志:容器内进程输出到stdout/stderr的日志 2. 应用日志文件:容器内应用写入文件的日志

二、Docker日志驱动配置

1. 查看当前日志驱动

docker info --format '{{.LoggingDriver}}'

2. 常用日志驱动及配置

json-file驱动(默认)

# 全局配置
vim /etc/docker/daemon.json
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

# 单容器配置
docker run --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 nginx

syslog驱动

# 全局配置
{
  "log-driver": "syslog",
  "log-opts": {
    "syslog-address": "udp://192.168.1.1:514"
  }
}

# 单容器配置
docker run --log-driver=syslog --log-opt syslog-address=udp://192.168.1.1:514 nginx

journald驱动

# 需要systemd支持
{
  "log-driver": "journald"
}

# 查看日志
journalctl -u docker CONTAINER_NAME=容器名

3. 重启Docker使配置生效

systemctl restart docker

三、Kubernetes日志管理

1. 集群级日志方案

  • 节点级日志代理:在每个节点上运行日志代理(如Fluentd、Filebeat)
  • Sidecar容器:与应用容器一起运行日志收集容器
  • 应用直接写入:应用直接写入到集中式日志系统

2. 使用Fluentd收集日志示例

安装Fluentd

# 使用官方Docker镜像
docker run -d -v /var/log:/var/log -v /var/lib/docker/containers:/var/lib/docker/containers fluent/fluentd

基本配置文件(fluent.conf)

<source>
  @type tail
  path /var/lib/docker/containers/*/*.log
  pos_file /var/log/fluentd-docker.pos
  tag docker.*
  read_from_head true
  <parse>
    @type json
    time_key time
    time_format %Y-%m-%dT%H:%M:%S.%NZ
  </parse>
</source>

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

四、日志轮转管理

1. 使用logrotate

# 示例配置 /etc/logrotate.d/docker-containers
/var/lib/docker/containers/*/*.log {
  rotate 7
  daily
  compress
  delaycompress
  missingok
  copytruncate
}

2. 测试logrotate配置

logrotate -d /etc/logrotate.d/docker-containers

五、ELK集中式日志方案

1. 使用Docker Compose部署ELK

version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
    volumes:
      - esdata:/usr/share/elasticsearch/data

  kibana:
    image: docker.elastic.co/kibana/kibana:7.9.2
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch

  logstash:
    image: docker.elastic.co/logstash/logstash:7.9.2
    ports:
      - "5000:5000"
    volumes:
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch

volumes:
  esdata:

2. 基本Logstash配置(logstash.conf)

input {
  tcp {
    port => 5000
    codec => json
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
  }
}

六、最佳实践建议

  1. 日志分级处理:区分DEBUG、INFO、WARN、ERROR等级别
  2. 敏感信息过滤:避免记录密码、密钥等敏感信息
  3. 结构化日志:使用JSON格式便于解析和分析
  4. 日志保留策略:根据合规要求设置适当的保留期限
  5. 监控日志系统:确保日志收集系统本身健康运行
  6. 考虑使用云服务:AWS CloudWatch、GCP Stackdriver等托管服务

七、故障排查命令

# 查看容器日志
docker logs 容器ID

# 实时查看日志
docker logs -f 容器ID

# 查看最后N行日志
docker logs --tail=100 容器ID

# 查看特定时间段的日志
docker logs --since "2023-01-01" --until "2023-01-02" 容器ID

# 查看Kubernetes Pod日志
kubectl logs pod名
kubectl logs -f pod名
kubectl logs --previous pod名  # 查看崩溃容器的日志

通过合理配置容器日志管理系统,您可以有效收集、存储和分析容器化应用的日志数据,为运维监控和故障排查提供有力支持。