{ 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; } ]; }; }; }