compsigh-minecraft/modules/monitoring.nix

118 lines
2.9 KiB
Nix

{ config, pkgs, ... }:
{
# Minecraft Prometheus exporter (player count, server status, ping)
virtualisation.oci-containers.containers.mc-monitor = {
image = "itzg/mc-monitor:latest";
extraOptions = [ "--network=host" ];
dependsOn = [ "minecraft" ];
cmd = [ "export-for-prometheus" "--servers" "localhost:25565" "--port" "9150" ];
};
# Container metrics (CPU, memory, network, disk I/O per container)
services.cadvisor = {
enable = true;
port = 9180;
};
services.prometheus = {
enable = true;
port = 9090;
retentionTime = "30d";
extraFlags = [ "--storage.tsdb.retention.size=1GB" ];
exporters = {
node = {
enable = true;
port = 9100;
enabledCollectors = [
"cpu"
"diskstats"
"filesystem"
"loadavg"
"meminfo"
"netdev"
"netstat"
"stat"
"time"
"vmstat"
"systemd"
"processes"
"interrupts"
"conntrack"
"tcpstat"
];
};
};
scrapeConfigs = [
{
job_name = "node";
static_configs = [{
targets = [ "localhost:9100" ];
labels = { instance = "minecraft-server"; };
}];
scrape_interval = "15s";
}
{
job_name = "minecraft";
static_configs = [{
targets = [ "localhost:9150" ];
labels = { instance = "minecraft-server"; };
}];
scrape_interval = "15s";
}
{
job_name = "cadvisor";
static_configs = [{
targets = [ "localhost:9180" ];
labels = { instance = "minecraft-server"; };
}];
scrape_interval = "15s";
}
];
};
services.grafana = {
enable = true;
settings = {
server = {
http_addr = "127.0.0.1";
http_port = 3000;
domain = "status.mc.compsigh.club";
root_url = "https://status.mc.compsigh.club";
};
security = {
admin_user = "admin";
admin_password = "$__file{${config.age.secrets.grafana-admin-password.path}}";
secret_key = "$__file{${config.age.secrets.grafana-secret-key.path}}";
};
"auth.anonymous".enabled = false;
users.allow_sign_up = false;
};
provision = {
enable = true;
datasources.settings.datasources = [
{
name = "Prometheus";
type = "prometheus";
uid = "prometheus";
url = "http://localhost:9090";
isDefault = true;
editable = false;
}
];
dashboards.settings.providers = [
{
name = "Minecraft Server";
options.path = "${pkgs.writeTextDir "dashboards/minecraft.json"
(builtins.readFile ../configs/minecraft-dashboard.json)}/dashboards";
options.foldersFromFilesStructure = false;
}
];
};
};
}