# 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
```
2. Create the virtual environment in `/opt`
```
# python3 -m venv /opt/prometheus-disk-exporter
```
3. Activate the virtual environment
```
# source /opt/prometheus-disk-exporter/bin/activate
```
4. Install the pip package for prometheus-disk-exporter
```
(prometheus-disk-exporter) # pip install prometheus-disk-exporter
```
5. 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
```
2. 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.
3. Start and enable the systemd service.
```
# systemctl daemon-reload
# systemctl enable prometheus-disk-exporter.service
# systemctl start prometheus-disk-exporter.service
```
4. 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
- [prometheus_smart_exporter](https://github.com/cloudandheat/prometheus_smart_exporter).
if all you are looking for is a SMART data exporter, i highly recommend their
implementation
- [proxmox prometheus metrics](https://community.hetzner.com/tutorials/proxmox-prometheus-metrics),
for helping me figure out how to properly install the package
Raw data
{
"_id": null,
"home_page": "",
"name": "prometheus-disk-exporter",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": "",
"keywords": "metrics,disk,prometheus,exporter,monitoring,smart",
"author": "",
"author_email": "Pietro Bonaldo Gregori <pietro.bogre@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/1a/cd/bef35e7dd5141ff936f5d2e47fd76dbaac131d6f43d650ef423fe30355f2/prometheus-disk-exporter-0.0.4.tar.gz",
"platform": null,
"description": "# prometheus-disk-exporter\n\nA prometheus exporter for disk S.M.A.R.T. data and partition usage\n\n## information\n\nFor security reasons, this script is *not* supposed to be ran with root\nprivileges. Instead, the only command which requires these privileges\n(`smartctl`) is ran using `sudo` within `getter.sh`. For this reason\nthe installation step includes adding a sudoers configuration to run\nthis command without the need of a password for the specified user.\n\n## installing\n\nThese steps assume that you are running with root privileges.\n\n### Setup prometheus user\n\n> Note: this step can be skipped if you already have a linux user \n> for exporting prometheus metrics, such as for prometheus-pve-exporter\n\n1. Create linux user with no login\n```\n# useradd -s /bin/false prometheus\n```\n\n### Install package in virtual environment\n\n1. Install the `venv` python module\n```\n# apt install python3-venv\n```\n2. Create the virtual environment in `/opt`\n```\n# python3 -m venv /opt/prometheus-disk-exporter\n```\n3. Activate the virtual environment\n```\n# source /opt/prometheus-disk-exporter/bin/activate\n```\n4. Install the pip package for prometheus-disk-exporter\n```\n(prometheus-disk-exporter) # pip install prometheus-disk-exporter\n```\n5. Disable the virtual environment\n```\n(prometheus-disk-exporter) # deactivate\n```\n\n### Setup sudoers and systemd configuration\n\n1. Add sudoers configuration to run `smartctl` without password.\n```\n# echo \"prometheus ALL=(ALL:ALL) NOPASSWD: $(which smartctl)\" | tee -a /etc/sudoers.d/99-prometheus-disk-exporter\n```\n2. Create a systemd service `/etc/systemd/system/prometheus-disk-exporter.service` for this script.\n A sample can be found in the `systemd` folder of the repository.\n3. Start and enable the systemd service.\n```\n# systemctl daemon-reload\n# systemctl enable prometheus-disk-exporter.service\n# systemctl start prometheus-disk-exporter.service\n```\n4. Verify that the installation was successful by visiting `0.0.0.0:9313`,\n or whatever address and port you specified in the command arguments\n\n## arguments\n```\nusage: prometheus_disk_exporter [-h] [--listen-address LISTEN_ADDRESS]\n [--listen-port LISTEN_PORT]\n\noptions:\n -h, --help show this help message and exit\n --listen-address LISTEN_ADDRESS, -l LISTEN_ADDRESS\n Address for HTTP server to listen on\n --listen-port LISTEN_PORT, -p LISTEN_PORT\n Port for HTTP server to listen on\n```\n\n* **listen-address:** Address for HTTP server to listen on (string) (Default: '0.0.0.0')\n* **listen-port:** Port for HTTP server to listen on (int) (Default: 9313)\n\n\n## metrics sample\n\n```\n# HELP disk_getter_error Indicates an internal error while getting data from shell script\n# TYPE disk_getter_error gauge\ndisk_getter_error{type=\"None\"} 0.0\n# HELP disk_model_info Disk Model Family\n# TYPE disk_model_info gauge\ndisk_model_info{disk_serial=\"WD-WCC6Y3TVHSKJ\",model_family=\"Western Digital Blue\",rpm=\"7200 rpm\"} 1.0\ndisk_model_info{disk_serial=\"50026B76821954FF\",model_family=\"Kingston SSDNow UV400/500\",rpm=\"Solid State Device\"} 1.0\n# HELP disk_power_on_hours Hours spent with disk powered\n# TYPE disk_power_on_hours gauge\ndisk_power_on_hours{disk_serial=\"WD-WCC6Y3TVHSKJ\"} 11583.0\ndisk_power_on_hours{disk_serial=\"50026B76821954FF\"} 11583.0\n# HELP disk_power_cycle_count Disk power cycle count\n# TYPE disk_power_cycle_count gauge\ndisk_power_cycle_count{disk_serial=\"WD-WCC6Y3TVHSKJ\"} 2055.0\ndisk_power_cycle_count{disk_serial=\"50026B76821954FF\"} 2032.0\n# HELP disk_raw_read_error_rate Disk raw read error rate\n# TYPE disk_raw_read_error_rate gauge\ndisk_raw_read_error_rate{disk_serial=\"WD-WCC6Y3TVHSKJ\"} 0.0\ndisk_raw_read_error_rate{disk_serial=\"50026B76821954FF\"} 2.476152e+06\n# HELP disk_temperature Disk temperature in Celsius\n# TYPE disk_temperature gauge\ndisk_temperature{disk_serial=\"WD-WCC6Y3TVHSKJ\"} 41.0\ndisk_temperature{disk_serial=\"50026B76821954FF\"} 42.0\n# HELP partition_info Partition metadata information\n# TYPE partition_info gauge\npartition_info{block=\"/dev/sda1\",disk_serial=\"WD-WCC6Y3TVHSKJ\",filesystem=\"ext4\",mountpoint=\"/media\"} 1.0\npartition_info{block=\"/dev/sdb1\",disk_serial=\"50026B76821954FF\",filesystem=\"vfat\",mountpoint=\"/boot/efi\"} 1.0\npartition_info{block=\"/dev/sdb2\",disk_serial=\"50026B76821954FF\",filesystem=\"ext4\",mountpoint=\"/\"} 1.0\n# HELP partition_usage_bytes Partition used size in bytes\n# TYPE partition_usage_bytes gauge\npartition_usage_bytes{block=\"/dev/sda1\",disk_serial=\"WD-WCC6Y3TVHSKJ\"} 1.33785550848e+011\npartition_usage_bytes{block=\"/dev/sdb1\",disk_serial=\"50026B76821954FF\"} 303104.0\npartition_usage_bytes{block=\"/dev/sdb2\",disk_serial=\"50026B76821954FF\"} 2.4086495232e+010\n# HELP partition_size_bytes Partition total size in bytes\n# TYPE partition_size_bytes gauge\npartition_size_bytes{block=\"/dev/sda1\",disk_serial=\"WD-WCC6Y3TVHSKJ\"} 9.83349346304e+011\npartition_size_bytes{block=\"/dev/sdb1\",disk_serial=\"50026B76821954FF\"} 3.13929728e+08\npartition_size_bytes{block=\"/dev/sdb2\",disk_serial=\"50026B76821954FF\"} 1.17236166656e+011\n```\n\n## credits\n- [prometheus_smart_exporter](https://github.com/cloudandheat/prometheus_smart_exporter).\n if all you are looking for is a SMART data exporter, i highly recommend their\n implementation\n- [proxmox prometheus metrics](https://community.hetzner.com/tutorials/proxmox-prometheus-metrics),\n for helping me figure out how to properly install the package\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "S.M.A.R.T. and partition data exporter for the Prometheus monitoring system",
"version": "0.0.4",
"project_urls": {
"Homepage": "https://github.com/pbogre/prometheus-disk-exporter"
},
"split_keywords": [
"metrics",
"disk",
"prometheus",
"exporter",
"monitoring",
"smart"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "b8bfeb4e4eb21ed08df7fa1e50d4f14bc92cc45c806d2962c74561b8ac5ab56b",
"md5": "832646719cb852cf2141eb57a3b5e4e7",
"sha256": "eeade9fdaded840f4f757e465ded90937d6f8cdf06a85370cee11bd1eaa8b63d"
},
"downloads": -1,
"filename": "prometheus_disk_exporter-0.0.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "832646719cb852cf2141eb57a3b5e4e7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 10872,
"upload_time": "2024-02-16T12:10:45",
"upload_time_iso_8601": "2024-02-16T12:10:45.001522Z",
"url": "https://files.pythonhosted.org/packages/b8/bf/eb4e4eb21ed08df7fa1e50d4f14bc92cc45c806d2962c74561b8ac5ab56b/prometheus_disk_exporter-0.0.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "1acdbef35e7dd5141ff936f5d2e47fd76dbaac131d6f43d650ef423fe30355f2",
"md5": "e05f185df22feb4bf8c43f3acee854d9",
"sha256": "c765afc60b5165957b4cc6afdf6cb29315ab4bd20b27231ddef311bf3f9b0883"
},
"downloads": -1,
"filename": "prometheus-disk-exporter-0.0.4.tar.gz",
"has_sig": false,
"md5_digest": "e05f185df22feb4bf8c43f3acee854d9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 11600,
"upload_time": "2024-02-16T12:10:46",
"upload_time_iso_8601": "2024-02-16T12:10:46.804065Z",
"url": "https://files.pythonhosted.org/packages/1a/cd/bef35e7dd5141ff936f5d2e47fd76dbaac131d6f43d650ef423fe30355f2/prometheus-disk-exporter-0.0.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-02-16 12:10:46",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "pbogre",
"github_project": "prometheus-disk-exporter",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "prometheus-disk-exporter"
}