mirror of https://gitlab.crans.org/nounous/nixos
104 lines
3.4 KiB
Nix
104 lines
3.4 KiB
Nix
{ config, lib, pkgs, ... }:
|
|
|
|
let
|
|
mkScrapeConfig = name: config: let
|
|
relabelAddress = lib.optional (builtins.hasAttr "replacementAddress" config) {
|
|
source_labels = [ "__address__" ];
|
|
target_label = "__address__";
|
|
replacement = config.replacementAddress;
|
|
};
|
|
relabelTarget = lib.optional (builtins.hasAttr "replacementTarget" config) {
|
|
source_labels = [ "__address__" ];
|
|
target_label = "__param_target";
|
|
replacement = config.replacementTarget;
|
|
};
|
|
in {
|
|
job_name = name;
|
|
metrics_path = config.path or "/metrics";
|
|
static_configs = [ { targets = config.targets; } ];
|
|
params = config.params or { };
|
|
relabel_configs = [
|
|
{ source_labels = [ "__address__" ]; target_label = "instance"; }
|
|
# { source_labels = [ "__address__" ]; target_label = "__param_target"; }
|
|
# { source_labels = [ "__param_target" ]; target_label = "instance"; }
|
|
] ++ relabelTarget ++ relabelAddress;
|
|
scrape_timeout = config.timeout or "15s";
|
|
scrape_interval = config.interval or "1m";
|
|
};
|
|
mkScrapeConfigs = lib.attrsets.mapAttrsToList mkScrapeConfig;
|
|
critical = { severity = "critical"; };
|
|
warning = { severity = "warning"; };
|
|
mkRuleGroups = lib.attrsets.mapAttrsToList (name: path: {
|
|
inherit name;
|
|
rules = let
|
|
rules = import path { inherit critical warning; };
|
|
alerts = lib.attrsets.mapAttrsToList
|
|
(alert: attrs: attrs // { inherit alert; })
|
|
(rules.alerts or {});
|
|
records = lib.attrsets.mapAttrsToList
|
|
(record: attrs: attrs // { inherit record; })
|
|
(rules.records or {});
|
|
in alerts ++ records;
|
|
});
|
|
in
|
|
{
|
|
age.secrets.snmp-env = {
|
|
file = ../../../secrets/victoriametrics/snmp.age;
|
|
owner = "root";
|
|
group = "root";
|
|
};
|
|
|
|
networking.firewall.allowedTCPPorts = [ 8428 9116 ];
|
|
|
|
services.victoriametrics = let
|
|
scrapeConfigs = mkScrapeConfigs (import ./scrape.nix {});
|
|
in {
|
|
enable = true;
|
|
retentionPeriod = "30d";
|
|
extraOptions = [
|
|
"-enableTCP6"
|
|
# Compatibilité avec la datasource Prometheus de Grafana
|
|
"-vmalert.proxyURL=http://localhost:8880"
|
|
];
|
|
prometheusConfig.scrape_configs = scrapeConfigs;
|
|
};
|
|
|
|
services.vmalert.instances.default = {
|
|
enable = true;
|
|
rules.groups = mkRuleGroups (import ./rules {});
|
|
settings = let
|
|
victoriametricsUrl = "http://localhost:8428";
|
|
in {
|
|
"datasource.url" = victoriametricsUrl;
|
|
"remoteWrite.url" = victoriametricsUrl;
|
|
"remoteRead.url" = victoriametricsUrl;
|
|
"enableTCP6" = true;
|
|
#"notifier.url" = [ "http://docker-ovh.adm.auro.re:9093" ]; # A MODIFIER #####################################
|
|
};
|
|
};
|
|
|
|
services.prometheus.exporters.snmp = let
|
|
generator = import ./snmp.nix {};
|
|
configSnmp = pkgs.runCommand "snmp.yml" { # Nous avons des doutes sur ce fichier? faut-il l'importer?
|
|
nativeBuildInputs = [ pkgs.prometheus-snmp-exporter ];
|
|
generator = builtins.toJSON generator;
|
|
passAsFile = [ "generator" ];
|
|
} ''
|
|
${lib.getExe' pkgs.prometheus-snmp-exporter "generator"} \
|
|
generate \
|
|
--mibs-dir=${./mibs} \
|
|
--generator-path=$generatorPath \
|
|
--output-path=$out
|
|
'';
|
|
in {
|
|
enable = true;
|
|
enableConfigCheck = false;
|
|
environmentFile = config.age.secrets.snmp-env.path;
|
|
configurationPath = configSnmp;
|
|
};
|
|
|
|
environment.systemPackages = with pkgs; [
|
|
net-snmp
|
|
];
|
|
}
|