Installation¶
Docker (recommended)¶
Multi-arch images (linux/amd64, linux/arm64) are published to GHCR on every release, plus an :main edge tag built from the default branch:
docker run -d \
--name transceiver-exporter \
--network host \
--cap-drop ALL \
--cap-add NET_ADMIN \
--read-only \
ghcr.io/rknightion/transceiver-exporter:latest
--network host is required — see Getting Started. --cap-add NET_ADMIN is required for the ethtool ioctl; see Permissions for exactly why, and what happens if you drop it. The image (gcr.io/distroless/static-debian13 base) runs as root, not a distroless non-root user — the container-level capability drop (--cap-drop ALL plus the single NET_ADMIN re-add) is what keeps the container's privileges bounded, not the process UID.
Docker Compose¶
A ready-to-use compose.yml ships in the repository, with every command-line option documented inline as commented-out command: entries:
It sets network_mode: host, cap_drop: [ALL], cap_add: [NET_ADMIN], security_opt: [no-new-privileges:true] and read_only: true — the same posture as the docker
run example above. Uncomment and edit the command: block to change any flag; see Configuration for what each one does.
Release binaries¶
Cross-compiled, checksummed, SBOM-attached and cosign-signed Linux binaries for amd64 and arm64 are published to every GitHub release via GoReleaser. Only linux targets are built — this exporter is Linux-only by design (it reads transceiver EEPROM through Linux-specific ethtool ioctls), so there is no darwin or windows build, and 386/arm/armv7 were dropped to match the published container image's architecture matrix.
curl -LO https://github.com/rknightion/transceiver-exporter/releases/latest/download/transceiver-exporter_Linux_x86_64.tar.gz
tar xzf transceiver-exporter_Linux_x86_64.tar.gz
sudo setcap cap_net_admin=+ep ./transceiver-exporter # or run as root / under sudo
./transceiver-exporter -web.listen-address="[::]:9458"
Verify the download against checksums.txt and its cosign bundle (checksums.txt.sigstore.json), both published alongside the archives on the release page.
From source¶
Requires a Go toolchain matching go.mod (currently Go 1.26):
git clone https://github.com/rknightion/transceiver-exporter.git
cd transceiver-exporter
go build -o transceiver-exporter .
./transceiver-exporter -web.listen-address="[::]:9458"
A go build/go install binary reports its version as dev — official release and container builds inject the real version via -ldflags -X main.version=....
Metrics are served at http://<host>:9458/metrics by default in every installation method above.