
prometheuscommunity/smartctl-exportersmartctl_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。

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务