Docker 日志管理的实现示例

 更新时间:2024年12月23日 11:34:41   作者:学堂在线  
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 logs:这是 Docker 用于获取容器日志的标准命令。
  • -f:这个选项告诉 Docker 持续输出新的日志,直到你手动停止(例如,通过按下 Ctrl+C)。
  • --tail 10:这个选项指定 Docker 应该显示容器日志的最后10条记录。如果你不指定 -tail 参数,docker logs 命令将默认显示最后几条日志。
  • my-container:这是你想要查看日志的容器的名称或ID。你需要将其替换为实际的容器名称或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
  • max-size:滚动前日志的最大大小,一个正整数加上一个代表测量单位(k,m 或 g)的修饰符。默认为 -1(无限制)。
  • max-file:可以存在的最大日志文件数量。如果滚动日志会创建多余文件,则会删除最旧的文件。只有在设置了 max-size 时才有效。一个正整数,默认为1。
  • labels 和 env:用于高级日志标记选项。

示例注释如下:

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
  • docker run:这是 Docker 命令,用于从镜像创建并启动一个新的容器。
  • --log-driver json-file:这个选项指定了容器的日志驱动为 json-file,意味着 Docker 将容器的日志以 JSON 格式存储在文件中。
  • --log-opt max-size=10m:这个选项用于设置日志文件的最大尺寸限制。10m 表示每个日志文件的最大大小为 10MB。当达到这个大小时,Docker 将创建一个新的日志文件。
  • --log-opt max-file=3:这个选项用于设置可以存在的日志文件的最大数量。在这个例子中,最多可以有 3 个日志文件。如果创建了第 4 个文件,最旧的文件(第一个文件)将被删除。
  • my-image:这是要运行的 Docker 镜像的名称或ID。你需要将其替换为实际的镜像名称或ID。

syslog

示例:

docker run --log-driver=syslog --log-opt syslog-address=tcp://192.168.0.1:514 my-image
  • syslog-address:指定 syslog 服务器的地址和端口。
  • syslog-facility:指定 syslog 设施。

示例注释如下:

docker run           # Docker命令,用于创建并运行一个新的容器
--log-driver=syslog # 选项,指定日志驱动为syslog,将容器日志发送到syslog服务器
--log-opt syslog-address=tcp://192.168.0.1:514  # 选项,设置syslog服务器的地址和端口
my-image            # 参数,指定要使用的镜像名称或ID
  • docker run:这是 Docker 命令,用于从指定的镜像创建并启动一个新的容器。
  • --log-driver=syslog:这个选项指定了容器的日志驱动为 syslog,意味着 Docker 将容器的日志发送到配置的 syslog 服务器。
  • --log-opt syslog-address=tcp://192.168.0.1:514:这个选项用于指定 syslog 服务器的地址和端口。在这个例子中,Docker 将通过 TCP 协议将日志发送到 IP 地址为 192.168.0.1、端口为 514 的 syslog 服务器。
  • my-image:这是要运行的 Docker 镜像的名称或ID。你需要将其替换为实际的镜像名称或ID。

fluentd

示例:

docker run --log-driver=fluentd --log-opt fluentd-address=localhost:24224 --log-opt tag="my-container" my-image
  • fluentd-address:指定 Fluentd 服务器的地址和端口。
  • tag:指定日志的标签。

示例注释如下:

docker run           # Docker命令,用于创建并启动一个新的容器
--log-driver=fluentd # 选项,指定日志驱动为fluentd,将容器日志发送到Fluentd服务器
--log-opt fluentd-address=localhost:24224  # 选项,设置Fluentd服务器的地址和端口
--log-opt tag="my-container"    # 选项,设置日志标签,用于在Fluentd中标识日志来源
my-image            # 参数,指定要使用的镜像名称或ID
  • docker run:这是 Docker 命令,用于从指定的镜像创建并启动一个新的容器。
  • --log-driver=fluentd:这个选项指定了容器的日志驱动为 fluentd,意味着 Docker 将容器的日志发送到配置的 Fluentd 服务器。
  • --log-opt fluentd-address=localhost:24224:这个选项用于指定 Fluentd 服务器的地址和端口。在这个例子中,Docker 将日志发送到本机(localhost)的 24224 端口。
  • --log-opt tag="my-container":这个选项用于设置日志的标签,tag 是 Fluentd 中用于区分不同日志来源的标识。在这个例子中,所有来自该容器的日志都将带有 my-container 这个标签。
  • my-image:这是要运行的 Docker 镜像的名称或ID。你需要将其替换为实际的镜像名称或ID。

none

示例:

docker run --log-driver=none my-image
  • 禁用容器日志,不会输出任何容器日志。

示例注释如下:

docker run           # Docker命令,用于创建并启动一个新的容器
--log-driver=none   # 选项,指定日志驱动为none,禁用容器日志的输出和存储
my-image            # 参数,指定要使用的镜像名称或ID
  • docker run:这是 Docker 命令,用于从指定的镜像创建并启动一个新的容器。
  • --log-driver=none:这个选项指定了容器的日志驱动为 none,意味着 Docker 不会为该容器创建或管理任何日志文件,容器的日志不会被输出或存储。
  • my-image:这是要运行的 Docker 镜像的名称或ID。你需要将其替换为实际的镜像名称或ID。注释如下:
docker run           # Dockers命令,用于创建并启动一个新的容器
--log-driver=none   # 选项,指定日志驱动为none,禁用容器日志的输出和存储
my-image            # 参数,指定要使用的镜像名称或ID
  • docker run:这是 Docker 命令,用于从指定的镜像创建并启动一个新的容器。
  • --log-driver=none:这个选项指定了容器的日志驱动为 none,意味着 Docker 不会为该容器创建或管理任何日志文件,容器的日志不会被输出或存储。
  • my-image:这是要运行的 Docker 镜像的名称或ID。你需要将其替换为实际的镜像名称或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 从哪里获取数据。

  • docker:指定使用 Docker 插件作为输入源。
    • host => "unix:///var/run/docker.sock":指定 Docker 插件监听的 Unix 套接字路径,这里是 Docker 守护进程的默认路径。
    • tags => ["docker", "logs"]:为输入的事件添加标签,方便后续过滤和处理。

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

  • elasticsearch:指定输出到 Elasticsearch。
    • hosts => ["http://elasticsearch:9200"]:指定 Elasticsearch 的 HTTP 地址和端口,这里假设 Elasticsearch 服务运行在默认的 9200 端口上。
    • index => "docker-logs-%{+YYYY.MM.dd}":定义输出到 Elasticsearch 的索引名称,使用日期格式化,每天自动创建一个新的索引,例如 docker-logs-2024.12.04。这里的 %{+YYYY.MM.dd} 是 Logstash 的日期格式化语法。
  • 查看日志通过 Kibana 的 Web 界面,可以实时查看和分析 Docker 容器的日志。

总结

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

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

相关文章

  • Docker安装mysql主从复制的实现步骤

    Docker安装mysql主从复制的实现步骤

    MySQL主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点,本文主要介绍了Docker安装mysql主从复制的实现步骤,感兴趣的可以了解一下
    2024-03-03
  • mysql8.4.0实现主从复制部署

    mysql8.4.0实现主从复制部署

    主从复制是 MySQL 中一种用于实现数据冗余、提高可用性和性能的重要机制,本文主要介绍了mysql8.4.0实现主从复制部署,具有一定的参考价值,感兴趣的可以了解一下
    2024-07-07
  • docker一键安装wordpress的方法步骤

    docker一键安装wordpress的方法步骤

    这篇文章主要介绍了docker一键安装wordpress的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • Docker的基本概念、安装步骤以及一些简单的用法

    Docker的基本概念、安装步骤以及一些简单的用法

    Docker 是一种开源的容器化平台,允许开发者打包应用及其依赖项到一个可移植的容器中,容器可以在任何支持Docker的环境中运行,这使得应用的部署和管理变得更加简单和高效,本文介绍Docker的基本概念、安装步骤以及一些简单的用法,感兴趣的朋友一起看看吧
    2024-11-11
  • Linux平台搭建docker环境并简单使用示例

    Linux平台搭建docker环境并简单使用示例

    这篇文章主要介绍了Linux平台搭建docker环境及简单使用方法,需要的朋友参考下吧
    2017-01-01
  • Docker 环境配置以及问题解决方案

    Docker 环境配置以及问题解决方案

    这篇文章主要介绍了Docker 环境配置以及问题解决方案的相关资料,需要的朋友可以参考下
    2022-11-11
  • 使用Docker完成前端部署详细图文教程

    使用Docker完成前端部署详细图文教程

    这篇文章主要给大家介绍了关于使用Docker完成前端部署的相关资料,Docker变得越来越流行,它可以轻便灵活地隔离环境,进行扩容,运维管理,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Docker中Harbor企业级镜像仓库的搭建与使用

    Docker中Harbor企业级镜像仓库的搭建与使用

    本文介绍了Harbor企业级镜像仓库的搭建与使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • 使用docker搭建gitlab详解

    使用docker搭建gitlab详解

    本篇文章主要介绍了使用docker搭建gitlab详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • Docker安装mysql教程以及解决mysqld: Can‘t read dir of ‘/etc/mysql/conf.d/‘问题

    Docker安装mysql教程以及解决mysqld: Can‘t read dir&nbs

    本文详细介绍了如何通过Docker来安装和配置MySQL数据库,包括拉取MySQL镜像、启动MySQL容器、配置MySQL、解决常见错误等步骤,提供了详尽的命令和参数说明,帮助用户顺利完成MySQL的安装和配置,文中还提到了如何处理MySQL容器启动时遇到的“无法读取目录”
    2024-10-10

最新评论