service/alertmanager: init

This commit is contained in:
Felix Buehler 2023-04-27 23:12:00 +02:00
parent a1731f0c2e
commit af8526bcb8
4 changed files with 119 additions and 0 deletions

View file

@ -0,0 +1,91 @@
# monitoring system services
{ config, lib, pkgs, ... }:
let
cfg = config.my.services.alertmanager;
domain = config.networking.domain;
in
{
options.my.services.alertmanager = with lib; {
enable = mkEnableOption "Prometheus alertmanager for monitoring";
port = mkOption {
type = types.port;
default = 9093;
example = 3002;
description = "Internal alertmanager port";
};
};
config = lib.mkIf cfg.enable {
assertions = [
{
assertion = config.services.prometheus.enable;
message = ''
Enable alertmanager without prometheus does not work. Please enable prometheus as well.
'';
}
];
services.prometheus = {
alertmanager = {
enable = true;
listenAddress = "127.0.0.1";
port = cfg.port;
configuration = import ./config.nix;
webExternalUrl = "https://alerts.${domain}";
# fix issue: https://gitlab.com/gitlab-org/omnibus-gitlab/-/issues/4556
extraFlags = [ "--cluster.advertise-address 127.0.0.1:${toString cfg.port}" ];
};
alertmanagers = [
{
static_configs = [
{
targets = [ "localhost:${toString cfg.port}" ];
}
];
}
];
scrapeConfigs = [
{
job_name = "alertmanager";
static_configs = [{
targets = [ "127.0.0.1:${toString cfg.port}" ];
labels = {
instance = config.networking.hostName;
};
}];
}
];
};
services.grafana.provision = {
datasources.settings.datasources = [
{
name = "Alertmanager";
type = "alertmanager";
url = "http://127.0.0.1:${toString cfg.port}";
jsonData = {
implementation = "prometheus";
handleGrafanaManagedAlerts = config.services.prometheus.enable;
};
}
];
};
my.services.nginx.virtualHosts = [
{
subdomain = "alerts";
inherit (cfg) port;
}
];
webapps.apps = {
alertmanager.dashboard = {
name = "Alerting";
category = "infra";
icon = "bell";
link = "https://alerts.${domain}";
method = "get";
};
};
};
}