2023-09-05 17:08:43 +01:00
|
|
|
{ config, pkgs, ... }: {
|
|
|
|
imports = [
|
|
|
|
./hardware.nix
|
|
|
|
./networking.nix # generated at runtime by nixos-infect
|
|
|
|
];
|
|
|
|
|
2023-09-13 23:01:51 +01:00
|
|
|
age.secrets.healthchecks-secret = {
|
|
|
|
file = ../../secrets/monitoring-healthchecks-secret.age;
|
|
|
|
owner = "healthchecks";
|
|
|
|
};
|
|
|
|
|
2023-09-15 09:21:50 +01:00
|
|
|
age.secrets.prometheus-webconfig-secret = {
|
|
|
|
file = ../../secrets/monitoring-prometheus-webconfig.age;
|
|
|
|
owner = "prometheus";
|
|
|
|
};
|
|
|
|
|
2023-09-05 17:08:43 +01:00
|
|
|
boot.tmp.cleanOnBoot = true;
|
|
|
|
zramSwap.enable = true;
|
|
|
|
networking.hostName = "monitoring";
|
|
|
|
networking.domain = "";
|
|
|
|
services.openssh.enable = true;
|
|
|
|
users.users.root.openssh.authorizedKeys.keys = [
|
|
|
|
''ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDjEgtIWPA5Ncs/KOcMeT6Q/HACJJetDOLjMvXXwUE+08oTX1EpHrWPpy8J+UHKIyErCNPYq8dgtrbhnMRlxHqI=''
|
|
|
|
];
|
|
|
|
networking.firewall.enable = false;
|
|
|
|
|
|
|
|
services.grafana = {
|
|
|
|
enable = true;
|
|
|
|
settings.server = {
|
|
|
|
domain = "grafana.gmem.ca";
|
|
|
|
http_port = 2342;
|
|
|
|
http_addr = "127.0.0.1";
|
|
|
|
};
|
|
|
|
};
|
|
|
|
services.prometheus = {
|
|
|
|
enable = true;
|
2023-09-15 09:21:50 +01:00
|
|
|
webConfigFile = config.age.secrets.prometheus-webconfig-secret.path;
|
2023-09-05 17:08:43 +01:00
|
|
|
globalConfig = {
|
|
|
|
scrape_interval = "15s";
|
|
|
|
};
|
2023-09-15 09:21:50 +01:00
|
|
|
# alertmanager = {
|
|
|
|
# enable = true;
|
|
|
|
# listenAddress = "localhost";
|
|
|
|
# };
|
2023-09-05 17:08:43 +01:00
|
|
|
port = 9001;
|
|
|
|
extraFlags = [ "--web.enable-remote-write-receiver" ];
|
|
|
|
scrapeConfigs = [
|
|
|
|
{
|
2023-09-13 23:01:51 +01:00
|
|
|
job_name = "personal_hardware";
|
|
|
|
static_configs = [ { targets = [ "london:9100" "vancouver:9100" "localhost:9100" ]; } ];
|
2023-09-05 17:08:43 +01:00
|
|
|
}
|
|
|
|
{
|
|
|
|
job_name = "speedtest-exporter";
|
|
|
|
scrape_interval = "1h";
|
|
|
|
scrape_timeout = "1m";
|
|
|
|
static_configs = [ { targets = [ "vancouver:9798" ]; } ];
|
|
|
|
}
|
2023-09-13 23:01:51 +01:00
|
|
|
{
|
|
|
|
job_name = "syncthing";
|
|
|
|
static_configs = [ { targets = [ "vancouver:8384" "london:8384" ]; } ];
|
|
|
|
}
|
2023-09-05 17:08:43 +01:00
|
|
|
{
|
|
|
|
job_name = "forgejo";
|
|
|
|
static_configs = [ { targets = [ "git.gmem.ca" ]; } ];
|
|
|
|
}
|
2023-09-15 09:22:02 +01:00
|
|
|
{
|
|
|
|
job_name = "coredns";
|
|
|
|
static_configs = [ { targets = [ "vancouver:9253" ]; } ];
|
|
|
|
}
|
2023-09-13 23:01:51 +01:00
|
|
|
{
|
|
|
|
job_name = "healthchecks";
|
|
|
|
scrape_interval = "60s";
|
2023-09-13 23:17:37 +01:00
|
|
|
metrics_path = "/projects/5f1de50f-a52d-4215-961f-aae7cc6cf6c9/metrics/TbMoU7SUdknzMe-H5Q4HzmKl3itOIrJk";
|
2023-09-13 23:01:51 +01:00
|
|
|
static_configs = [ { targets = [ "localhost:8000" ]; } ];
|
|
|
|
}
|
2023-09-05 17:08:43 +01:00
|
|
|
{
|
|
|
|
job_name = "blackbox";
|
|
|
|
metrics_path = "/probe";
|
|
|
|
params = { "modules" = [ "http_2xx" ]; };
|
|
|
|
static_configs = [ { targets = [ "google.com" "gabrielsimmer.com" "artbybecki.com" ]; } ];
|
|
|
|
relabel_configs = [
|
|
|
|
{ source_labels = ["__address__"]; target_label = "__param_target"; }
|
|
|
|
{ source_labels = ["__param_target"]; target_label = "instance"; }
|
|
|
|
{ source_labels = []; target_label = "__address__"; replacement = "vancouver:9115"; } ];
|
|
|
|
}
|
|
|
|
];
|
|
|
|
exporters.node = {
|
|
|
|
enable = true;
|
|
|
|
listenAddress = "127.0.0.1";
|
|
|
|
enabledCollectors = [
|
|
|
|
"systemd" "processes"
|
|
|
|
];
|
|
|
|
};
|
|
|
|
};
|
|
|
|
services.tailscale.enable = true;
|
2023-09-13 23:01:51 +01:00
|
|
|
|
|
|
|
services.healthchecks = {
|
|
|
|
enable = true;
|
|
|
|
settings = {
|
|
|
|
SECRET_KEY_FILE = config.age.secrets.healthchecks-secret.path;
|
|
|
|
SITE_ROOT = "https://healthchecks.gmem.ca";
|
2023-09-13 23:17:37 +01:00
|
|
|
SITE_NAME = "Arch's Healthchecks";
|
2023-09-13 23:01:51 +01:00
|
|
|
};
|
|
|
|
};
|
2023-09-05 17:08:43 +01:00
|
|
|
|
|
|
|
# nginx reverse proxy
|
|
|
|
services.nginx = {
|
|
|
|
enable = true;
|
|
|
|
recommendedGzipSettings = true;
|
|
|
|
recommendedBrotliSettings = true;
|
|
|
|
recommendedZstdSettings = true;
|
|
|
|
recommendedOptimisation = true;
|
|
|
|
recommendedTlsSettings = true;
|
|
|
|
recommendedProxySettings = true;
|
2023-09-13 23:01:51 +01:00
|
|
|
virtualHosts.${config.services.grafana.settings.server.domain} = {
|
2023-09-05 17:08:43 +01:00
|
|
|
default = true;
|
|
|
|
enableACME = true;
|
|
|
|
forceSSL = true;
|
|
|
|
locations."/" = {
|
2023-09-13 23:01:51 +01:00
|
|
|
proxyPass = "http://127.0.0.1:${toString config.services.grafana.settings.server.http_port}";
|
|
|
|
proxyWebsockets = true;
|
|
|
|
};
|
|
|
|
};
|
2023-09-15 09:22:02 +01:00
|
|
|
|
2023-09-13 23:01:51 +01:00
|
|
|
virtualHosts."healthchecks.gmem.ca" = {
|
|
|
|
enableACME = true;
|
|
|
|
forceSSL = true;
|
|
|
|
locations."/" = {
|
|
|
|
proxyPass = "http://127.0.0.1:8000";
|
2023-09-05 17:08:43 +01:00
|
|
|
proxyWebsockets = true;
|
|
|
|
};
|
2023-09-13 23:17:37 +01:00
|
|
|
locations."~ \/projects\/.+\/metrics\/.+" = {
|
|
|
|
extraConfig = "deny all;";
|
|
|
|
};
|
2023-09-05 17:08:43 +01:00
|
|
|
};
|
|
|
|
};
|
|
|
|
security.acme.acceptTerms = true;
|
|
|
|
security.acme.defaults.email = "acme@gmem.ca";
|
|
|
|
|
|
|
|
system.stateVersion = "23.11";
|
|
|
|
}
|