150 lines
3.9 KiB
Nix
150 lines
3.9 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
...
|
|
}:
|
|
with config.my-lib;
|
|
let
|
|
inherit (config.my-lib.settings)
|
|
minifluxUrl
|
|
gotosocialUrl
|
|
hedgedocDomain
|
|
grafanaUrl
|
|
ntfyUrl
|
|
;
|
|
removeHttps = s: lib.removePrefix "https://" s;
|
|
in
|
|
{
|
|
config = {
|
|
sops = {
|
|
defaultSopsFile = ./secrets.yaml;
|
|
age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
|
|
secrets = {
|
|
"grafana/oauth_secret" = {
|
|
owner = "grafana";
|
|
};
|
|
};
|
|
};
|
|
|
|
custom.monitoring = {
|
|
grafana.enable = true;
|
|
loki = {
|
|
enable = true;
|
|
rules = {
|
|
sshd_closed = {
|
|
expr = ''count_over_time({unit="sshd.service"} |~ "Connection closed by authenticating user" [15m]) > 25'';
|
|
description = "More then 25 login attemps in last 15 min without success";
|
|
};
|
|
unusual_log_volume = {
|
|
expr = ''sum by (unit) (rate({unit=~".+"}[5m])) > 80'';
|
|
description = "Unit {{ $labels.unit }} is logging at an unusually high rate";
|
|
};
|
|
};
|
|
};
|
|
promtail.enable = true;
|
|
};
|
|
|
|
services.caddy.virtualHosts.${grafanaUrl}.extraConfig =
|
|
with config.services.grafana.settings.server; ''
|
|
reverse_proxy http://${http_addr}:${toString http_port}
|
|
'';
|
|
|
|
custom.prometheus = {
|
|
enable = true;
|
|
exporters = {
|
|
enable = true;
|
|
blackbox.enable = true;
|
|
node.enable = true;
|
|
};
|
|
ruleModules =
|
|
(mkCaddyRules [ { host = "thorite"; } ])
|
|
++ (mkNodeRules [ { host = "thorite"; } ])
|
|
++ (mkBlackboxRules [ { host = "thorite"; } ]);
|
|
};
|
|
|
|
services.prometheus.scrapeConfigs =
|
|
let
|
|
probeList = [
|
|
"la-00.video.namely.icu:8080"
|
|
"fre-00.video.namely.icu:8080"
|
|
"hk-00.video.namely.icu:8080"
|
|
"home.xinyang.life:8000"
|
|
];
|
|
passwordFile = config.sops.secrets."prometheus/metrics_password".path;
|
|
in
|
|
(mkScrapes [
|
|
{
|
|
name = "immich";
|
|
scheme = "http";
|
|
address = "weilite.coho-tet.ts.net";
|
|
port = 8082;
|
|
}
|
|
{
|
|
name = "restic_rest_server";
|
|
address = "backup.xinyang.life";
|
|
port = 8443;
|
|
}
|
|
{
|
|
inherit passwordFile;
|
|
name = "gotosocial";
|
|
address = removeHttps gotosocialUrl;
|
|
}
|
|
{
|
|
inherit passwordFile;
|
|
name = "miniflux";
|
|
address = removeHttps minifluxUrl;
|
|
}
|
|
{
|
|
name = "hedgedoc";
|
|
address = hedgedocDomain;
|
|
}
|
|
{
|
|
name = "ntfy";
|
|
address = removeHttps ntfyUrl;
|
|
}
|
|
{
|
|
name = "grafana-eu";
|
|
address = removeHttps grafanaUrl;
|
|
}
|
|
{
|
|
name = "loki";
|
|
scheme = "http";
|
|
address = "thorite.coho-tet.ts.net";
|
|
port = 3100;
|
|
}
|
|
])
|
|
++ (mkCaddyScrapes [
|
|
{ address = "thorite.coho-tet.ts.net"; }
|
|
{ address = "biotite.coho-tet.ts.net"; }
|
|
{ address = "weilite.coho-tet.ts.net"; }
|
|
])
|
|
++ (mkNodeScrapes [
|
|
{ address = "thorite.coho-tet.ts.net"; }
|
|
{ address = "massicot.coho-tet.ts.net"; }
|
|
{ address = "weilite.coho-tet.ts.net"; }
|
|
{ address = "hk-00.coho-tet.ts.net"; }
|
|
{ address = "la-00.coho-tet.ts.net"; }
|
|
{ address = "fra-00.coho-tet.ts.net"; }
|
|
])
|
|
++ (mkBlackboxScrapes [
|
|
{
|
|
hostAddress = "thorite.coho-tet.ts.net";
|
|
targetAddresses = probeList ++ [ "49.13.13.122:443" ];
|
|
}
|
|
{
|
|
hostAddress = "massicot.coho-tet.ts.net";
|
|
targetAddresses = probeList ++ [ "45.142.178.32:443" ];
|
|
}
|
|
{
|
|
hostAddress = "weilite.coho-tet.ts.net";
|
|
targetAddresses = [
|
|
"la-00.video.namely.icu:8080"
|
|
"fre-00.video.namely.icu:8080"
|
|
"hk-00.video.namely.icu:8080"
|
|
];
|
|
}
|
|
]);
|
|
|
|
};
|
|
}
|