2024-06-28 19:12:55 +01:00
|
|
|
{
|
|
|
|
config,
|
|
|
|
pkgs,
|
|
|
|
lib,
|
|
|
|
...
|
|
|
|
}:
|
|
|
|
let
|
2023-10-07 21:14:43 +01:00
|
|
|
yaml = pkgs.formats.yaml { };
|
2024-06-28 19:12:55 +01:00
|
|
|
in
|
2023-10-07 21:14:43 +01:00
|
|
|
{
|
|
|
|
services.prometheus = {
|
|
|
|
exporters = {
|
|
|
|
# Periodically check domain registration status
|
|
|
|
domain = {
|
|
|
|
enable = true;
|
|
|
|
listenAddress = "127.0.0.1";
|
|
|
|
extraFlags =
|
|
|
|
let
|
|
|
|
conf.domains = [
|
|
|
|
"tlater.net"
|
|
|
|
"tlater.com"
|
2024-06-28 19:12:55 +01:00
|
|
|
];
|
|
|
|
in
|
2023-10-07 21:14:43 +01:00
|
|
|
[ "--config=${yaml.generate "domains.yml" conf}" ];
|
|
|
|
};
|
|
|
|
|
|
|
|
# System statistics
|
|
|
|
node = {
|
|
|
|
enable = true;
|
|
|
|
listenAddress = "127.0.0.1";
|
|
|
|
};
|
|
|
|
systemd = {
|
|
|
|
enable = true;
|
|
|
|
listenAddress = "127.0.0.1";
|
|
|
|
extraFlags = [
|
|
|
|
# Disabled by default because only supported from systemd 235+
|
|
|
|
"--systemd.collector.enable-restart-count"
|
|
|
|
"--systemd.collector.enable-ip-accounting"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
|
|
|
|
# Various nginx metrics
|
|
|
|
nginx = {
|
|
|
|
enable = true;
|
|
|
|
listenAddress = "127.0.0.1";
|
|
|
|
};
|
|
|
|
|
|
|
|
nginxlog = {
|
|
|
|
enable = true;
|
|
|
|
listenAddress = "127.0.0.1";
|
|
|
|
group = "nginx";
|
|
|
|
|
|
|
|
settings.namespaces = lib.mapAttrsToList (name: virtualHost: {
|
|
|
|
inherit name;
|
|
|
|
metrics_override.prefix = "nginxlog";
|
|
|
|
namespace_label = "vhost";
|
|
|
|
|
|
|
|
format = lib.concatStringsSep " " [
|
|
|
|
"$remote_addr - $remote_user [$time_local]"
|
|
|
|
''"$request" $status $body_bytes_sent''
|
|
|
|
''"$http_referer" "$http_user_agent"''
|
|
|
|
''rt=$request_time uct="$upstream_connect_time"''
|
|
|
|
''uht="$upstream_header_time" urt="$upstream_response_time"''
|
|
|
|
];
|
|
|
|
|
|
|
|
source.files = [ "/var/log/nginx/${name}/access.log" ];
|
|
|
|
}) config.services.nginx.virtualHosts;
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
extraExporters = {
|
|
|
|
fail2ban =
|
|
|
|
let
|
|
|
|
cfg = config.services.prometheus.extraExporters.fail2ban;
|
|
|
|
in
|
|
|
|
{
|
|
|
|
port = 9191;
|
|
|
|
serviceOpts = {
|
|
|
|
after = [ "fail2ban.service" ];
|
|
|
|
requires = [ "fail2ban.service" ];
|
|
|
|
serviceConfig = {
|
|
|
|
Group = "fail2ban";
|
|
|
|
RestrictAddressFamilies = [
|
|
|
|
"AF_UNIX"
|
|
|
|
"AF_INET"
|
|
|
|
"AF_INET6"
|
|
|
|
];
|
|
|
|
ExecStart = lib.concatStringsSep " " [
|
|
|
|
"${pkgs.local.prometheus-fail2ban-exporter}/bin/fail2ban-prometheus-exporter"
|
|
|
|
"--collector.f2b.socket=/var/run/fail2ban/fail2ban.sock"
|
|
|
|
"--web.listen-address='${cfg.listenAddress}:${toString cfg.port}'"
|
|
|
|
"--collector.f2b.exit-on-socket-connection-error=true"
|
|
|
|
];
|
2024-06-28 19:12:55 +01:00
|
|
|
};
|
2023-10-07 21:14:43 +01:00
|
|
|
};
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
# TODO(tlater):
|
|
|
|
# - wireguard (?)
|
|
|
|
# - postgres (?)
|
|
|
|
# - blackbox (?) (curl to see if http and similar is up)
|
|
|
|
# - ssl_exporter (?)
|
|
|
|
};
|
|
|
|
}
|