AdGuardHome&Clash容器日志优化笔记
Podman 部署 AdGuardHome & Clash 日志优化笔记(针对 1核1G 香橙派)
一、核心优化目标
- 降低 I/O 负载:减少频繁的小日志写入对 SD 卡寿命和性能的影响。
- 降低 CPU 负载:减少日志格式化、轮转等操作对 1 核 CPU 的占用。
- 保留必要排错能力:在资源受限的情况下,维持基本的故障排查手段。
二、AdGuardHome 容器日志优化
方案一:Podman 容器日志限制(推荐)
在 podman run 命令中添加日志轮转参数,限制容器日志的总大小和文件数量。
podman run -d \
--name adguardhome \
--log-opt max-size=1m \
--log-opt max-file=3 \
--restart=always \
-v ./adguard/work:/opt/adguardhome/work \
-v ./adguard/conf:/opt/adguardhome/conf \
docker.io/adguard/adguardhome:latest参数说明:
| 参数 | 值 | 说明 |
|---|---|---|
--log-opt max-size | 1m | 单个日志文件最大 1MB |
--log-opt max-file | 3 | 保留 3 个轮转文件,总计最多 3MB 日志 |
效果:日志 I/O 被控制在极低水平,同时仍可通过 podman logs 查看最近 3MB 的日志用于排错。
方案二:彻底关闭容器日志(零 I/O)
如果完全不需要查看容器日志,可使用 none 日志驱动。
podman run -d \
--name adguardhome \
--log-driver none \
...其他参数效果:容器所有标准输出/错误输出被丢弃,零 I/O 开销,但无法使用 podman logs。
三、Clash 日志优化
首选方案:从源头关闭应用日志(最推荐)
Clash 的配置文件 config.yaml 中有一个 log-level 参数,将其设置为 silent 即可完全关闭日志输出。
配置示例:
# 设置为 silent 后,Clash 不再产生任何应用日志
log-level: silent参数说明:log-level 有 5 个可选值:
| 级别 | 说明 |
|---|---|
silent | 静默模式,完全不输出日志 |
info | 输出信息级别日志 |
warning | 输出警告级别日志 |
error | 仅输出错误级别日志 |
debug | 输出调试级别日志(最详细) |
备选方案:容器层面限制(双重保险)
如果希望保留一定的日志能力,或无法修改 Clash 配置文件,可在 podman run 时添加日志限制:
podman run -d \
--name clash \
--log-opt max-size=1m \
--log-opt max-file=1 \
...其他参数max-size=1m:单个日志文件最大 1MBmax-file=1:只保留 1 个文件,总日志量不超过 1MB
四、方案对比与选择建议
| 方案 | 操作难度 | I/O 优化效果 | 日志保留能力 | 推荐度 |
|---|---|---|---|---|
| AdGuardHome + Podman 日志轮转 | 低 | 好 | 保留最近 3MB | ⭐⭐⭐ (首选) |
| AdGuardHome + none 驱动 | 低 | 极好 | 无 | ⭐⭐ (备选) |
| Clash + log-level: silent | 低 | 极好 | 无 | ⭐⭐⭐ (首选) |
| Clash + Podman 日志轮转 | 低 | 好 | 保留少量 | ⭐⭐ (备选) |
针对 1核1G 香橙派的最终推荐
| 容器 | 推荐配置 | 理由 |
|---|---|---|
| AdGuardHome | --log-opt max-size=1m --log-opt max-file=3 | 保留少量日志用于排错,I/O 可控 |
| Clash | log-level: silent (修改 config.yaml) | 从源头彻底关闭日志,CPU/I/O 零开销 |
五、修改配置后的维护操作
1. 修改 Clash 配置后重启容器
# 编辑配置文件
vim ~/clash/config.yaml
# 重启容器使配置生效
podman restart clash2. 清理已存在的旧日志(可选)
如果容器已经运行很久积累了较多日志,可以通过重建容器来彻底清理:
# 停止并删除容器(注意:数据卷中的配置和数据不受影响)
podman stop adguardhome clash
podman rm adguardhome clash
# 使用新的日志限制参数重新创建容器
# (参考上面的 run 命令)3. 查看容器日志占用情况
# 查看容器日志文件大小(rootless Podman 默认路径)
ls -lh ~/.local/share/containers/storage/overlay-containers/*/userdata/ctr.log六、总结
| 优化目标 | 解决方案 |
|---|---|
| 减少 AdGuardHome 日志 I/O | Podman 日志轮转 (max-size=1m max-file=3) |
| 彻底关闭 Clash 日志 | 修改 log-level: silent |
| 保持基础排错能力 | 保留 AdGuardHome 的 3MB 日志轮转 |
| 零 I/O 极端需求 | 使用 --log-driver none |
完成以上配置后,日志产生的 I/O 和 CPU 负载将大幅降低,有效保护香橙派的 SD 卡寿命,同时释放更多资源给 DNS 解析和代理服务本身。
adguardhome podman run命令
podman run -d --name adguardhome \
-p 192.168.1.9:53:53/tcp \
-p 192.168.1.9:53:53/udp \
-p 3000:3000/tcp \
-p 8081:80/tcp \
-v /data/adguard/workdir:/opt/adguardhome/work:Z \
-v /data/adguard/confdir:/opt/adguardhome/conf:Z \
--log-driver none \
-e TZ=Asia/Shanghai \
docker.1ms.run/adguard/adguardhomeclash的config.yaml自动更新调整lan和日志sh文件
#!/bin/bash
cat config.yaml | grep "host:" | wc
# 配置参数
URL="https://update.glados-config.com/mihomo/****/glados.yaml"
CONFIG="config.yaml"
BACKUP="config$(date +%Y%m%d%H%M%S).bak"
# 备份原文件
[ -f "$CONFIG" ] && cp "$CONFIG" "$BACKUP" && echo "已备份: $BACKUP"
# 尝试使用wget或curl下载
if command -v wget &> /dev/null; then
wget -O "$CONFIG" "$URL" && echo "更新成功!" || echo "下载失败"
elif command -v curl &> /dev/null; then
curl -o "$CONFIG" "$URL" && echo "更新成功!" || echo "下载失败"
else
echo "错误:未找到wget或curl,无法下载文件"
exit 1
fi
sleep 4
sed -i 's/allow-lan: false/allow-lan: true/' config.yaml
sed -i 's/log-level: info/log-level: silent/' config.yaml
cat config.yaml | grep "host:" | wc
podman stop -t 0 clash && podman start clash
ls -t config*.bak | tail -n +5 | xargs -r rm