Merge pull request #188754 from snaar/prometheus-ipmi
nixos/services.prometheus.exporters.ipmi: new module along with underlying ipmi_exporter package
This commit is contained in:
commit
ac5e7351d1
@ -273,6 +273,14 @@
|
||||
<link xlink:href="options.html#opt-services.patroni.enable">services.patroni</link>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<link xlink:href="https://github.com/prometheus-community/ipmi_exporter">Prometheus
|
||||
IPMI exporter</link>, an IPMI exporter for Prometheus.
|
||||
Available as
|
||||
<link linkend="opt-services.prometheus.exporters.ipmi.enable">services.prometheus.exporters.ipmi</link>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<link xlink:href="https://writefreely.org">WriteFreely</link>,
|
||||
|
@ -97,6 +97,8 @@ In addition to numerous new and upgraded packages, this release has the followin
|
||||
- [Patroni](https://github.com/zalando/patroni), a template for PostgreSQL HA with ZooKeeper, etcd or Consul.
|
||||
Available as [services.patroni](options.html#opt-services.patroni.enable).
|
||||
|
||||
- [Prometheus IPMI exporter](https://github.com/prometheus-community/ipmi_exporter), an IPMI exporter for Prometheus. Available as [services.prometheus.exporters.ipmi](#opt-services.prometheus.exporters.ipmi.enable).
|
||||
|
||||
- [WriteFreely](https://writefreely.org), a simple blogging platform with ActivityPub support. Available as [services.writefreely](options.html#opt-services.writefreely.enable).
|
||||
|
||||
<!-- To avoid merge conflicts, consider adding your item at an arbitrary place in the list instead. -->
|
||||
|
@ -36,6 +36,7 @@ let
|
||||
"fastly"
|
||||
"fritzbox"
|
||||
"influxdb"
|
||||
"ipmi"
|
||||
"json"
|
||||
"jitsi"
|
||||
"kea"
|
||||
@ -243,6 +244,22 @@ in
|
||||
|
||||
config = mkMerge ([{
|
||||
assertions = [ {
|
||||
assertion = cfg.ipmi.enable -> (cfg.ipmi.configFile != null) -> (
|
||||
!(lib.hasPrefix "/tmp/" cfg.ipmi.configFile)
|
||||
);
|
||||
message = ''
|
||||
Config file specified in `services.prometheus.exporters.ipmi.configFile' must
|
||||
not reside within /tmp - it won't be visible to the systemd service.
|
||||
'';
|
||||
} {
|
||||
assertion = cfg.ipmi.enable -> (cfg.ipmi.webConfigFile != null) -> (
|
||||
!(lib.hasPrefix "/tmp/" cfg.ipmi.webConfigFile)
|
||||
);
|
||||
message = ''
|
||||
Config file specified in `services.prometheus.exporters.ipmi.webConfigFile' must
|
||||
not reside within /tmp - it won't be visible to the systemd service.
|
||||
'';
|
||||
} {
|
||||
assertion = cfg.snmp.enable -> (
|
||||
(cfg.snmp.configurationPath == null) != (cfg.snmp.configuration == null)
|
||||
);
|
||||
|
@ -0,0 +1,41 @@
|
||||
{ config, lib, pkgs, options }:
|
||||
|
||||
with lib;
|
||||
|
||||
let
|
||||
logPrefix = "services.prometheus.exporter.ipmi";
|
||||
cfg = config.services.prometheus.exporters.ipmi;
|
||||
in {
|
||||
port = 9290;
|
||||
|
||||
extraOpts = {
|
||||
configFile = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
description = lib.mdDoc ''
|
||||
Path to configuration file.
|
||||
'';
|
||||
};
|
||||
|
||||
webConfigFile = mkOption {
|
||||
type = types.nullOr types.path;
|
||||
default = null;
|
||||
description = lib.mdDoc ''
|
||||
Path to configuration file that can enable TLS or authentication.
|
||||
'';
|
||||
};
|
||||
};
|
||||
|
||||
serviceOpts.serviceConfig = {
|
||||
ExecStart = with cfg; concatStringsSep " " ([
|
||||
"${pkgs.prometheus-ipmi-exporter}/bin/ipmi_exporter"
|
||||
"--web.listen-address ${listenAddress}:${toString port}"
|
||||
] ++ optionals (cfg.webConfigFile != null) [
|
||||
"--web.config.file ${escapeShellArg cfg.webConfigFile}"
|
||||
] ++ optionals (cfg.configFile != null) [
|
||||
"--config.file ${escapeShellArg cfg.configFile}"
|
||||
] ++ extraFlags);
|
||||
|
||||
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||
};
|
||||
}
|
@ -307,6 +307,19 @@ let
|
||||
'';
|
||||
};
|
||||
|
||||
ipmi = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
};
|
||||
exporterTest = ''
|
||||
wait_for_unit("prometheus-ipmi-exporter.service")
|
||||
wait_for_open_port(9290)
|
||||
succeed(
|
||||
"curl -sSf http://localhost:9290/metrics | grep 'ipmi_scrape_duration_seconds'"
|
||||
)
|
||||
'';
|
||||
};
|
||||
|
||||
jitsi = {
|
||||
exporterConfig = {
|
||||
enable = true;
|
||||
|
41
pkgs/servers/monitoring/prometheus/ipmi-exporter.nix
Normal file
41
pkgs/servers/monitoring/prometheus/ipmi-exporter.nix
Normal file
@ -0,0 +1,41 @@
|
||||
{ lib, buildGoModule, fetchFromGitHub, nixosTests, makeWrapper, freeipmi }:
|
||||
|
||||
buildGoModule rec {
|
||||
pname = "ipmi_exporter";
|
||||
version = "1.6.1";
|
||||
|
||||
src = fetchFromGitHub {
|
||||
owner = "prometheus-community";
|
||||
repo = "ipmi_exporter";
|
||||
rev = "v${version}";
|
||||
hash = "sha256-hifG1lpFUVLoy7Ol3N6h+s+hZjnQxja5svpY4lFFsxw=";
|
||||
};
|
||||
|
||||
vendorHash = "sha256-UuPZmxoKVj7FusOS6H1gn6SAzQIZAKyX+m+QS657yXw=";
|
||||
|
||||
nativeBuildInputs = [ makeWrapper ];
|
||||
|
||||
postInstall = ''
|
||||
wrapProgram $out/bin/ipmi_exporter --prefix PATH : ${lib.makeBinPath [ freeipmi ]}
|
||||
'';
|
||||
|
||||
passthru.tests = { inherit (nixosTests.prometheus-exporters) ipmi; };
|
||||
|
||||
ldflags = [
|
||||
"-s"
|
||||
"-w"
|
||||
"-X github.com/prometheus/common/version.Version=${version}"
|
||||
"-X github.com/prometheus/common/version.Revision=0000000"
|
||||
"-X github.com/prometheus/common/version.Branch=unknown"
|
||||
"-X github.com/prometheus/common/version.BuildUser=nix@nixpkgs"
|
||||
"-X github.com/prometheus/common/version.BuildDate=unknown"
|
||||
];
|
||||
|
||||
meta = with lib; {
|
||||
description = "An IPMI exporter for Prometheus";
|
||||
homepage = "https://github.com/prometheus-community/ipmi_exporter";
|
||||
changelog = "https://github.com/prometheus-community/ipmi_exporter/blob/${src.rev}/CHANGELOG.md";
|
||||
license = licenses.mit;
|
||||
maintainers = with maintainers; [ snaar ];
|
||||
};
|
||||
}
|
@ -23415,6 +23415,7 @@ with pkgs;
|
||||
prometheus-gitlab-ci-pipelines-exporter = callPackage ../servers/monitoring/prometheus/gitlab-ci-pipelines-exporter.nix { };
|
||||
prometheus-haproxy-exporter = callPackage ../servers/monitoring/prometheus/haproxy-exporter.nix { };
|
||||
prometheus-influxdb-exporter = callPackage ../servers/monitoring/prometheus/influxdb-exporter.nix { };
|
||||
prometheus-ipmi-exporter = callPackage ../servers/monitoring/prometheus/ipmi-exporter.nix { };
|
||||
prometheus-jitsi-exporter = callPackage ../servers/monitoring/prometheus/jitsi-exporter.nix { };
|
||||
prometheus-jmx-httpserver = callPackage ../servers/monitoring/prometheus/jmx-httpserver.nix { };
|
||||
prometheus-json-exporter = callPackage ../servers/monitoring/prometheus/json-exporter.nix { };
|
||||
|
Loading…
Reference in New Issue
Block a user