mirror of
https://github.com/NixOS/nixpkgs.git
synced 2025-06-13 21:25:30 +03:00
Merge pull request #18770 from mayflower/prometheus-alertmanager
Prometheus alertmanager module
This commit is contained in:
commit
ab40702c96
3 changed files with 144 additions and 0 deletions
|
@ -289,6 +289,7 @@
|
||||||
./services/monitoring/nagios.nix
|
./services/monitoring/nagios.nix
|
||||||
./services/monitoring/prometheus/default.nix
|
./services/monitoring/prometheus/default.nix
|
||||||
./services/monitoring/prometheus/node-exporter.nix
|
./services/monitoring/prometheus/node-exporter.nix
|
||||||
|
./services/monitoring/prometheus/alertmanager.nix
|
||||||
./services/monitoring/riemann.nix
|
./services/monitoring/riemann.nix
|
||||||
./services/monitoring/riemann-dash.nix
|
./services/monitoring/riemann-dash.nix
|
||||||
./services/monitoring/riemann-tools.nix
|
./services/monitoring/riemann-tools.nix
|
||||||
|
|
116
nixos/modules/services/monitoring/prometheus/alertmanager.nix
Normal file
116
nixos/modules/services/monitoring/prometheus/alertmanager.nix
Normal file
|
@ -0,0 +1,116 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
with lib;
|
||||||
|
|
||||||
|
let
|
||||||
|
cfg = config.services.prometheus.alertmanager;
|
||||||
|
mkConfigFile = pkgs.writeText "alertmanager.yml" (builtins.toJSON cfg.configuration);
|
||||||
|
in {
|
||||||
|
options = {
|
||||||
|
services.prometheus.alertmanager = {
|
||||||
|
enable = mkEnableOption "Prometheus Alertmanager";
|
||||||
|
|
||||||
|
user = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "nobody";
|
||||||
|
description = ''
|
||||||
|
User name under which Alertmanager shall be run.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
group = mkOption {
|
||||||
|
type = types.str;
|
||||||
|
default = "nogroup";
|
||||||
|
description = ''
|
||||||
|
Group under which Alertmanager shall be run.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
configuration = mkOption {
|
||||||
|
type = types.attrs;
|
||||||
|
default = {};
|
||||||
|
description = ''
|
||||||
|
Alertmanager configuration as nix attribute set.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
logFormat = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
If set use a syslog logger or JSON logging.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
logLevel = mkOption {
|
||||||
|
type = types.enum ["debug" "info" "warn" "error" "fatal"];
|
||||||
|
default = "warn";
|
||||||
|
description = ''
|
||||||
|
Only log messages with the given severity or above.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
webExternalUrl = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
The URL under which Alertmanager is externally reachable (for example, if Alertmanager is served via a reverse proxy).
|
||||||
|
Used for generating relative and absolute links back to Alertmanager itself.
|
||||||
|
If the URL has a path portion, it will be used to prefix all HTTP endoints served by Alertmanager.
|
||||||
|
If omitted, relevant URL components will be derived automatically.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
listenAddress = mkOption {
|
||||||
|
type = types.nullOr types.str;
|
||||||
|
default = null;
|
||||||
|
description = ''
|
||||||
|
Address to listen on for the web interface and API.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
port = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 9093;
|
||||||
|
description = ''
|
||||||
|
Port to listen on for the web interface and API.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
openFirewall = mkOption {
|
||||||
|
type = types.bool;
|
||||||
|
default = false;
|
||||||
|
description = ''
|
||||||
|
Open port in firewall for incoming connections.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
config = mkIf cfg.enable {
|
||||||
|
networking.firewall.allowedTCPPorts = optional cfg.openFirewall cfg.port;
|
||||||
|
|
||||||
|
systemd.services.alertmanager = {
|
||||||
|
wantedBy = [ "multi-user.target" ];
|
||||||
|
after = [ "network.target" ];
|
||||||
|
script = ''
|
||||||
|
${pkgs.prometheus-alertmanager.bin}/bin/alertmanager \
|
||||||
|
-config.file ${mkConfigFile} \
|
||||||
|
-web.listen-address ${cfg.listenAddress}:${toString cfg.port} \
|
||||||
|
-log.level ${cfg.logLevel} \
|
||||||
|
${optionalString (cfg.webExternalUrl != null) ''-web.external-url ${cfg.webExternalUrl} \''}
|
||||||
|
${optionalString (cfg.logFormat != null) "-log.format ${cfg.logFormat}"}
|
||||||
|
'';
|
||||||
|
|
||||||
|
serviceConfig = {
|
||||||
|
User = cfg.user;
|
||||||
|
Group = cfg.group;
|
||||||
|
Restart = "always";
|
||||||
|
PrivateTmp = true;
|
||||||
|
WorkingDirectory = "/tmp";
|
||||||
|
ExecReload = "${pkgs.coreutils}/bin/kill -HUP $MAINPID";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
|
@ -29,6 +29,9 @@ let
|
||||||
"-storage.local.path=${cfg.dataDir}/metrics"
|
"-storage.local.path=${cfg.dataDir}/metrics"
|
||||||
"-config.file=${writePrettyJSON "prometheus.yml" promConfig}"
|
"-config.file=${writePrettyJSON "prometheus.yml" promConfig}"
|
||||||
"-web.listen-address=${cfg.listenAddress}"
|
"-web.listen-address=${cfg.listenAddress}"
|
||||||
|
"-alertmanager.notification-queue-capacity=${toString cfg.alertmanagerNotificationQueueCapacity}"
|
||||||
|
"-alertmanager.timeout=${toString cfg.alertmanagerTimeout}s"
|
||||||
|
(optionalString (cfg.alertmanagerURL != []) "-alertmanager.url=${concatStringsSep "," cfg.alertmanagerURL}")
|
||||||
];
|
];
|
||||||
|
|
||||||
promTypes.globalConfig = types.submodule {
|
promTypes.globalConfig = types.submodule {
|
||||||
|
@ -388,6 +391,30 @@ in {
|
||||||
A list of scrape configurations.
|
A list of scrape configurations.
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
alertmanagerURL = mkOption {
|
||||||
|
type = types.listOf types.str;
|
||||||
|
default = [];
|
||||||
|
description = ''
|
||||||
|
List of Alertmanager URLs to send notifications to.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
alertmanagerNotificationQueueCapacity = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 10000;
|
||||||
|
description = ''
|
||||||
|
The capacity of the queue for pending alert manager notifications.
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
alertmanagerTimeout = mkOption {
|
||||||
|
type = types.int;
|
||||||
|
default = 10;
|
||||||
|
description = ''
|
||||||
|
Alert manager HTTP API timeout (in seconds).
|
||||||
|
'';
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue