一.概述
工作过程中,往往有开发需要拉取当天或者前几天容器日志的情况,人为捞取日志效率低下,工作大量重复,价值较低。本文用于介绍解决这个问题的办法之一。
二.部署准备
1.模拟架构
假设有A、B、C三台服务器,每台服务器上都有多个容器需要获取日志和基础指标。这种问题可以部署dozzle来解决。(支持实时查看并下载容器日志,同时也能实时查看容器资源使用情况)

2.dozzle
Dozzle 是由 Docker OSS 赞助的一个开源项目。它是一款日志查看器,旨在简化容器的监控和调试。这款轻量级的基于网络的应用程序通过直观的用户界面提供实时日志流、过滤和搜索功能。
Dozzle 安装和配置简便,是开发人员和系统管理员为 Docker 环境寻找高效、用户友好型日志查看器的理想解决方案。官方文档
1.采集方式
- 单节点(只采集本机)
- 代理多节点(采集多台机器)
本文主要讲解代理多节点的方式,这种方式较为常用。
如果采用多节点方式,可以将dozzle拆分为两个模块
- 容器看板
- 代理agent
其中容器看板是由8080端口开发出来
arduino
docker run -d \
-v /var/run/docker.sock:/var/run/docker.sock \
-p 8080:8080 \
amir20/dozzle:latest
代理节点需要开启agent模式并暴露7007端口
bash
docker run -d --name dozzle-test-A \
--restart always \
-p 7007:7007 \
-v /var/run/docker.sock:/var/run/docker.sock \
amir20/dozzle:latest agent \ #agent是开启代理的参数
--hostname test-A #推荐设置名称方便分组!!!
看板节点本身无法采集其他服务数据,所以需要连接agent节点
ini
#假设A、B、C三台服务器ip为172.16.20.3,172.16.20.4,172.16.20.5并暴露7007端口
docker run -d --name=dozzle -p 8080:8080 \
-e DOZZLE_REMOTE_AGENT="172.16.20.3:7007,172.16.20.4:7007,172.16.20.5:7007" \
amir20/dozzle:latest
2.页面效果

如需查看容器日志,只需要点击对应容器即可,dozzle提供了多种功能如下载、日志分级、搜索等功能

三、其他功能
1.容器标签筛选
在一些情况下,部分容器日志并不想展示出来,所以要想控制需要用到标签功能--filter label=dozzle
我们只需要在容器提前打好分类标签,如果只想展示后端容器日志,可以打上统一标签如backend
ini
docker run -d --name=dozzle -p 8080:8080 \
-e DOZZLE_REMOTE_AGENT="172.16.20.3:7007,172.16.20.4:7007,172.16.20.5:7007" \
amir20/dozzle:latest \
--filter label=dozzle #加上dozzle的标签筛选功能即可实现
容器标签筛选再加上dozzle的身份验证功能,可以实现相对全面的权限控制。
2.容器操作
Dozzle 支持容器操作,您可以通过容器统计信息右侧的下拉菜单来 启动、停止 和 删除 容器。此功能默认处于禁用状态,可通过将环境变量 DOZZLE_ENABLE_CONTAINER_ACTIONS 设置为 true 来启用。
javascript
docker run --volume=/var/run/docker.sock:/var/run/docker.sock -p 8080:8080 amir20/dozzle --enable-actions
Dozzle 支持在容器内附加或执行命令。它提供了一个基于网络的界面来与 Docker 容器进行交互,允许用户直接从浏览器连接到正在运行的容器并执行命令。此功能对于调试和排查容器化应用程序的故障特别有用。默认情况下此功能处于禁用状态,因为它可能会带来安全风险。要启用它,请将 DOZZLE_ENABLE_SHELL 环境变量设置为 true 。
javascript
docker run --volume=/var/run/docker.sock:/var/run/docker.sock -p 8080:8080 amir20/dozzle --enable-shell
如果需要实现特殊功能,推荐参考官网具体文档
四、注意事项
由于dozzle是通过docker info中的ID来区分不同的节点,这会导致克隆的虚拟机docker ID如果重复,会导致dozzle识别为一台服务器,从而只展示一台服务器的容器!
需要清理docker的engine-id文件,并重启docker,生成新的id文件即可。(具体情况因docker版本和安装位置有关)