使用Dozzle审计容器日志

使用Dozzle审计容器日志

简介

Dozzle是一个开源的日志查看器,主要用于监视和查看Docker容器的实时日志。它提供了一个基于Web的用户界面,允许用户实时查看Docker容器的日志,而不会存储任何日志文件。

应用场景

Dozzle的主要应用场景是在Docker环境中,帮助开发者或系统管理员快速查看和监控Docker容器的日志输出。这对于调试和排除Docker环境中运行的应用程序故障非常重要。

关键特性和优势

Dozzle具有一些关键特性,如支持查看一个dockerd下面所有container的日志,支持查看多个dockerd下面container的日志,以及支持用户鉴权。这些特性使得Dozzle成为一个高效且用户友好的日志查看器。

根据最新的信息,Dozzle是由Docker OSS赞助的开源项目,并且正在积极维护中。它提供了实时日志流、过滤和搜索功能,用户可以快速轻松地访问Docker容器生成的日志。此外,Dozzle还支持带有智能颜色编码的JSON日志。

Dozzle支持多种用户鉴权方式,具体如下:

  1. Basic Authentication:这是一种最常见的用户鉴权方式,它要求用户提供用户名和密码以进行身份验证。
  2. Token Authentication:在这种鉴权方式中,用户不需要提供用户名和密码,而是提供一个特定的令牌来进行身份验证。
  3. OpenID Connect:这是一种基于开放标准的鉴权协议,它允许用户使用他们的社交媒体或其他第三方服务帐户进行身份验证。
  4. OAuth 2.0:这是一种广泛使用的授权框架,它允许第三方应用在用户的授权下访问他们的资源。

以上就是Dozzle支持的一些主要的用户鉴权方式,不同的方式可以根据实际需求选择使用。

实体-关系模型

Dozzle支持对远程主机的容器日志收集,以实现集中审计,ER图如下:

dozzle关系模型

环境部署

- 业务端

1、开启Docker Remote API

编辑/usr/lib/systemd/system/docker.service

1
2
3
4
5
6
7
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2376 # 添加2376端口
...

重载配置文件并重启Docker服务:

1
2
systemctl daemon-reload
systemctl restart docker

2、生成证书

生成CA(根证书)私钥和自签名证书:

1
openssl req -x509 -nodes -newkey rsa:4096 -keyout ca.key -out ca.pem -subj "/CN=dozzle.site"

生成证书私钥:

1
openssl genrsa -out key.pem 4096

创建证书签名请求(CSR)文件:

1
openssl req -new -key key.pem -out cert.csr -subj "/CN=dozzle.site"

使用CA的私钥和自签名证书部署CSR文件,生成证书:

1
openssl x509 -req -in cert.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out cert.pem -days 3650
  • ca.key和ca.pem:根证书和自签名证书
  • key.pem:生成的证书私钥
  • cert.pem:生成的证书

- 监控端

1、存放远程主机证书

将远程主机(业务端)生成的证书保存为 /certs/{host}/{ca,cert,key}.pem

多个远程主机使用逗号进行间隔,如:

DOZZLE_REMOTE_HOST: tcp://172.0.0.72:2376|node1.host,tcp://172.0.0.73:2376|node2.host

2、用户管理

Dozzle 用户配置文件保存路径: /data/users.yml.

1
2
3
4
5
6
7
users:
# "admin" here is username
admin:
name: "Admin"
# Just sha-256 which can be computed with "echo -n password | shasum -a 256"
password: "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8"
email: me@email.net
  • 使用echo -n 'secret-password' | shasum -a 256` or `echo -n 'secret-password' | sha256sum 生成密码字符串的sha256哈希值。

3、启动Dozzle服务

  • 生成 compose.yml文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
version: "3"
services:
dozzle:
image: amir20/dozzle
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./certs:/certs
- ./data:/data
ports:
- 8080:8080
environment:
DOZZLE_AUTH_PROVIDER: simple
DOZZLE_HOSTNAME: monitor.host
DOZZLE_REMOTE_HOST: tcp://172.0.0.72:2376|node1.host,tcp://172.0.0.73:2376|node.host
healthcheck:
test: ["CMD", "/dozzle", "healthcheck"]
interval: 3s
timeout: 30s
retries: 5
start_period: 30s

  • 启动容器服务 docker compose up -d

image-20240223164323001

image-20240223164305686

image-20240223164245112