This is a simple exporter for the Prometheus metrics using smartctl. The script smartprom.py
also comes with smartprom.service
so that you can run this script in the background on your Linux OS via systemctl
. The script will use port 9902
, you can change it by changing it directly in the script. This script exports all of the data available from the smartctl.
Note: You don't have to do this if you use the Docker image.
smartprom.service
file into /etc/systemd/system
folder.smartprom.py
file anywhere into your system.ExecStart=
in the smartprom.service
so that it points to smartprom.py
in your system.chmod +x smartprom.py
sudo -H python3 -m pip install -r requirements.txt
systemctl enable smartprom
and systemctl start smartprom
http://localhost:9902
No extra configuration needed, should work out of the box. The privileged: true
is required in order for smartctl
to be able to access drives from the host.
Docker image is here: https://hub.docker.com/r/matusnovak/prometheus-smartctl
The architectures supported by this image are: linux/386, linux/amd64, linux/arm/v6, linux/arm/v7, linux/arm64/v8, linux/ppc64le, linux/s390x
Example docker-compose.yml:
version: '3'
services:
smartctl-exporter:
image: matusnovak/prometheus-smartctl:latest
container_name: smartctl-exporter
privileged: true
ports:
- "9902:9902"
restart: unless-stopped
Your metrics will be available at http://localhost:9902/metrics
The exported metrics looks like these:
smartprom_smart_passed{drive="/dev/sda",model_family="Seagate BarraCuda 3.5 (SMR)",model_name="ST6000DM003-2CY296",serial_number="WCT362XM",type="sat",user_capacity="6001175126016"} 1.0
smartprom_exit_code{drive="/dev/sda",model_family="Seagate BarraCuda 3.5 (SMR)",model_name="ST6000DM003-2CY296",serial_number="WCT362XM",type="sat",user_capacity="6001175126016"} 0.0
smartprom_raw_read_error_rate{drive="/dev/sda",model_family="Seagate BarraCuda 3.5 (SMR)",model_name="ST6000DM003-2CY296",serial_number="WCT362XM",type="sat",user_capacity="6001175126016"} 83.0
smartprom_raw_read_error_rate_raw{drive="/dev/sda",model_family="Seagate BarraCuda 3.5 (SMR)",model_name="ST6000DM003-2CY296",serial_number="WCT362XM",type="sat",user_capacity="6001175126016"} 2.23179896e+08
smartprom_power_on_hours{drive="/dev/sda",model_family="Seagate BarraCuda 3.5 (SMR)",model_name="ST6000DM003-2CY296",serial_number="WCT362XM",type="sat",user_capacity="6001175126016"} 73.0
smartprom_power_on_hours_raw{drive="/dev/sda",model_family="Seagate BarraCuda 3.5 (SMR)",model_name="ST6000DM003-2CY296",serial_number="WCT362XM",type="sat",user_capacity="6001175126016"} 24299.0
smartprom_airflow_temperature_cel{drive="/dev/sda",model_family="Seagate BarraCuda 3.5 (SMR)",model_name="ST6000DM003-2CY296",serial_number="WCT362XM",type="sat",user_capacity="6001175126016"} 60.0
smartprom_airflow_temperature_cel_raw{drive="/dev/sda",model_family="Seagate BarraCuda 3.5 (SMR)",model_name="ST6000DM003-2CY296",serial_number="WCT362XM",type="sat",user_capacity="6001175126016"} 40.0
...
If you are using a MegaRAID card to connect the drives, the metrics will export look like these:
smartprom_power_on_hours_raw{drive="megaraid,0",model_family="Western Digital Ultrastar He10/12",model_name="WDC WD80EMAZ-00M9AA0",serial_number="XXXXXXXX",type="sat",user_capacity="6001175126016"} 28522.0
smartprom_power_on_time_hours{drive="megaraid,1",model_family="Unknown",model_name="HGST HUH728080AL5200",serial_number="XXXXXXXX",type="scsi",user_capacity="6001175126016"} 37341.0
All configuration is done with environment variables.
SMARTCTL_REFRESH_INTERVAL
: (Optional) The refresh interval of the metrics. A larger value reduces CPU usage. The default is 60
seconds.SMARTCTL_EXPORTER_PORT
: (Optional) The address the exporter should listen on. The default is 9902
.SMARTCTL_EXPORTER_ADDRESS
: (Optional) The address the exporter should listen on. The default is to listen on all addresses.There is a reference Grafana dashboard in grafana/grafana_dashboard.json.