本站支持搜索的镜像仓库:Docker Hub、gcr.io、ghcr.io、quay.io、k8s.gcr.io、registry.gcr.io、elastic.co、mcr.microsoft.com

smartctl_exporter是一个Prometheus exporter,用于将smartctl工具收集的存储设备S.M.A.R.T.统计信息导出为Prometheus可抓取的指标。该镜像封装了smartctl_exporter应用程序,便于在Docker环境中部署和运行。
smartmontools >= 7.0,因为JSON导出功能在7.0版本中引入如果未使用--smartctl.device标志,exporter将扫描系统中的可用设备。
usage: smartctl_exporter [<flags>] Flags: -h, --help 显示上下文相关帮助(也可尝试--help-long和--help-man)。 --smartctl.path="/usr/sbin/smartctl" smartctl二进制文件路径 --smartctl.interval=60s smartctl轮询间隔 --smartctl.rescan=10m 重新扫描新设备/已移除设备的间隔。如果间隔小于1秒,则不进行重新扫描。 如果使用smartctl.device配置了任何设备,也不会进行重新扫描。 --smartctl.device=SMARTCTL.DEVICE ... 要监控的设备(可重复) --smartctl.device-exclude="" 自动扫描中要排除的设备正则表达式。(与device-include互斥) --smartctl.device-include="" 自动扫描中要包含的设备正则表达式。(与device-exclude互斥) --web.telemetry-path="/metrics" 公开指标的路径 --web.systemd-socket 使用systemd套接字激活监听器代替端口监听器(仅Linux)。 --web.listen-address=:9633 ... 公开指标和Web界面的地址。可重复指定多个地址。 --web.config.file="" [实验性] 可启用TLS或身份验证的配置文件路径。 --log.level=info 仅记录给定严重性或更高级别的消息。选项:[debug, info, warn, error] --log.format=logfmt 日志消息的输出格式。选项:[logfmt, json] --version 显示应用程序版本。
最小功能的docker-compose.yml配置:
version: "3" services: smartctl-exporter: image: prometheuscommunity/smartctl-exporter privileged: true user: root ports: - "9633:9633"
该exporter支持TLS加密和基本身份验证。
要使用TLS和/或基本身份验证,需要通过--web.config.file参数传递配置文件。文件格式在exporter-toolkit仓库中有详细描述。
smartctl_exporter使用smartctl的JSON输出向Prometheus提供数据。如果数据不正确,请查看smartctl的原始数据以确定问题应报告给smartmontools上游还是本项目。一般来说,smartctl_exporter不会修改传输中的数据。如果数据在smartctl中缺失,那么在smartctl_exporter中也不应出现。如果smartctl提供的数据不正确,应向上游报告。对于因smartctl提供的无效或缺失数据导致smartctl_exporter中出现多个无效或不正确数据的情况,需要根据具体情况进行研究。
| - | smartctl数据有效 | smartctl数据缺失 | smartctl数据无效/不正确 |
|---|---|---|---|
| smartctl_exporter数据有效 | 正常 | N/A | N/A |
| smartctl_exporter数据缺失 | smartctl_exporter问题 | 向上游smartmontools报告 | 向上游smartmontools报告 |
| smartctl_exporter数据无效 | smartctl_exporter问题 | smartctl_exporter问题并向上游报告 | 向上游smartmontools报告 |
S.M.A.R.T.属性在smartctl.go中进行映射。每个函数都有一个prometheus.MustNewConstMetric或类似函数,第一个参数是指标名称。在metrics.go中查找指标名称,以了解exporter如何显示信息。这可能听起来很技术,但对于理解数据如何从smartctl流向smartctl_exporter再到Prometheus至关重要。
如果数据看起来不正确,请查看Smartmontools常见问题解答(FAQ),您的问题可能已有答案。如果仍有疑问,请提交issue。
按照以下步骤收集smartctl数据以进行故障排除。如果您有独特的驱动器/数据/边缘情况并希望"***"数据,请提交包含已编辑JSON文件的PR。
scripts/collect-smartctl-json.sh将所有驱动器导出到当前目录下的smartctl-data目录。scripts/redact_fake_json.py编辑敏感数据。cd scripts ./collect-smartctl-json.sh ./redact-fake-json.py smartctl-data/*.json
smartctl_exporter可以使用本地JSON数据运行。设备名称从机器中的实际设备获取,而数据重定向到debug目录。使用实际设备名称将JSON数据保存在debug目录中,保持1:1对应关系。如果有3个设备sda、sdb和sdc,smartctl_exporter将需要3个文件:debug/sda.json、debug/sdb.json和debug/sdc.json。
准备好"假设备"(JSON文件)后,通过命令行传递隐藏的--smartctl.fake-data开关运行exporter。指定端口以避免与默认端口上已存在的smartctl_exporter冲突。
smartctl_exporter --web.listen-address 127.0.0.1:19633 --smartctl.fake-data
smartctl_exporter?如果您在帮助他人,可以请求提供上述smartctl命令的输出。使用隐藏的--smartctl.fake-data标志将此数据输入smartctl_exporter。如果smartctl_exporter已在运行,请使用不同的端口;在本例中为19633。首先运行collect_fake_json.sh为您的设备收集JSON文件。将请求的JSON文件复制到其中一个假文件中。启动exporter后,可以查询它以查看生成的数据。
# 将设备的JSON文件转储到debug/目录 ./collect_fake_json.sh # 将测试JSON复制到debug/中的一个文件 cp extracted-from-above-sda.json debug/sda.json # 确保拥有最新版本 go build # 使用不同的端口,以防smartctl_exporter已在运行 sudo ./smartctl_exporter --web.listen-address=127.0.0.1:19633 --log.level=debug --smartctl.fake-data # 使用curl和grep查询 curl --silent 127.0.0.1:19633/metrics | grep -i nvme # 或使用xh和ripgrep xh --body :19633/metrics | rg nvme
一位博主曾提出同样的问题,并在smartmontools上提交了工单。以下是他们的回应:smartctl需要以root身份运行。
RFE: 为sat/scsi/ata设备添加O_RDRW模式
根据当前内核源代码中的
blk_verify_command()函数(参见block/scsi_ioctl.c), 如果设备以root(或CAP_SYS_RAWIO)身份打开,O_RDONLY或O_RDWR没有区别。
blk_set_cmd_filter_defaults()函数中列出的SCSI命令显示,对于非root用户,某些smartctl -d scsi功能可能使用O_RDONLY工作。更多功能可能使用O_RDWR工作。但是
smartctl -d sat(用于访问SATA设备)根本无法工作,因为SCSI命令ATA_12和ATA_16 (参见scsi_proto.h) 始终对非root用户阻塞。
来自smartmontools FAQ:My NVMe drive is not in the smartctl/smartd database
SCSI/SAS和NVMe驱动器不提供类似ATA/SATA的SMART属性。 因此驱动器数据库不包含这些驱动器的任何条目。 未来可能会改变,因为某些驱动器通过供应商特定命令提供类似信息(参见ticket #870)。
smartmontools还有一个关于NVMe设备的wiki页面。
请查看他们的FAQ:How to create a bug report。
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录方式配置轩辕镜像加速服务,包含7个详细步骤
在 Linux 系统上配置轩辕镜像源,支持主流发行版
在 Docker Desktop 中配置轩辕镜像加速,适用于桌面系统
在 Docker Compose 中使用轩辕镜像加速,支持容器编排
在 k8s 中配置 containerd 使用轩辕镜像加速
在宝塔面板中配置轩辕镜像加速,提升服务器管理效率
在 Synology 群晖NAS系统中配置轩辕镜像加速
在飞牛fnOS系统中配置轩辕镜像加速
在极空间NAS中配置轩辕镜像加速
在爱快ikuai系统中配置轩辕镜像加速
在绿联NAS系统中配置轩辕镜像加速
在威联通NAS系统中配置轩辕镜像加速
在 Podman 中配置轩辕镜像加速,支持多系统
配置轩辕镜像加速9大主流镜像仓库,包含详细配置步骤
无需登录即可使用轩辕镜像加速服务,更加便捷高效
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429