README
ΒΆ
iDRAC Exporter
Forked from mrlhansen/idrac_exporter.
A Redfish exporter for Prometheus that scrapes hardware health and telemetry from server BMCs β Dell iDRAC, HPE iLO, Lenovo XClarity, Supermicro and other Redfish-compliant systems. Metrics are collected on-demand: Prometheus passes the BMC address via the target parameter and the exporter opens a Redfish session to that host at scrape time.
http://localhost:9348/metrics?target=192.168.1.1
If the target is unreachable or authentication fails, the exporter returns status 500 with an error message.
π Full documentation: https://fjacquet.github.io/idrac_exporter/ β Metrics catalog Β· Docker Compose Β· Dashboards Β· OTLP push Β· Architecture Decisions
Export modes
Two modes can run side by side:
- On-demand scrape (primary). Prometheus scrapes
/metrics?target=<bmc>; the exporter opens a Redfish session per scrape. This is the default and the recommended model for a BMC fleet. - Optional OTLP push. A background loop polls the configured hosts on a fixed interval and pushes their metrics over OTLP. It is off by default, enabled under the
otlp:block, and leaves the on-demand path unchanged. See the OTLP guide.
Installation
Build from source
git clone https://github.com/fjacquet/idrac_exporter.git
cd idrac_exporter
make cli # builds bin/idrac_exporter
Homebrew (macOS)
brew install fjacquet/tap/idrac_exporter
Pre-built binaries for Linux, macOS and Windows (amd64/arm64) are attached to each release.
Docker
Pre-built images are published on GHCR:
docker pull ghcr.io/fjacquet/idrac_exporter
Set the listen address to 0.0.0.0 when running in a container.
Docker Compose quickstart
A one-command demo stack β exporter, Prometheus (with alert rules) and Grafana (datasource + dashboards auto-provisioned). It runs in scrape-all mode: config.yaml leaves default_target empty, so a bare /metrics returns every configured host and Prometheus scrapes it with honor_labels: true. Each series is labeled instance="<bmc>" and system="<bmc>", so the dashboards' System selector lists all hosts.
# One BMC:
IDRAC1_HOST=10.0.0.10 IDRAC1_USERNAME=monitor IDRAC1_PASSWORD='secret' docker compose up -d
# Two BMCs (host 2 reuses host 1's credentials unless you set IDRAC2_USERNAME/IDRAC2_PASSWORD):
IDRAC1_HOST=10.0.0.10 IDRAC2_HOST=10.0.0.11 \
IDRAC1_USERNAME=monitor IDRAC1_PASSWORD='secret' docker compose up -d
Grafana is then on http://localhost:3000 (admin/admin), Prometheus on http://localhost:9090. At least one reachable BMC is required. Full walkthrough: Docker Compose.
Helm
helm install idrac-exporter oci://ghcr.io/fjacquet/charts/idrac-exporter
Configuration
By default the exporter reads /etc/prometheus/idrac.yml (override with --config). A minimal configuration:
address: 127.0.0.1 # listen address (use 0.0.0.0 in a container)
port: 9348 # listen port
timeout: 60 # Redfish HTTP timeout, in seconds (BMC calls can be slow)
hosts:
default: # fallback credentials for any unmatched target
username: user
password: pass
metrics:
all: true # enable every metric group
Per-host credentials can be keyed by IP/hostname under hosts:, or grouped under auths: and selected per request with &auth=<group>. File values are overridden by CONFIG_* environment variables, and ${VAR} references in the YAML are expanded from the environment. The full reference β every option, env var, and the collection: / otlp: blocks β is in sample-config.yml and the configuration docs.
Because metrics are collected on-demand, a scrape can take a while depending on the enabled groups β set a generous Prometheus scrape_timeout.
Usage
idrac_exporter --config /etc/prometheus/idrac.yml
| Flag | Description |
|---|---|
--config |
Path to the configuration file (default /etc/prometheus/idrac.yml) |
--config-watch |
Watch the configuration file and hot-reload on change |
--verbose |
More verbose logging |
--debug |
Dump raw Redfish JSON responses (implies --verbose) |
--trace |
Log each Redfish request β method, path, status β without credentials |
--once |
Collect every configured host once, print the exposition, and exit |
--version |
Print version and exit |
Validate against a real BMC without Prometheus β --once collects every configured host a single time and writes the metrics exposition (sorted by target) to stdout, which is handy for a quick check or a diff:
idrac_exporter --config config.yml --once
Trace what the exporter does to a BMC β --trace logs every Redfish request (method, path, status) with no credentials, and --debug additionally dumps the raw JSON of each response:
idrac_exporter --config config.yml --once --trace # request-level trace
idrac_exporter --config config.yml --once --debug # full JSON dump
Endpoints
| Endpoint | Parameters | Description |
|---|---|---|
/metrics |
target |
Metrics for the specified target |
/reset |
target |
Reset internal state for the specified target |
/reload |
Reload the configuration file | |
/discover |
Prometheus HTTP Service Discovery | |
/health |
Returns HTTP 200 | |
/ |
Landing page |
Prometheus configuration
For a single exporter fronting many BMCs, rewrite target per host with relabeling (exporter:9348 is where the exporter runs):
scrape_configs:
- job_name: idrac
static_configs:
- targets: ['192.168.1.1', '192.168.1.2']
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
# Expose the BMC as `system` too β the bundled Grafana dashboards key on it.
- source_labels: [__param_target]
target_label: system
- target_label: __address__
replacement: exporter:9348
The exporter's /discover endpoint can replace the static target list β see the documentation.
Metrics
Every metric is prefixed idrac_ (configurable). All <name>_health metrics map 0 = OK, 1 = Warning, 2 = Critical. Groups: System, Sensors, Power, Processors, Memory, Network, Storage, Manager, Event Log, PDU (experimental), Dell OEM extras, and Exporter self-metrics. The OTLP/snapshot path additionally emits idrac_up (per-host collection health).
See the full metrics catalog (docs/metrics.md) for every metric name and its labels.
Dashboards
Grafana dashboards live in grafana/ and are auto-provisioned by the Compose quickstart against the bundled Prometheus datasource:
| Dashboard | File | Focus |
|---|---|---|
| BMC | grafana/idrac.json |
Per-machine detail |
| BMC overview | grafana/idrac_overview.json |
Fleet overview + health |
| BMC Status | grafana/status-alternative.json |
Alternative per-machine status |
| PDU | grafana/pdu.json |
Rack PDU power, energy, health |
All dashboards select hosts via a single system template variable. The overview/detail dashboards were contributed by @7840vz. See Dashboards.
Contributing
Issues and pull requests are welcome. Prefer metrics that work across vendors (see CONTRIBUTING.md). The CI gate is make ci.