infra/config/services/monitoring.nix
2024-09-11 09:05:52 +02:00

114 lines
3 KiB
Nix

{config, ...}: {
services.grafana = {
enable = true;
settings = {
server = {
http_addr = "127.0.0.1";
http_port = 21983;
domain = "grafana.winston.sh";
serve_from_sub_path = true;
};
};
provision = {
enable = true;
datasources.settings.datasources = [
# "Built-in" datasources can be provisioned - c.f. https://grafana.com/docs/grafana/latest/administration/provisioning/#data-sources
{
name = "Prometheus";
type = "prometheus";
url = "http://${config.services.prometheus.listenAddress}:${toString config.services.prometheus.port}";
}
];
};
};
services.nginx.statusPage = true;
services.prometheus = {
enable = true;
globalConfig.scrape_interval = "10s";
scrapeConfigs = [
{
job_name = "nginx";
static_configs = [
{
targets = ["localhost:${toString config.services.prometheus.exporters.nginx.port}"];
}
];
}
{
job_name = "nginxlog";
static_configs = [
{
targets = ["localhost:${toString config.services.prometheus.exporters.nginxlog.port}"];
}
];
}
{
job_name = "node";
static_configs = [
{
targets = ["localhost:${toString config.services.prometheus.exporters.node.port}"];
}
];
}
# {
# job_name = "minio";
# static_configs = [
# {
# targets = ["localhost:${toString config.services.prometheus.exporters.minio.port}"];
# }
# ];
# }
# {
# job_name = "postgres";
# static_configs = [
# {
# targets = ["localhost:${toString config.services.prometheus.exporters.postgres.port}"];
# }
# ];
# }
];
exporters = {
nginx.enable = true;
nginxlog = {
enable = true;
group = "nginx";
settings.namespaces = [
{
name = "filelogger";
format = "$remote_addr - $remote_user [$time_local] \"$request\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\"";
source.files = ["/var/log/nginx/access.log"];
}
];
};
# FIXME: set up auth!
# minio.enable = true;
# postgres = {
# enable = true;
# dataSourceName = "postgresql://localhost:5432/postgres?sslmode=disable";
# };
};
exporters.node = {
enable = true;
port = 9000;
enabledCollectors = ["processes" "systemd"];
};
};
services.nginx.virtualHosts.${config.services.grafana.settings.server.domain} = {
forceSSL = true;
enableACME = false;
useACMEHost = "winston.sh";
locations."/" = {
proxyPass = "http://${toString config.services.grafana.settings.server.http_addr}:${toString config.services.grafana.settings.server.http_port}";
proxyWebsockets = true;
recommendedProxySettings = true;
};
};
}