A Prometheus PySMART exporter
Project description
pySMART-exporter
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.
Features
- 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.
Installation
The pySMART-exporter
can be installed via PyPI:
python -m pip install pySMART-exporter
Ensure 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 smartmontools
Usage
The exporter supports two modes: server mode (HTTP) and file mode (node exporter textfile). It should run as a privileged user to access disk information.
Server Mode
To run the exporter in server mode, execute the following command:
pysmart_exporter -l 0.0.0.0:9099
Then configure Prometheus to scrape metrics from the endpoint.
File Mode
To generate a one-time metric file for use with a Prometheus node exporter:
pysmart_exporter -f /path/to/output/file.txt -1
To continuously generate metric files at a set interval (e.g., 60 seconds):
pysmart_exporter -f /path/to/output/file.txt -i 60
Example Metrics Output
Below 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
CLI Options
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 ). |
Metrics
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. |
Installation
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
License
This program is distributed under the terms of the license specified in the LICENSE file.
References
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pysmart_exporter-0.3.3.dev27.tar.gz
.
File metadata
- Download URL: pysmart_exporter-0.3.3.dev27.tar.gz
- Upload date:
- Size: 10.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ba8a0baad2658d8dc435e602d7126dac192b0b44c57464559da877480e4e57b9 |
|
MD5 | 426a2a9bfbd2b5753bcd912099d14426 |
|
BLAKE2b-256 | 4e153a828781292dc15ec960c54ce16f9eba0c386e83c32cfd3b3e1714c9104b |
Provenance
The following attestation bundles were made for pysmart_exporter-0.3.3.dev27.tar.gz
:
Publisher:
publish-to-pypi.yml
on Naudit/pySMART-exporter
-
Statement type:
https://in-toto.io/Statement/v1
- Predicate type:
https://docs.pypi.org/attestations/publish/v1
- Subject name:
pysmart_exporter-0.3.3.dev27.tar.gz
- Subject digest:
ba8a0baad2658d8dc435e602d7126dac192b0b44c57464559da877480e4e57b9
- Sigstore transparency entry: 150178688
- Sigstore integration time:
- Predicate type:
File details
Details for the file pySMART_exporter-0.3.3.dev27-py3-none-any.whl
.
File metadata
- Download URL: pySMART_exporter-0.3.3.dev27-py3-none-any.whl
- Upload date:
- Size: 10.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f953939bc144b0f3a7997ae6099a762dd2aef846b0473b603130c928cd1bc3c9 |
|
MD5 | f88f20ecff59ebd9deeef881f193de97 |
|
BLAKE2b-256 | a63284f5b265229dd5014a7c6749a85b6b28af34eff7e45622786ee4b83a39b8 |
Provenance
The following attestation bundles were made for pySMART_exporter-0.3.3.dev27-py3-none-any.whl
:
Publisher:
publish-to-pypi.yml
on Naudit/pySMART-exporter
-
Statement type:
https://in-toto.io/Statement/v1
- Predicate type:
https://docs.pypi.org/attestations/publish/v1
- Subject name:
pysmart_exporter-0.3.3.dev27-py3-none-any.whl
- Subject digest:
f953939bc144b0f3a7997ae6099a762dd2aef846b0473b603130c928cd1bc3c9
- Sigstore transparency entry: 150178689
- Sigstore integration time:
- Predicate type: