如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
smartd S.M.A.R.T监控的WebUI
Scrutiny 仍在开发中,尚有一些不完善之处。
如果您运行的服务器有多个硬盘,您可能已经熟悉S.M.A.R.T和smartd守护进程。如果不熟悉,这是一个非常出色的开源项目,描述如下:
smartd> smartd 是一个守护进程,用于监控许多ATA、IDE和SCSI-3硬盘中内置的自我监控、分析和报告技术(S.M.A.R.T)系统。S.M.A.R.T的目的是监控硬盘的可靠性,预测硬盘故障,并执行不同类型的硬盘自检。
smartd是一个守护进程,用于监控许多ATA、IDE和SCSI-3硬盘中内置的自我监控、分析和报告技术(S.M.A.R.T)系统。S.M.A.R.T的目的是监控硬盘的可靠性,预测硬盘故障,并执行不同类型的硬盘自检。
这些S.M.A.R.T硬盘自检可以帮助您在硬盘导致永久性数据丢失之前检测并更换故障硬盘。然而,smartd存在一些问题:
Scrutiny是一个硬盘健康仪表板和监控解决方案,将制造商提供的S.M.A.R.T指标与实际故障率相结合。
Scrutiny是一个简单但专注的应用程序,具有以下几个核心功能:
Scrutiny 运行后,你可以在浏览器中打开 http://localhost:8080 查看仪表盘。
http://localhost:8080如果你使用的是 omnibus 镜像,收集器(collector)应该已经运行,仪表盘会显示 Scrutiny 检测到的所有驱动器。收集器默认配置为每天运行一次,但你可以通过运行以下命令手动触发:
对于 Docker Hub/Spoke 部署或手动安装的用户:初始状态下仪表盘为空。首次运行收集器后,你将看到所有硬盘及其当前 S.M.A.R.T 状态的列表。
docker exec scrutiny /opt/scrutiny/bin/scrutiny-collector-metrics run
默认情况下,Scrutiny 在 /opt/scrutiny/config 目录中查找其 YAML 配置文件。
/opt/scrutiny/config有两个可用的配置文件:
scrutiny.yaml- 收集器配置:collector.yaml,参考 example.collector.yaml。
collector.yaml这两个文件都不是必需的,但如果提供,可以配置 Scrutiny 的功能。遗憾的是,Cron 计划任务无法通过 collector.yaml 配置(因为收集器二进制文件需要由调度程序/cron 触发)。不过,如果你使用官方的 ghcr.io/analogj/scrutiny:latest-collector 或 ghcr.io/analogj/scrutiny:latest-omnibus Docker 镜像,可以通过 COLLECTOR_CRON_SCHEDULE 环境变量覆盖默认的 Cron 计划(默认是每天午夜 - 0 0 * * *)。
collector.yaml``ghcr.io/analogj/scrutiny:latest-collector``ghcr.io/analogj/scrutiny:latest-omnibus``COLLECTOR_CRON_SCHEDULE``0 0 * * *docker run -e COLLECTOR_CRON_SCHEDULE="0 0 * * *" ...
docker run -e COLLECTOR_CRON_SCHEDULE="0 0 * * *" ...
Scrutiny 支持通过以下服务发送 S.M.A.R.T 设备故障通知:
有关示例,请查看 example.scrutiny.yml 中的 notify.urls 部分。
notify.urls有关更多信息和故障排除,请参阅 TROUBLESHOOTING_NOTIFICATIONS.md 文件。
你可以通过向通知健康检查 API 发送空负载来测试通知配置是否正确。
curl -X POST http://localhost:8080/api/health/notify
Scrutiny 提供了多种方法来将日志级别更改为调试模式并生成日志文件。
你可以使用环境变量为 Web 服务器启用调试日志和/或日志文件:
DEBUG=true
SCRUTINY_LOG_FILE=/tmp/web.log
你也可以在配置文件中配置日志级别和日志文件:
log:
file: '/tmp/web.log'
level: DEBUG
如果不使用 Docker,你可以在启动 Web 服务器时传递 CLI 参数:
scrutiny start --debug --log-file /tmp/web.log
你可以使用环境变量为收集器启用调试日志和/或日志文件:
DEBUG=true
COLLECTOR_LOG_FILE=/tmp/collector.log
如果不使用 Docker,你可以在启动收集器时传递 CLI 参数:
scrutiny-collector-metrics run --debug --log-file /tmp/collector.log
| 架构名称 | 二进制文件 | Docker | 说明 |
|---|---|---|---|
| linux-amd64 | ✅ | ✅ | |
| linux-arm-5 | ✅ | ||
| linux-arm-6 | ✅ | ||
| linux-arm-7 | ✅ | 仅 Web/收集器,参见 #236 | |
| linux-arm64 | ✅ | ✅ | |
| freebsd-amd64 | ✅ | ||
| macos-amd64 | ✅ | ✅ | |
| macos-arm64 | ✅ | ✅ | |
| windows-amd64 | ✅ | 开发中,参见 #15 | |
| windows-arm64 | ✅ |
有关如何开发和贡献到 Scrutiny 代码库的说明,请参阅 CONTRIBUTING.md。
发挥你的能力,然后提交拉取请求(pull request)。我们欢迎拉取请求!
如果你发现文档有不足之处,请帮助我们更新此 README.md。如果你没有时间参与 Scrutiny 的开发,但发现了需要我们了解的问题,请提交 issue。
我们使用 SemVer 进行版本控制。有关可用版本,请参阅此仓库的标签。
Scrutiny 的实现离不开我的 Github 赞助商的支持。
他们看到了一个简单的 Reddit 公告帖子,便决定信任并资助一个素未谋面的开发者。这是一次令人兴奋且无比谦卑的经历。
如果你觉得 Scrutiny 有价值,请考虑支持我的工作。
[!IMPORTANT] 使用
latest-标签存在风险,因为它可能在未经警告的情况下更新您的镜像。最佳实践是固定特定版本。Scrutiny 使用语义化版本标签发布版本,因此您可以使用v0.8.2-omnibus、v0.8-web、v0-collector等标签。有关所有镜像标签的列表,请参见 https://github.com/AnalogJ/scrutiny/pkgs/container/scrutiny/versions?filters%5Bversion_type%5D=tagged
如果您使用 Docker,只需运行以下命令即可快速开始:
完整的 docker-compose 文件请参见 https://github.com/AnalogJ/scrutiny/blob/master/docker/example.omnibus.docker-compose.yml%E3%80%82
docker run -p 8080:8080 -p 8086:8086 --restart unless-stopped \
-v `pwd`/scrutiny:/opt/scrutiny/config \
-v `pwd`/influxdb2:/opt/scrutiny/influxdb \
-v /run/udev:/run/udev:ro \
--cap-add SYS_RAWIO \
--device=/dev/sda \
--device=/dev/sdb \
--name scrutiny \
ghcr.io/analogj/scrutiny:latest-omnibus
/run/udev 是必要的,用于为 Scrutiny 收集器提供访问设备元数据的权限--cap-add SYS_RAWIO 是必要的,用于允许 smartctl 有权限查询设备的 SMART 数据[!NOTE] 如果您有 NVMe 驱动器,还必须添加
--cap-add SYS_ADMIN。参见 issue https://github.com/AnalogJ/scrutiny/issues/26#issuecomment-696817130
--device 条目是必需的,以确保硬盘设备可在容器内访问。ghcr.io/analogj/scrutiny:latest-omnibus 是一个全能镜像,包含 Web 应用服务器(前端和 API)以及 SMART 指标收集器(详见下文)。除了全能镜像(在 latest 标签下可用)外,您还可以以 Hub/Spoke 模式部署,这需要另外 3 个 Docker 镜像:
ghcr.io/analogj/scrutiny:latest-collector - 包含 Scrutiny 数据收集器、smartctl 二进制文件和类 cron 调度器。您可以在每台服务器上运行一个收集器。ghcr.io/analogj/scrutiny:latest-web - 包含 Web UI 和 API。只需一个容器。influxdb:2.8 - InfluxDB 镜像,供 Web 容器用于持久化 SMART 数据。只需一个容器。
参见 docs/TROUBLESHOOTING_INFLUXDB.md完整的 docker-compose 文件请参见 https://github.com/AnalogJ/scrutiny/blob/master/docker/example.hubspoke.docker-compose.yml%E3%80%82
docker run -p 8086:8086 --restart unless-stopped \
-v `pwd`/influxdb2:/var/lib/influxdb2 \
--name scrutiny-influxdb \
influxdb:2.8
docker run -p 8080:8080 --restart unless-stopped \
-v `pwd`/scrutiny:/opt/scrutiny/config \
--name scrutiny-web \
ghcr.io/analogj/scrutiny:latest-web
docker run --restart unless-stopped \
-v /run/udev:/run/udev:ro \
--cap-add SYS_RAWIO \
--device=/dev/sda \
--device=/dev/sdb \
-e COLLECTOR_API_ENDPOINT=http://SCRUTINY_WEB_IPADDRESS:8080 \
--name scrutiny-collector \
ghcr.io/analogj/scrutiny:latest-collector
安装说明请参见 docs/INSTALL_ROOTLESS_PODMAN.md。
有关示例,请查看 example.scrutiny.yml 的 notify.urls 部分。
有关更多信息和故障排除,请参阅 TROUBLESHOOTING_NOTIFICATIONS.md 文件。
您可以通过向通知健康检查 API 发送空负载来测试通知配置是否正确。
curl -X POST http://localhost:8080/api/health/notify
Scrutiny 提供多种方法将日志级别更改为调试模式并生成日志文件。
您可以使用环境变量为 Web 服务器启用调试日志和/或日志文件:
DEBUG=true
SCRUTINY_LOG_FILE=/tmp/web.log
您可以在配置文件中配置日志级别和日志文件:
log:
file: '/tmp/web.log'
level: DEBUG
如果您不使用 Docker,可在启动时向 Web 服务器传递 CLI 参数:
scrutiny start --debug --log-file /tmp/web.log
您可以使用环境变量为收集器启用调试日志和/或日志文件:
DEBUG=true
COLLECTOR_LOG_FILE=/tmp/collector.log
如果您不使用 Docker,可在启动时向收集器传递 CLI 参数:
scrutiny-collector-metrics run --debug --log-file /tmp/collector.log
| 架构名称 | 二进制文件 | Docker |
|---|---|---|
| linux-amd64 | :white_check_mark: | :white_check_mark: |
| linux-arm-5 | :white_check_mark: | |
| linux-arm-6 | :white_check_mark: | |
| linux-arm-7 | :white_check_mark: | 仅 Web/收集器。参见 https://github.com/AnalogJ/scrutiny/issues/236 |
| linux-arm64 | :white_check_mark: | :white_check_mark: |
| freebsd-amd64 | :white_check_mark: | |
| macos-amd64 | :white_check_mark: | :white_check_mark: |
| macos-arm64 | :white_check_mark: | :white_check_mark: |
| windows-amd64 | :white_check_mark: | 开发中,参见 https://github.com/AnalogJ/scrutiny/issues/15 |
| windows-arm64 | :white_check_mark: |
有关如何开发和贡献 Scrutiny 代码库的说明,请参阅 CONTRIBUTING.md。
发挥您的能力,然后提交拉取请求。我们欢迎拉取请求!
如果您发现文档存在不足,请帮助我们更新此 README.md。如果您没有时间参与 Scrutiny 的开发,但发现了我们应该了解的问题,请提交 issue。
我们使用 SemVer 进行版本控制。有关可用版本,请参阅此仓库的标签。
Scrutiny 的实现离不开我的 https://github.com/***/AnalogJ/ 的支持。
他们看到了一篇简单的 https://github.com/***/AnalogJ/%EF%BC%8C%E4%BE%BF%E5%86%B3%E5%AE%9A%E4%BF%A1%E4%BB%BB%E5%B9%B6%E8%B5%84%E5%8A%A9%E4%B8%80%E4%BD%8D%E7%B4%A0%E6%9C%AA%E8%B0%8B%E9%9D%A2%E7%9A%84%E5%BC%80%E5%8F%91%E8%80%85%E3%80%82%E8%BF%99%E6%98%AF%E4%B8%80%E6%AE%B5%E4%BB%A4%E4%BA%BA%E6%BF%80%E5%8A%A8%E4%B8%94%E6%97%A0%E6%AF%94%E8%B0%A6%E5%8D%91%E7%9A%84%E7%BB%8F%E5%8E%86%E3%80%82
如果您认为 Scrutiny 有价值,请考虑 https://github.com/***/AnalogJ/%E3%80%82
来自真实用户的反馈,见证轩辕镜像的优质服务