Skip to content
On this page

๐Ÿ“Š 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
PropertyValue
MethodGET
Path/metrics
Content-Typetext/plain; version=0.0.4; charset=utf-8
AuthRequired โ€” bearer token or session cookie

Default URL when the daemon runs locally:

http://localhost:11987/metrics

Authentication โ€‹

The /metrics endpoint requires authentication. For automated scrapers, use an access token:

bash
curl -H "Authorization: Bearer cc_550e8400..." http://localhost:11987/metrics

Create 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

txt
# 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.0

coolercontrol_fan_rpm โ€‹

Fan speed in revolutions per minute.

Labels: device, device_uid, device_type, channel

txt
# 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"} 950

coolercontrol_duty_percent โ€‹

Channel duty cycle or load percentage (0โ€“100).

Labels: device, device_uid, device_type, channel

txt
# 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"} 45

coolercontrol_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.

txt
# 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"} 1800000000

coolercontrol_power_watts โ€‹

Channel power consumption in Watts.

Labels: device, device_uid, device_type, channel

txt
# 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.5

Label Reference โ€‹

LabelDescription
deviceHuman-readable device name
device_uidUnique device identifier (stable across reboots)
device_typeDevice category (e.g. Hwmon, GPU, Liquidctl, โ€ฆ)
sensorTemperature sensor name (temperature metrics only)
channelChannel 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:

yaml
scrape_configs:
  - job_name: coolercontrol
    scrape_interval: 5s
    authorization:
      type: Bearer
      credentials: cc_550e8400...   # replace with your access token
    static_configs:
      - targets:
          - localhost:11987

Scrape 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:

yaml
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:11987

See 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

Released under the GPLv3+ License.