使用 Docker 安装
Dieser Inhalt ist noch nicht in deiner Sprache verfügbar.
DumbMonit 以单个容器运行:dumbmonit 服务器(采集、API、
告警、Web UI)会启动自己的 VictoriaMetrics 来存储时间序列;该
二进制文件已包含在镜像中。配置和状态存放在内嵌的 SQLite
数据库中。一个卷 /data 保存数据库、实例密钥和
时间序列。
- 带有 Compose 插件的 Docker Engine(
docker compose version可正常运行)。 - 一个能够访问你要监控的监控项的机器。监控项不需要能访问 这台机器,代理除外,它们会通过 HTTP 将 测量数据推送到服务器。
- 主机上的
8080端口空闲,或者使用你选择的其他端口(见下文)。
Compose 文件
Section titled “Compose 文件”这是完整的 docker-compose.yml(不需要 .env 文件);请将它保存在
单独的目录中:
services: dumbmonit: image: ghcr.io/laupernoe/dumbmonit:latest ports: - "8080:8080" volumes: - dumbmonit-data:/data # Or a host directory; on a SELinux host (Fedora, RHEL) add `:Z`: # - ./dumbmonit:/data:Z # environment: # PUID: "1000" # owner of the files in /data (default 65532) # PGID: "1000" restart: unless-stopped stop_grace_period: 30s read_only: true tmpfs: [/tmp] # Starts as root only to give /data to user 65532 (or PUID/PGID), then # drops root for good: a host directory works as it is. Remove `user` and # `cap_add` to run as 65532 from the start (the files must belong to it). user: "0:0" cap_drop: [ALL] cap_add: [CHOWN, DAC_READ_SEARCH, SETUID, SETGID] security_opt: ["no-new-privileges:true"] sysctls: net.ipv4.ping_group_range: "0 2147483647"
volumes: dumbmonit-data: name: dumbmonit-data然后启动它:
docker compose up -d会拉取已发布的镜像;只读文件系统、capability、PUID/PGID 以及 ping_group_range
sysctl 的作用,参见权限与数据目录和
无需 capability 的 ICMP ping。各项选项(端口、
密钥、保留期、外部 VictoriaMetrics、截图)都是
由你自己添加的环境变量。
内嵌的 VictoriaMetrics
Section titled “内嵌的 VictoriaMetrics”镜像中包含 VictoriaMetrics 二进制文件(/victoria-metrics-prod,来自
victoriametrics/victoria-metrics:v1.152.0)。当未设置 DUMBMONIT_VM_URL 时,
服务器会将它作为子进程启动,监听 127.0.0.1:8428,
把时间序列存放在 /data/vm 下,将其日志行转发到自己的日志中,
在它崩溃时以退避方式重启,并在关闭时停止它。不会发布任何端口:
该端口只存在于容器内部。
有两个变量值得了解:DUMBMONIT_VM_RETENTION(默认 12 个月;
30d 或 2y 也可以)和 DUMBMONIT_VM_MEMORY(256MB,
其缓存的预算;数百台主机时请调大)。其余内容见
配置参考。
若要使用你已有的 VictoriaMetrics,请将 DUMBMONIT_VM_URL 设置为其
地址(http://host:8428):此时不会启动内嵌的那个,
/data/vm 保持为空。
打开 https://<your-host>:8080。浏览器会因自签名证书提示一次警告(见 HTTPS and encryption)。全新的实例会显示 /setup 界面,
你可以在这里创建第一个管理员账户(密码至少 12
个字符)。
该界面首先会要求输入设置码。在尚不存在管理员时, 服务器会在启动时于日志中打印一次性代码:
docker compose logs dumbmonit | grep -A1 "setup code" First-run setup code: K7XQ4-M9PRT它用来证明创建管理员账户的人正在运行这台服务器,这样网络上的其他人就无法
抢先占用一个全新的实例。该代码只保存在内存中,在存在管理员之前每次重启都会
变化,输错会受到速率限制。对于自动化部署,可设置
DUMBMONIT_SETUP_CODE 来自行指定。

然后添加你的第一个监控项:参见添加第一个监控项。
一切都通过环境变量完成;没有任何一个是必需的。把需要的变量添加到服务的
environment: 下,如高级选项所示。
| 变量 | 默认值 | 作用 |
|---|---|---|
DUMBMONIT_BIND | 0.0.0.0:8080 | 容器内的监听地址。 |
PUID / PGID | 65532 | 配合 user: "0:0" 时:服务器运行时使用的用户和组,也是 /data 中文件的所有者(详情)。DUMBMONIT_PUID / DUMBMONIT_PGID 同样有效。 |
DUMBMONIT_DATA_DIR | /data | SQLite 数据库(dumbmonit.db)、实例密钥(secret.key)以及内嵌 VictoriaMetrics 的数据(vm/)。 |
DUMBMONIT_VM_URL | (未设置) | 外部 VictoriaMetrics 的 URL。设置后不会启动内嵌的那个。 |
DUMBMONIT_VM_RETENTION | 12 | 内嵌 VictoriaMetrics 的保留期:以月为单位,或 30d、2y。 |
DUMBMONIT_VM_MEMORY | 256MB | 内嵌 VictoriaMetrics 缓存的内存预算。 |
DUMBMONIT_VM_LISTEN | 127.0.0.1:8428 | 内嵌 VictoriaMetrics 的监听地址,位于容器内部。 |
DUMBMONIT_SECRET | (自动生成) | 用于加密监控项凭据和令牌的实例密钥。 |
DUMBMONIT_MAX_CONCURRENT_PROBES | 64 | 并发探测数,所有采集器合计。 |
DUMBMONIT_PROBE_TIMEOUT_SECS | 10 | 单次探测的最长持续时间。 |
DUMBMONIT_FLUSH_INTERVAL_SECS | 5 | 写入 VictoriaMetrics 的周期。 |
DUMBMONIT_LOG | info | 日志过滤器(tracing 语法,例如 debug、dumbmonit=trace)。 |
DUMBMONIT_AGENT_DIR | /agents | 通过 /download/… 提供的代理二进制文件。 |
DUMBMONIT_RESET_PASSWORD | (空) | 设为 1 可在启动时清除密码和所有会话。 |
DUMBMONIT_SETUP_CODE | (自动生成) | 在尚无管理员时,/setup 要求输入的设置码。未设置时,每次启动都会在日志中打印一个随机代码。 |
DUMBMONIT_COOKIE_SECURE | (关闭) | 在 TLS 反向代理之后设为 1,可将会话 cookie 标记为 Secure。 |
DUMBMONIT_ALERT_INTERVAL_SECS | 30 | 告警评估周期(不得低于 10)。 |
DUMBMONIT_ALERT_HISTORY_DAYS | 90 天 | 告警历史的保留期。关于其单位的注意事项,请参见配置参考。 |
DUMBMONIT_BACKUP_ENABLED | 开启 | 将数据库按计划本地备份到 /data/backups/。可用 DUMBMONIT_BACKUP_DIR、_INTERVAL_HOURS(24)和 _KEEP(7)调整;参见备份与恢复。 |
完整列表及详细说明见配置参考。
更名之前的 EZYMONIT_* 名称仍会作为后备被读取;参见
升级。
SNMP 团体名、密码和 API 令牌使用 AES-256-GCM 加密,密钥
由实例密钥派生。首次启动时,DumbMonit 会在 /data/secret.key
(位于 dumbmonit-data 卷内)中生成该密钥。
如果你更愿意自己掌管密钥,可以改在 Compose 文件中设置 DUMBMONIT_SECRET
(示例;32 个或更多随机字符)。请把它保存在你的密码管理器中。
docker compose pulldocker compose up -d数据库迁移会在启动时运行。VictoriaMetrics 的数据不受影响。
现有的 docker-compose.yml 无需修改即可继续使用:镜像仍以用户 65532 运行。新文件增加了
user: "0:0" 和一行 cap_add,使主机目录无需准备即可使用(权限);
如果想改用绑定挂载,请复制这两行。
从 EzyMonit 以及双容器部署升级
Section titled “从 EzyMonit 以及双容器部署升级”DumbMonit 在 2026 年 9 月之前叫作 EzyMonit,并以两个容器运行,
即服务器和一个单独的 victoriametrics 服务。升级需要把旧项目的数据
一次性迁移到新卷中。旧项目名为
ezymonit(其卷为 ezymonit_ezymonit-data 和 ezymonit_vm-data;
可用 docker volume ls 确认)。在旧目录中执行:
docker compose down然后,使用新的 docker-compose.yml:
docker volume create dumbmonit-datadocker run --rm -v ezymonit_ezymonit-data:/from -v dumbmonit-data:/to alpine cp -a /from/. /to/docker run --rm -v ezymonit_vm-data:/from -v dumbmonit-data:/to alpine sh -c 'mkdir -p /to/vm && cp -a /from/. /to/vm/'docker compose up -d旧的 VictoriaMetrics 数据目录与内嵌版本使用的布局相同:
无需转换。另一种做法是继续使用外部的 VictoriaMetrics,
并让 DUMBMONIT_VM_URL 指向它。
服务器在首次启动时会自行处理以下内容:
EZYMONIT_*变量仍会作为后备被读取,每个变量在启动时 产生一条警告(EZYMONIT_X is deprecated, use DUMBMONIT_X)。/data/ezymonit.db会被重命名为dumbmonit.db。- 代理令牌
ezym_…继续有效;新令牌为dmon_…。代理会继续 推送数据;方便时在每台机器上重新运行安装命令,它会 原地迁移旧服务。 - 会话 cookie 的名称已更改:所有人需要重新登录一次。浏览器的 主题偏好会被保留。
它不会处理的内容:指标前缀从 ezymonit_ 改为
dumbmonit_,不提供兼容。旧的序列会以旧名称留在 VictoriaMetrics 中,
并随保留期过期;图表和内置规则从升级时起重新开始。
引用 ezymonit_… 指标的自定义告警规则必须手动修改。
一个命名卷 dumbmonit-data 保存了所有内容:
| 路径 | 内容 |
|---|---|
dumbmonit.db | 监控项、规则、渠道、告警状态、会话。 |
secret.key | 实例密钥。 |
backups/ | 计划的本地备份:数据库和密钥的副本,默认每天一次,保留七份。 |
vm/ | VictoriaMetrics 时间序列(默认保留 12 个月)。 |
DumbMonit 会按计划备份自己的数据库,也可以将整个
配置——监控项、凭据、规则、渠道——导出为一个用你自选的密码短语
加密的文件,并可恢复到全新的实例上。
两者都在**备份与恢复**中介绍,其中还包括升级前该做什么,
以及那条值得读两遍的关于 secret.key 的规则。
若要归档卷本身(包括图表),请停止整个栈并将其打包:
docker compose stopdocker run --rm -v dumbmonit-data:/data -v "$PWD:/backup" alpine \ tar czf /backup/dumbmonit-data.tgz -C /data .docker compose start恢复时,创建卷,用同样的方式把归档解压到其中,然后执行
docker compose up -d。
如果空间紧张,--exclude=./vm 可以让归档保持较小:数据库和
密钥就是全部设置,vm/ 只是图表。
上面的 Compose 文件有意不含任何变量。要更改某项设置,请在 docker-compose.yml
的 dumbmonit: 下添加一个 environment: 块(或在其中加一行),然后再次运行
docker compose up -d。容器会被重新创建;数据卷保持不变。
更改端口。 修改映射的左侧;容器内仍监听 8080:
ports: - "8099:8080"自己的密钥,代替 /data/secret.key 中生成的那个。它用于加密监控项凭据:
丢失它意味着要重新输入每一个凭据。
environment: DUMBMONIT_SECRET: replace-me-with-32-random-characters内嵌 VictoriaMetrics 的保留期与内存(月数,或 30d / 2y;几十个监控项的
homelab 用 256 MB 就够):
environment: DUMBMONIT_VM_RETENTION: "24" DUMBMONIT_VM_MEMORY: 512MB外部 VictoriaMetrics;此时不会启动内嵌的那个:
environment: DUMBMONIT_VM_URL: http://victoriametrics:8428忘记密码。 添加下面这一行,运行 docker compose up -d,在界面中重新创建
第一个管理员(监控项、规则和渠道都会保留),然后删除这一行,再运行一次
docker compose up -d:
environment: DUMBMONIT_RESET_PASSWORD: "1"网站变更截图:服务器旁的无头 Chromium;见下文网站变更截图。
更多变量:配置参考。
网站变更截图
Section titled “网站变更截图”网站变更监视器始终会比较页面的可见文本。要为每个新版本保存截图,需要一个浏览器,而 DumbMonit 镜像不含浏览器:无头 Chromium 作为第二个服务运行,DUMBMONIT_BROWSER_URL 告诉服务器在哪里找到它。
将以下几行添加到 docker-compose.yml,然后运行 docker compose up -d:
services: dumbmonit: environment: DUMBMONIT_BROWSER_URL: http://browser:9222 browser: image: chromedp/headless-shell:stable shm_size: 256m restart: unless-stoppedbrowser是服务名;在 Compose 网络中,http://browser:9222会解析到它。没有任何端口被发布:只有 DumbMonit 与它通信。shm_size: 256m:Chromium 在/dev/shm中渲染,Docker 默认的 64 MB 对于长页面太小。- 任何以
--remote-debugging-port启动的 Chromium 都可以;这里使用的镜像是chromedp/headless-shell。
没有浏览器时,其余功能照常工作(文本比较、告警、前后对照副本);快照只是没有图像。只要服务器连不上浏览器,网站变更监控项的表单就会显示一条包含这些行的提示。
如果重启后提示仍然存在,请检查 docker compose logs browser,确认 DUMBMONIT_BROWSER_URL 中的主机名就是服务名,并且两个服务在同一个 Compose 项目中。
UI 和 API 通过同一个端口提供服务,该端口仅支持 HTTPS(普通 HTTP 请求会收到重定向,见 HTTPS and encryption)。因此反向代理必须通过 HTTPS 连接容器(https://dumbmonit:8080),并对该跳关闭证书验证,或信任 DumbMonit 的证书。不使用 WebSocket:
界面通过轮询 API 获取数据,因此任何反向代理都无需特殊
配置即可使用。
monit.example.com { reverse_proxy https://127.0.0.1:8080 { transport http { tls_insecure_skip_verify } }}server { listen 443 ssl; server_name monit.example.com; # ssl_certificate / ssl_certificate_key …
location / { proxy_pass https://127.0.0.1:8080; proxy_ssl_verify off; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; # 代理在故障后会发送补传的批量数据: client_max_body_size 16m; }}当代理终止 TLS 时,请设置 DUMBMONIT_COOKIE_SECURE: "1",使会话
cookie 只通过 HTTPS 发送。仅当每个浏览器都通过 HTTPS 访问 DumbMonit 时才设置它:
浏览器将永远不会回传该 cookie,导致无法登录。
权限与数据目录
Section titled “权限与数据目录”服务器从不以 root 运行。镜像默认以用户 65532:65532 运行,Docker 创建的命名卷本来就属于该用户。
而绑定挂载(./dumbmonit:/data)会保留主机目录的所有者,由 Docker 创建时通常是 root。
这就是上面的 Compose 文件以 root 启动容器(user: "0:0")的原因。服务器只在极短的
一瞬间保持 root:在打开数据库、启动 VictoriaMetrics 或监听网络之前,它把 /data 移交给
65532:65532(只处理属于他人的条目,不跟随符号链接),永久放弃 root,并确认无法再取回。
cap_add 中的四个 capability 仅用于这一步,之后一个也不剩。no-new-privileges 和只读根
文件系统保持开启:/data 和 /tmp 是仅有的可写路径。
选择所有者:PUID 和 PGID。 使用 user: "0:0" 时,指定服务器运行所用的 uid 和 gid;
启动时文件会被移交给它们:
environment: PUID: "1000" PGID: "1000"DUMBMONIT_PUID / DUMBMONIT_PGID 同样有效,且优先。0 会被拒绝。在 Unraid 上,
PUID=99 和 PGID=100 与 appdata 的常见所有者一致。没有 user: "0:0" 时,
PUID/PGID 会被忽略。
没有 user: "0:0" 时(普通的 docker run -v ./data:/data,或 --user 1000:1000),
不会更改任何所有者,/data 必须已经可写。否则服务器会停止,并先建议使用 --user 0:0,
然后建议在主机上对绑定挂载执行 sudo chown -R 65532:65532 ./data,对命名卷则执行:
docker run --rm -v dumbmonit-data:/data alpine chown -R 65532:65532 /dataSELinux 与 Podman
Section titled “SELinux 与 Podman”在 SELinux 处于 enforcing 模式的主机上(Fedora、RHEL、CentOS Stream、
AlmaLinux 等),绑定挂载在带有容器标签之前会被拒绝访问,即使容器内是 root 也
一样。请在卷后加上 :Z;如果其他容器共用该目录,则加 :z:
volumes: - ./dumbmonit:/data:Z否则服务器会停止,并显示 the host enforces SELinux and the volume has no container label。命名卷由 Docker 负责打标签,无需额外操作。
无 root 的 Podman 的工作方式相同,需加上 --user 0:0。容器内的 root 就是主机上你自己的用户,而绑定
挂载中的文件归容器内的 uid 65532 所有,主机上显示为你的某个 sub-uid(按常见的
/etc/subuid 为 165531)。可用 podman unshare ls -l ./dumbmonit 查看。若想让
文件改为归你自己的 uid 所有,请以你自己的身份运行容器;这样不会更改任何所有者:
podman run --userns keep-id --user "$(id -u):$(id -g)" -v ./dumbmonit:/data:Z …无需 capability 的 ICMP ping
Section titled “无需 capability 的 ICMP ping”ping 监控会发送 ICMP echo。它没有使用
原始套接字——那需要 NET_RAW,而授予非 root
容器用户的 capability 本来也用不了——而是使用 ICMP echo 套接字,Linux
允许 net.ipv4.ping_group_range 中列出的组使用它。Compose 文件
在容器自己的网络命名空间内设置了该 sysctl:
services: dumbmonit: sysctls: net.ipv4.ping_group_range: "0 2147483647"主机上不会有任何改变。Docker 20.10 及更高版本会自行在每个
容器中设置此范围;显式写出这几行是为了让它在较旧的引擎和
Podman 上同样生效。没有它时,检查会报告配置错误(显示在
监控项上,不会发送通知),而绝不会误报“主机宕机”。使用 docker run 时,请传入
--sysctl net.ipv4.ping_group_range="0 2147483647"。 只要服务器无法打开 ICMP 套接字,ping 监控项的表单就会显示一条包含这些行的提示。
添加一个演示监控项:它无需任何准备就能产生模拟
测量数据,因此可以立即试用图表、规则和通知。若要获得真实的 SNMP 数据,
运行 Docker 的这台机器通常就足够了——在上面安装
snmpd(apt install snmpd,在 /etc/snmp/snmpd.conf 中允许 Docker
网桥上的 public 团体名),然后添加一台 SNMP 设备,地址填该主机在该网桥上的
地址(默认为 172.17.0.1):配置档案会被自动检测,
接口、内存和进程随即出现。
开发者可以加上 docker-compose.dev.yml 覆盖文件,把内嵌的
VictoriaMetrics 发布到主机的 :8428,以便直接进行 MetricsQL 查询:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up -d