๐ Prometheus Metrics โ
CoolerControl exposes a Prometheus-compatible metrics endpoint that publishes live sensor data in the Prometheus text exposition format. Use it to scrape device temperatures, fan speeds, duty cycles, frequencies, and power readings into any Prometheus-compatible monitoring stack.
Endpoint โ
GET /metrics| Property | Value |
|---|---|
| Method | GET |
| Path | /metrics |
| Content-Type | text/plain; version=0.0.4; charset=utf-8 |
| Auth | Required โ bearer token or session cookie |
Default URL when the daemon runs locally:
http://localhost:11987/metricsAuthentication โ
The /metrics endpoint requires authentication. For automated scrapers, use an access token:
curl -H "Authorization: Bearer cc_550e8400..." http://localhost:11987/metricsCreate tokens from the Access Protection menu in the UI. See Access Protection for details.
Session cookies also work
If you're testing from a browser or a tool that already holds a session cookie from logging in, the cookie is accepted as-is. For any unattended scraper, prefer bearer tokens.
Available Metrics โ
All metrics are gauges and reflect the most recent sensor reading at the time of the request. Each metric carries labels that identify the source device and sensor/channel.
coolercontrol_temperature_celsius โ
Temperature sensor reading in degrees Celsius.
Labels: device, device_uid, device_type, sensor
# HELP coolercontrol_temperature_celsius Temperature sensor reading in degrees Celsius.
# TYPE coolercontrol_temperature_celsius gauge
coolercontrol_temperature_celsius{device="CPU",device_uid="a1b2c3",device_type="Hwmon",sensor="CPU Temp"} 55.5
coolercontrol_temperature_celsius{device="GPU",device_uid="d4e5f6",device_type="GPU",sensor="GPU Temp"} 72.0coolercontrol_fan_rpm โ
Fan speed in revolutions per minute.
Labels: device, device_uid, device_type, channel
# HELP coolercontrol_fan_rpm Fan speed in revolutions per minute.
# TYPE coolercontrol_fan_rpm gauge
coolercontrol_fan_rpm{device="Motherboard",device_uid="a1b2c3",device_type="Hwmon",channel="fan1"} 1200
coolercontrol_fan_rpm{device="Motherboard",device_uid="a1b2c3",device_type="Hwmon",channel="fan2"} 950coolercontrol_duty_percent โ
Channel duty cycle or load percentage (0โ100).
Labels: device, device_uid, device_type, channel
# HELP coolercontrol_duty_percent Channel duty cycle or load percentage (0-100).
# TYPE coolercontrol_duty_percent gauge
coolercontrol_duty_percent{device="Motherboard",device_uid="a1b2c3",device_type="Hwmon",channel="fan1"} 45coolercontrol_frequency_hertz โ
Channel frequency in Hertz.
Labels: device, device_uid, device_type, channel
Unit conversion
Source values reported in MHz are automatically converted to Hz (multiplied by 1,000,000) so the metric consistently uses the standard SI base unit.
# HELP coolercontrol_frequency_hertz Channel frequency in Hertz.
# TYPE coolercontrol_frequency_hertz gauge
coolercontrol_frequency_hertz{device="GPU",device_uid="d4e5f6",device_type="GPU",channel="gpu1"} 1800000000coolercontrol_power_watts โ
Channel power consumption in Watts.
Labels: device, device_uid, device_type, channel
# HELP coolercontrol_power_watts Channel power consumption in Watts.
# TYPE coolercontrol_power_watts gauge
coolercontrol_power_watts{device="GPU",device_uid="d4e5f6",device_type="GPU",channel="gpu1"} 120.5Label Reference โ
| Label | Description |
|---|---|
device | Human-readable device name |
device_uid | Unique device identifier (stable across reboots) |
device_type | Device category (e.g. Hwmon, GPU, Liquidctl, โฆ) |
sensor | Temperature sensor name (temperature metrics only) |
channel | Channel name (fan/duty/frequency/power metrics only) |
Prometheus Scrape Configuration โ
Add a scrape job to your prometheus.yml. Because the endpoint requires a bearer token, use the authorization block:
scrape_configs:
- job_name: coolercontrol
scrape_interval: 5s
authorization:
type: Bearer
credentials: cc_550e8400... # replace with your access token
static_configs:
- targets:
- localhost:11987Scrape interval
Sensor readings update approximately once per second. A scrape_interval shorter than 5s is unlikely to yield additional data and will add unnecessary load.
For a remote daemon, update the target address and enable TLS:
scrape_configs:
- job_name: coolercontrol
scrape_interval: 5s
scheme: https
tls_config:
ca_file: /path/to/ca.crt # omit or set insecure_skip_verify: true for self-signed certs
authorization:
type: Bearer
credentials: cc_550e8400...
static_configs:
- targets:
- my-server.local:11987See SSL/TLS and Remote Access for daemon-side configuration.
See Also โ
- Access Protection โ Creating and managing bearer tokens
- REST API โ Full REST API documentation and authentication details
- Remote Access โ Exposing the daemon beyond localhost
- SSL/TLS โ Enabling HTTPS on the daemon