docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker 日志管理

Docker 日志管理的实现示例

作者:学堂在线

Docker提供了多种日志驱动来管理和提取容器日志,包括json-file、syslog、fluentd等,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

Docker 提供了多种机制来管理和提取容器日志,这些机制被称为日志驱动(logging driver)。默认情况下,Docker 使用 json-file 作为默认的日志驱动,它将日志信息以 JSON 文件的形式存储在 Docker 主机上。

Docker 日志子命令

docker logs:用于查看容器的日志输出。使用 -f 参数可以持续查看新产生的日志,类似于 tail -f。使用 --tail 参数可以指定显示日志的条数。

docker logs -f --tail 10 my-container

示例注释如下:

docker logs      # Docker命令,用于获取容器的日志输出
-f             # 选项,表示跟随日志输出,类似于Unix命令行中的'tail -f'
--tail 10      # 选项,指定要显示的最后N条日志记录,这里是最后10条
my-container   # 参数,指定要获取日志的容器名称或ID

Docker 日志驱动(logging driver)

Docker 支持多种日志驱动,可以根据需要选择使用。以下是一些常用的日志驱动及其配置参数:

json-file

示例:

docker run --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 my-image

示例注释如下:

docker run           # Docker命令,用于创建并启动一个新的容器
--log-driver json-file  # 选项,指定日志驱动为json-file,这是一种将日志以JSON格式写入文件的驱动
--log-opt max-size=10m  # 选项,设置日志文件的最大尺寸为10MB
--log-opt max-file=3    # 选项,设置日志文件的最大文件数为3,当达到这个数量时,最旧的日志文件将被删除
my-image             # 参数,指定要运行的镜像名称或ID

syslog

示例:

docker run --log-driver=syslog --log-opt syslog-address=tcp://192.168.0.1:514 my-image

示例注释如下:

docker run           # Docker命令,用于创建并运行一个新的容器
--log-driver=syslog # 选项,指定日志驱动为syslog,将容器日志发送到syslog服务器
--log-opt syslog-address=tcp://192.168.0.1:514  # 选项,设置syslog服务器的地址和端口
my-image            # 参数,指定要使用的镜像名称或ID

fluentd

示例:

docker run --log-driver=fluentd --log-opt fluentd-address=localhost:24224 --log-opt tag="my-container" my-image

示例注释如下:

docker run           # Docker命令,用于创建并启动一个新的容器
--log-driver=fluentd # 选项,指定日志驱动为fluentd,将容器日志发送到Fluentd服务器
--log-opt fluentd-address=localhost:24224  # 选项,设置Fluentd服务器的地址和端口
--log-opt tag="my-container"    # 选项,设置日志标签,用于在Fluentd中标识日志来源
my-image            # 参数,指定要使用的镜像名称或ID

none

示例:

docker run --log-driver=none my-image

示例注释如下:

docker run           # Docker命令,用于创建并启动一个新的容器
--log-driver=none   # 选项,指定日志驱动为none,禁用容器日志的输出和存储
my-image            # 参数,指定要使用的镜像名称或ID
docker run           # Dockers命令,用于创建并启动一个新的容器
--log-driver=none   # 选项,指定日志驱动为none,禁用容器日志的输出和存储
my-image            # 参数,指定要使用的镜像名称或ID

日志管理方案:ELK Stack

ELK Stack(Elasticsearch, Logstash, Kibana)是一个流行的开源日志管理和分析工具集。

部署 ELK Stack使用 Docker Compose 部署 ELK Stack:

version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
    environment:
      - discovery.type=single-node
  logstash:
    image: docker.elastic.co/logstash/logstash:7.10.0
    volumes:
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    ports:
      - "5000:5000"
  kibana:
    image: docker.elastic.co/kibana/kibana:7.10.0
    ports:
      - "5601:5601"

配置注释:

version: '3'  # 指定Docker Compose文件的版本,这里使用的是版本3

services:  # 定义服务的开始,所有服务都将在这里列出

  elasticsearch:  # 定义一个名为elasticsearch的服务
    image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0  # 使用的Elasticsearch镜像及其版本
    environment:  # 设置环境变量
      - discovery.type=single-node  # 配置Elasticsearch为单节点模式,适用于测试和开发环境

  logstash:  # 定义一个名为logstash的服务
    image: docker.elastic.co/logstash/logstash:7.10.0  # 使用的Logstash镜像及其版本
    volumes:  # 定义挂载卷,用于将配置文件从宿主机挂载到容器中
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf  # 将宿主机的logstash.conf文件挂载到容器的指定路径
    ports:  # 定义端口映射
      - "5000:5000"  # 将容器的5000端口映射到宿主机的5000端口,用于Logstash的输入

  kibana:  # 定义一个名为kibana的服务
    image: docker.elastic.co/kibana/kibana:7.10.0  # 使用的Kibana镜像及其版本
    ports:  # 定义端口映射
      - "5601:5601"  # 将容器的5601端口映射到宿主机的5601端口,用于访问Kibana的Web界面

这个配置文件定义了三个服务:Elasticsearch、Logstash 和 Kibana,每个服务都指定了使用的镜像和版本。Elasticsearch 被配置为单节点模式,Logstash 通过挂载卷使用自定义的配置文件,而 Kibana 将容器的端口映射到宿主机,以便可以通过浏览器访问 Kibana 的 Web 界面。
2. 配置 Logstash在 Logstash 的配置文件中添加 Docker 日志的输入源:

input {
  docker {
    host => "unix:///var/run/docker.sock"
    tags => ["docker", "logs"]
  }
}
output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "docker-logs-%{+YYYY.MM.dd}"
  }
}

下面是对该配置文件中每个部分的注释:

input {
  docker {
    host => "unix:///var/run/docker.sock"  # 设置Docker输入插件的host参数,指向Docker的socket文件,用于直接从Docker守护进程读取日志
    tags => ["docker", "logs"]  # 设置标签,用于标识这些日志是由Docker输入插件处理的
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]  # 设置输出到Elasticsearch的地址和端口,这里假设Elasticsearch运行在同一网络中的默认端口9200
    index => "docker-logs-%{+YYYY.MM.dd}"  # 设置输出到Elasticsearch的索引名称,使用日期格式化,每天创建一个新的索引
  }
}

input:定义输入部分,指定 Logstash 从哪里获取数据。

output:定义输出部分,指定 Logstash 如何处理并输出数据。

总结

通过这些工具和方法,可以有效地管理和分析 Docker 容器的日志,提高系统的可观测性和问题排查的效率

到此这篇关于Docker 日志管理的实现示例的文章就介绍到这了,更多相关Docker 日志管理内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文