prometheus-smartctl
                                
                                 prometheus-smartctl copied to clipboard
                                
                                    prometheus-smartctl copied to clipboard
                            
                            
                            
                        HDD S.M.A.R.T exporter for Prometheus written in Python
Prometheus S.M.A.R.T ctl metrics exporter
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.
Install
Note: You don't have to do this if you use the Docker image.
- Copy the smartprom.servicefile into/etc/systemd/systemfolder.
- Copy the smartprom.pyfile anywhere into your system.
- Modify ExecStart=in thesmartprom.serviceso that it points tosmartprom.pyin your system.
- Run chmod +x smartprom.py
- Install prometheus_clientfor the root user, example:sudo -H python3 -m pip install prometheus_client
- Run systemctl enable smartpromandsystemctl start smartprom
- Your metrics will now be available at http://localhost:9902
Docker usage
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"} 1.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"} 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"} 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"} 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"} 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"} 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"} 40.0
...
Configuration
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- 60seconds.
- 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.
Grafana dashboard
There is a reference Grafana dashboard in grafana/grafana_dashboard.json.
 
