Skip to main content

prometheus-disk-exporter

A prometheus exporter for disk S.M.A.R.T. data and partition usage

information

For security reasons, this script is not supposed to be ran with root privileges. Instead, the only command which requires these privileges (smartctl) is ran using sudo within getter.sh. For this reason the installation step includes adding a sudoers configuration to run this command without the need of a password for the specified user.

installing

These steps assume that you are running with root privileges.

Setup prometheus user

Note: this step can be skipped if you already have a linux user for exporting prometheus metrics, such as for prometheus-pve-exporter

  1. Create linux user with no login
# useradd -s /bin/false prometheus

Install package in virtual environment

  1. Install the venv python module
# apt install python3-venv
  1. Create the virtual environment in /opt
# python3 -m venv /opt/prometheus-disk-exporter
  1. Activate the virtual environment
# source /opt/prometheus-disk-exporter/bin/activate
  1. Install the pip package for prometheus-disk-exporter
(prometheus-disk-exporter) # pip install prometheus-disk-exporter
  1. Disable the virtual environment
(prometheus-disk-exporter) # deactivate

Setup sudoers and systemd configuration

  1. Add sudoers configuration to run smartctl without password.
# echo "prometheus ALL=(ALL:ALL) NOPASSWD: $(which smartctl)" | tee -a /etc/sudoers.d/99-prometheus-disk-exporter
  1. Create a systemd service /etc/systemd/system/prometheus-disk-exporter.service for this script. A sample can be found in the systemd folder of the repository.
  2. Start and enable the systemd service.
# systemctl daemon-reload
# systemctl enable prometheus-disk-exporter.service
# systemctl start prometheus-disk-exporter.service
  1. Verify that the installation was successful by visiting 0.0.0.0:9313, or whatever address and port you specified in the command arguments

arguments

usage: prometheus_disk_exporter [-h] [--listen-address LISTEN_ADDRESS]
                                [--listen-port LISTEN_PORT]

options:
  -h, --help            show this help message and exit
  --listen-address LISTEN_ADDRESS, -l LISTEN_ADDRESS
                        Address for HTTP server to listen on
  --listen-port LISTEN_PORT, -p LISTEN_PORT
                        Port for HTTP server to listen on
  • listen-address: Address for HTTP server to listen on (string) (Default: '0.0.0.0')
  • listen-port: Port for HTTP server to listen on (int) (Default: 9313)

metrics sample

# HELP disk_getter_error Indicates an internal error while getting data from shell script
# TYPE disk_getter_error gauge
disk_getter_error{type="None"} 0.0
# HELP disk_model_info Disk Model Family
# TYPE disk_model_info gauge
disk_model_info{disk_serial="WD-WCC6Y3TVHSKJ",model_family="Western Digital Blue",rpm="7200 rpm"} 1.0
disk_model_info{disk_serial="50026B76821954FF",model_family="Kingston SSDNow UV400/500",rpm="Solid State Device"} 1.0
# HELP disk_power_on_hours Hours spent with disk powered
# TYPE disk_power_on_hours gauge
disk_power_on_hours{disk_serial="WD-WCC6Y3TVHSKJ"} 11583.0
disk_power_on_hours{disk_serial="50026B76821954FF"} 11583.0
# HELP disk_power_cycle_count Disk power cycle count
# TYPE disk_power_cycle_count gauge
disk_power_cycle_count{disk_serial="WD-WCC6Y3TVHSKJ"} 2055.0
disk_power_cycle_count{disk_serial="50026B76821954FF"} 2032.0
# HELP disk_raw_read_error_rate Disk raw read error rate
# TYPE disk_raw_read_error_rate gauge
disk_raw_read_error_rate{disk_serial="WD-WCC6Y3TVHSKJ"} 0.0
disk_raw_read_error_rate{disk_serial="50026B76821954FF"} 2.476152e+06
# HELP disk_temperature Disk temperature in Celsius
# TYPE disk_temperature gauge
disk_temperature{disk_serial="WD-WCC6Y3TVHSKJ"} 41.0
disk_temperature{disk_serial="50026B76821954FF"} 42.0
# HELP partition_info Partition metadata information
# TYPE partition_info gauge
partition_info{block="/dev/sda1",disk_serial="WD-WCC6Y3TVHSKJ",filesystem="ext4",mountpoint="/media"} 1.0
partition_info{block="/dev/sdb1",disk_serial="50026B76821954FF",filesystem="vfat",mountpoint="/boot/efi"} 1.0
partition_info{block="/dev/sdb2",disk_serial="50026B76821954FF",filesystem="ext4",mountpoint="/"} 1.0
# HELP partition_usage_bytes Partition used size in bytes
# TYPE partition_usage_bytes gauge
partition_usage_bytes{block="/dev/sda1",disk_serial="WD-WCC6Y3TVHSKJ"} 1.33785550848e+011
partition_usage_bytes{block="/dev/sdb1",disk_serial="50026B76821954FF"} 303104.0
partition_usage_bytes{block="/dev/sdb2",disk_serial="50026B76821954FF"} 2.4086495232e+010
# HELP partition_size_bytes Partition total size in bytes
# TYPE partition_size_bytes gauge
partition_size_bytes{block="/dev/sda1",disk_serial="WD-WCC6Y3TVHSKJ"} 9.83349346304e+011
partition_size_bytes{block="/dev/sdb1",disk_serial="50026B76821954FF"} 3.13929728e+08
partition_size_bytes{block="/dev/sdb2",disk_serial="50026B76821954FF"} 1.17236166656e+011

credits

Metadata

Release files for prometheus-disk-exporter 0.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for prometheus-disk-exporter 0.0.4
File Size Uploaded
prometheus-disk-exporter-0.0.4.tar.gz 11.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for prometheus-disk-exporter 0.0.4
File Interpreter ABI Platform
prometheus_disk_exporter-0.0.4-py3-none-any.whl Python 3 none any Details

Total release size: 22.5 kB

Release files / prometheus-disk-exporter-0.0.4.tar.gz

Download URL prometheus-disk-exporter-0.0.4.tar.gz
Size 11.6 kB
Tags Source
SHA-256 checksum
How to use checksums
c765afc60b5165957b4cc6afdf6cb29315ab4bd20b27231ddef311bf3f9b0883
BLAKE2b-256 checksum
How to use checksums
1acdbef35e7dd5141ff936f5d2e47fd76dbaac131d6f43d650ef423fe30355f2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / prometheus_disk_exporter-0.0.4-py3-none-any.whl

Download URL prometheus_disk_exporter-0.0.4-py3-none-any.whl
Size 10.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
eeade9fdaded840f4f757e465ded90937d6f8cdf06a85370cee11bd1eaa8b63d
BLAKE2b-256 checksum
How to use checksums
b8bfeb4e4eb21ed08df7fa1e50d4f14bc92cc45c806d2962c74561b8ac5ab56b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release history Release notifications | RSS feed

This release

0.0.4 This release

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page