Copyright (C) 2021 Rafael Leira, Naudit HPCN S.L.
pySMART-exporter is a Python Prometheus exporter for collecting and exposing S.M.A.R.T. metrics of storage devices. It leverages the pySMART library and integrates Prometheus client library functionalities for HTTP publication or file-based metric exports.
- Collects S.M.A.R.T. metrics from storage devices.
- Supports Prometheus integration via HTTP or text-based node collector files.
- Includes support for various storage interfaces, including NVMe attributes and diagnostics.
The pySMART-exporter can be installed via PyPI:
python -m pip install pySMART-exporterEnsure that smartctl from the smartmontools package is installed, as it is a prerequisite. For most Linux distributions, use your package manager:
sudo apt-get install smartmontools
# or
sudo yum install smartmontoolsThe exporter supports two modes: server mode (HTTP) and file mode (node exporter textfile). It should run as a privileged user to access disk information.
To run the exporter in server mode, execute the following command:
pysmart_exporter -l 0.0.0.0:9099Then configure Prometheus to scrape metrics from the endpoint.
To generate a one-time metric file for use with a Prometheus node exporter:
pysmart_exporter -f /path/to/output/file.txt -1To continuously generate metric files at a set interval (e.g., 60 seconds):
pysmart_exporter -f /path/to/output/file.txt -i 60Below is a sample of the metrics exposed by pySMART-exporter:
# HELP pysmart_info PySMART metric info
# TYPE pysmart_info gauge
pysmart_info{device="nvme0",firmware="ADHA0101",interface="nvme",model="KBG30ZMV256G TOSHIBA",rotation="None",serial="*********12P",size="256000000000",size_raw="256 GB",smart_capable="True",smart_enabled="True",ssd="True"} 1.0
# HELP pysmart_assessment PySMART metric assessment
# TYPE pysmart_assessment gauge
pysmart_assessment{device="nvme0",interface="nvme",pysmart_assessment="PASS"} 1.0
# HELP pysmart_temperature PySMART metric temperature
# TYPE pysmart_temperature gauge
pysmart_temperature{device="nvme0",interface="nvme"} 44.0
# HELP pysmart_size PySMART metric size
# TYPE pysmart_size gauge
pysmart_size{device="nvme0",interface="nvme"} 2.56e+011
# HELP pysmart_test_capabilities PySMART metric test_capabilities
# TYPE pysmart_test_capabilities gauge
pysmart_test_capabilities{device="nvme0",interface="nvme",pysmart_test_capabilities="short"} 1.0
| Option | Description |
|---|---|
-f, --textfile-name |
Path to the file where metrics will be stored for node collection. |
-l, --listen |
Host and port to listen on in HTTP server mode (e.g., 0.0.0.0:9417). |
-i, --interval |
Interval (in seconds) between metric updates. Default: 60. |
-1, --oneshot |
Run only once and exit (useful for cron jobs). |
-q, --quiet |
Suppress error messages and warnings. |
--include |
Comma-separated list of devices to include (e.g., nvme0,/dev/sda). |
--exclude |
Comma-separated list of devices to exclude. |
--metric-prefix |
Custom prefix for metrics. Default: pysmart. |
--metrics |
Comma-separated list of specific metrics to export (e.g., temperature,size,assessment_passed). |
| Metric Name | Type | Description | Labels |
|---|---|---|---|
pysmart_info |
info |
General information about the disk, including model, firmware, size, and other static attributes. | device, interface, model, serial, firmware, rotation, size_raw, size, ssd, smart_capable, smart_enabled, vendor, sector_size, and more. |
pysmart_assessment_passed |
gauge |
Assessment of the disk's health. 1 for PASS, 0 otherwise. |
device, interface |
pysmart_temperature |
gauge |
Current temperature of the disk in Celsius. | device, interface |
pysmart_size |
gauge |
Disk size in bytes. | device, interface |
pysmart_attribute_value |
gauge |
SMART attribute values such as error counts, read/write metrics, etc. | device, name (attribute name), num, type, flags, updated, whenfailed, and more depending on attribute. |
pysmart_attribute_thresh |
gauge |
Threshold values for SMART attributes. | Similar to pysmart_attribute_value |
pysmart_attribute_worst |
gauge |
The worst recorded value for a given SMART attribute. | Similar to pysmart_attribute_value |
pysmart_attribute_raw |
gauge |
The raw value for a SMART attribute. | Similar to pysmart_attribute_value |
pysmart_diagnostics_* |
gauge |
Disk diagnostic statistics, including errors and other health-related data. | device, interface |
pysmart_test_capabilities |
state |
Types of self-tests supported by the disk (e.g., short, long, offline). | device, interface |
pysmart_test |
gauge |
Details about completed or pending disk self-tests. | device, type (test type), status, hours, num, and other self-test details. |
pySMART-exporter is available on PyPI and installable via pip::
python -m pip install pySMART-exporter
The only external (non-python) dependency is the smartctl component of the smartmontools package. This should be pre-installed in most Linux distributions, or it can be obtained through your package manager. Likely one of the following::
apt-get install smartmontools
or
yum install smartmontools
This program is distributed under the terms of the license specified in the LICENSE file.