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-size1m单个日志文件最大 1MB
--log-opt max-file3保留 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:单个日志文件最大 1MB
  • max-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 可控
Clashlog-level: silent (修改 config.yaml)从源头彻底关闭日志,CPU/I/O 零开销

五、修改配置后的维护操作

1. 修改 Clash 配置后重启容器

# 编辑配置文件
vim ~/clash/config.yaml

# 重启容器使配置生效
podman restart clash

2. 清理已存在的旧日志(可选)

如果容器已经运行很久积累了较多日志,可以通过重建容器来彻底清理:

# 停止并删除容器(注意:数据卷中的配置和数据不受影响)
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/OPodman 日志轮转 (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/adguardhome

clash的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

标签: none

添加新评论