nixos/prometheus: add nvidia-gpu exporter (#365522)

Changed files
+32
nixos
doc
manual
release-notes
modules
services
monitoring
prometheus
+2
nixos/doc/manual/release-notes/rl-2505.section.md
···
- [mqtt-exporter](https://github.com/kpetremann/mqtt-exporter/), a Prometheus exporter for exposing messages from MQTT. Available as [services.prometheus.exporters.mqtt](#opt-services.prometheus.exporters.mqtt.enable).
+
- [nvidia-gpu](https://github.com/utkuozdemir/nvidia_gpu_exporter), a Prometheus exporter that scrapes `nvidia-smi` for GPU metrics. Available as [services.prometheus.exporters.nvidia-gpu](#opt-services.prometheus.exporters.nvidia-gpu.enable).
+
- [Buffyboard](https://gitlab.postmarketos.org/postmarketOS/buffybox/-/tree/master/buffyboard), a framebuffer on-screen keyboard. Available as [services.buffyboard](option.html#opt-services.buffyboard).
- [KanBoard](https://github.com/kanboard/kanboard), a project management tool that focuses on the Kanban methodology. Available as [services.kanboard](#opt-services.kanboard.enable).
+1
nixos/modules/services/monitoring/prometheus/exporters.nix
···
"nginxlog"
"node"
"nut"
+
"nvidia-gpu"
"pgbouncer"
"php-fpm"
"pihole"
+29
nixos/modules/services/monitoring/prometheus/exporters/nvidia-gpu.nix
···
+
{
+
config,
+
lib,
+
pkgs,
+
...
+
}:
+
+
let
+
cfg = config.services.prometheus.exporters.nvidia-gpu;
+
inherit (lib)
+
types
+
concatStringsSep
+
;
+
in
+
{
+
port = 9835;
+
serviceOpts = {
+
serviceConfig = {
+
ExecStart = ''
+
${pkgs.prometheus-nvidia-gpu-exporter}/bin/nvidia_gpu_exporter \
+
--web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
+
--nvidia-smi-command ${config.hardware.nvidia.package.bin}/bin/nvidia-smi \
+
${concatStringsSep " " cfg.extraFlags}
+
'';
+
PrivateDevices = false;
+
};
+
wantedBy = [ "multi-user.target" ];
+
};
+
}