Skip to content

transceiver-exporter

Read the diagnostics off your pluggable optics and expose them as Prometheus metrics. transceiver-exporter is a small Go binary that walks every network interface on a Linux host, asks the kernel driver for its transceiver EEPROM over ethtool, and serves the result — vendor identity, wavelength, power class, and live digital optical monitoring (DOM) data where the module supports it — on a /metrics endpoint.

It works with any pluggable form factor the kernel's ethtool ioctls can see EEPROM for: SFP, SFP+, SFP28, QSFP, QSFP+, QSFP28 and similar modules. There is no hardcoded form-factor or vendor list — whatever the NIC driver's get_module_info/get_module_eeprom implementation reports is what gets exported. This also means driver support is the exporter's actual dependency: a NIC driver that does not implement the ethtool module EEPROM ops (or a virtual/software interface with no transceiver at all) simply yields no EEPROM metrics for that interface — see Troubleshooting.

The source, releases and issue tracker live on GitHub.

Start here

  • Getting started — run the binary, scrape it, see a metric.
  • Installation — Docker, Docker Compose, a release binary, or building from source.
  • Configuration — every command-line flag and its default.
  • Metrics catalog — every metric this exporter emits, with labels and units.
  • Permissions — the CAP_NET_ADMIN requirement, and what happens without it.

What it collects

AreaWhat you get
Driver infoDriver name, driver version, firmware version, bus info, expansion ROM version — from the interface's ethtool driver info, independent of any transceiver being present.
Interface featuresThe ethtool feature set (offloads, etc.) per interface, as available/active gauges. Optional — can produce a lot of series on a many-port switch.
Transceiver identityIdentifier type, encoding, power class and its wattage, signaling rate, supported link lengths per media, vendor name/part number/revision/serial/OUI, manufacture date code, wavelength.
Digital optical monitoring (DOM)Module temperature and supply voltage, per-laser bias current, and per-laser TX/RX optical power — each with its supported alarm/warning thresholds, when the module reports them.

Everything is a per-interface (and, for laser measurements, per-interface-per-laser-index) gauge. See the metrics catalog for the exhaustive list.

How it works

One HTTP scrape of /metrics triggers one collection pass: enumerate interfaces, open an ethtool handle, and query each interface's driver info and EEPROM in turn. There is no background polling loop and no caching between scrapes — every scrape is a fresh read. See Architecture.

Project

transceiver-exporter is an independently maintained continuation of wobcom/transceiver-exporter and the underlying wobcom/go-ethtool library. All original credit for the project's design belongs to the wobcom authors — @fluepke, @BarbarossaTM and @vidister. This repository is not in GitHub's fork network; it is a from-scratch continuation carrying the same license.

Licensed under AGPL-3.0, unlike most exporters in this fleet, which use a permissive license. If you run a modified version of this exporter as a network service, the AGPL-3.0 requires you to make your modified source available to users of that service — see LICENSE.md in the repository for the full terms.

Bug reports, feature requests and pull requests are welcome — see the open issues or the latest release.