Skip to content

Metrics

Upstream's firmware exposes no metrics. This fork serves 40 families at /metrics, in Prometheus text format.

This page is generated from the daemon's source, so it cannot describe a metric the daemon does not emit. The authority is always the board:

Terminal window
$ curl -s http://<board>:9110/metrics

/metrics is served on port 9110, plain HTTP, and takes no credential.

That is a change from earlier releases, which put it on :443 beside the API behind a token of its own. The token existed for one reason: so that a credential sitting in a scrape config could not also reach /api/bmc and power four compute modules off. On a listener that serves nothing but /metrics there is nothing else to reach, so the property survives and the mechanism is a port instead of a secret — one fewer thing to mint, store, rotate and leak.

The TLS went with it. It was always scraped with verification disabled, because the board's certificate is expired and carries no subject-alternative name, so nothing could verify it. Unverified TLS is a handshake per scrape on a Cortex-A7 in exchange for nothing.

What protects the endpoint is the network. It binds the same address as the API, so restricting the daemon to a management network restricts both. And there is nothing secret in it: temperatures, fan steps, port counters, power state, NAND wear and slot versions.

A Grafana dashboard over every family below ships with each release; see monitor it.

scrape_configs:
- job_name: turingpi-bmc
static_configs:
- targets: ["<board>:9110"]
labels:
instance: <the board's hostname>
metric type what it is
bmcd_build_info gauge Version of the daemon that produced these metrics. Always 1; the answer is in the version label.

Read this one first when a number looks wrong. Every other family below is produced by the daemon this names, and a metric that does not exist in an older build is simply absent rather than zero.

metric type what it is
bmcd_cooling_state gauge Step a cooling device is currently at.
bmcd_cooling_state_max gauge Highest step a cooling device accepts.
bmcd_cooling_overridden gauge 1 while a fan is held at a step and its zone's governor is paused.
bmcd_temperature_celsius gauge Temperature reported by a kernel thermal zone.
metric type what it is
bmcd_switch_port_link gauge Whether a switch port has carrier.
bmcd_switch_port_present gauge Whether the kernel has a netdev for this switch port.
bmcd_switch_port_rx_bytes_total counter Bytes received on a switch port.
bmcd_switch_port_rx_errors_total counter Receive errors on a switch port.
bmcd_switch_port_speed_bits_per_second gauge Negotiated line rate of a switch port.
bmcd_switch_port_tx_bytes_total counter Bytes transmitted on a switch port.
bmcd_switch_port_tx_errors_total counter Transmit errors on a switch port.
metric type what it is
bmcd_node_power_on_seconds gauge Seconds since a compute module was powered on.
bmcd_node_power_state gauge Whether a compute module is powered on.
bmcd_node_usb_boot_armed gauge 1 when a module's USB-boot pin is asserted, which stops it booting from its own eMMC.
bmcd_usb_config gauge The board's persisted USB multiplexer configuration, labelled with its node, mode, route and bus type.
metric type what it is
bmcd_load1 gauge 1-minute load average of the BMC.
bmcd_load15 gauge 15-minute load average of the BMC.
bmcd_load5 gauge 5-minute load average of the BMC.
bmcd_memory_available_bytes gauge Memory available to a new allocation on the BMC, reclaim included.
bmcd_memory_free_bytes gauge Free memory of the BMC.
bmcd_memory_total_bytes gauge Total memory of the BMC.
bmcd_process_resident_bytes gauge This daemon's own resident set. Board memory says the board is being consumed; only this says by whom.
bmcd_process_threads gauge Threads this daemon has. Read beside the resident set: a heap leak grows memory with this flat, while a leaked task or an unreaped blocking thread grows both, because every thread carries a stack.
bmcd_uptime_seconds gauge Seconds since the BMC booted.
metric type what it is
bmcd_tls_certificate_expiry_timestamp_seconds gauge When the certificate the listener is serving expires.
bmcd_tls_certificate_info gauge The key behind that certificate, in a key label. Always 1; the answer is the label.

Both describe the running listener, not whatever is on disk now. They are read once, when the certificate is read, which is at start — so replacing the file and not restarting is exactly the case where a fresh read would lie, and these keep telling you what the board is actually presenting.

Alert on the expiry with a long fuse. A board whose certificate has expired still serves, but nothing that verifies can reach it, and the recovery needs a hand on the board.

metric type what it is
bmcd_nand_available_bytes gauge Unallocated space on the BMC's NAND.
bmcd_nand_eraseblock_size_bytes gauge Size of one logical eraseblock of the BMC's NAND.
bmcd_nand_eraseblocks gauge Eraseblocks of the BMC's NAND, by what UBI counts them as.
metric type what it is
bmcd_clock_offset_seconds gauge The BMC's system clock minus true time; negative when the board is behind.
bmcd_clock_stratum gauge Stratum of the time source the BMC is synchronised to.
bmcd_clock_synchronised gauge Whether the BMC's system clock is disciplined. Absent when that cannot be determined.
bmcd_rtc_info gauge A real-time clock the kernel registered on the BMC.
bmcd_rtc_present gauge Whether the BMC has a real-time clock at all.
metric type what it is
bmcd_firmware_promotion_total counter Boots that ran the firmware health gate, by what the gate decided. promoted is derived as attempts minus rollbacks, because the gate has no single line meaning kept; a board cut off mid-gate therefore counts as promoted.
bmcd_firmware_last_promotion_timestamp_seconds gauge When the firmware health gate last decided, so a dashboard can say when and not only how often. Absent rather than wrong when the board's clock cannot be trusted: the gate records the board's own time, which on a BMC that has just come up may be well before the real one, and only UTC is accepted.
bmcd_firmware_slot_info gauge A firmware slot on the BMC's NAND. The rollback slot is not mounted, so it has no version.
bmcd_firmware_slot_size_bytes gauge Size of the firmware in a slot.
bmcd_firmware_update_staged gauge Whether a firmware update is staged for the next boot. Absent when the U-Boot environment cannot be read.

Last updated: