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配置:
yamlversion: "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编辑敏感数据。bashcd 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冲突。
bashsmartctl_exporter --web.listen-address 127.0.0.1:*** --smartctl.fake-data
smartctl_exporter?如果您在帮助他人,可以请求提供上述smartctl命令的输出。使用隐藏的--smartctl.fake-data标志将此数据输入smartctl_exporter。如果smartctl_exporter已在运行,请使用不同的端口;在本例中为***。首先运行collect_fake_json.sh为您的设备收集JSON文件。将请求的JSON文件复制到其中一个假文件中。启动exporter后,可以查询它以查看生成的数据。
bash# 将设备的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:*** --log.level=debug --smartctl.fake-data # 使用curl和grep查询 curl --silent 127.0.0.1:***/metrics | grep -i nvme # 或使用xh和ripgrep xh --body :***/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 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429