2026-07-30 12:13:01 +02:00
{
2026-08-20 12:00:00 +00:00
"uid" : "pterodactyl-server" ,
"title" : "Gameserver" ,
"description" : "Zustand, Spieler und Auslastung je Gameserver (management #0002). Neu gebaut am 2026-08-20: Die vorherige Fassung fragte pterodactyl_server_cpu_absolute und zehn weitere Metriken des loens2-Exporters ab - der hat nie funktioniert (Client-API mit Application-Key ueber http), das Dashboard war seit jeher leer. Jetzt auf dem Exporter, der die Panel-Datenbank liest, plus den Recording Rules gameserver:*, die den Join Container-UUID -> Klarname vorwegnehmen." ,
"tags" : [ "gameserver" , "pterodactyl" ],
"timezone" : "browser" ,
"schemaVersion" : 41 ,
"editable" : true ,
"time" : { "from" : "now-6h" , "to" : "now" },
"refresh" : "1m" ,
2026-07-30 12:13:01 +02:00
"panels" : [
{
2026-08-20 12:00:00 +00:00
"type" : "stat" ,
"title" : "Server" ,
"gridPos" : { "h" : 4 , "w" : 6 , "x" : 0 , "y" : 0 },
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
2026-07-30 12:13:01 +02:00
"targets" : [
{
2026-08-20 12:00:00 +00:00
"refId" : "A" ,
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"instant" : true ,
"expr" : "count(pterodactyl_server_info)"
2026-07-30 12:13:01 +02:00
}
],
2026-08-20 12:00:00 +00:00
"options" : { "reduceOptions" : { "calcs" : [ "lastNotNull" ] }, "colorMode" : "none" , "graphMode" : "none" },
"fieldConfig" : { "defaults" : { "unit" : "short" }, "overrides" : [] }
2026-07-30 12:13:01 +02:00
},
{
2026-08-20 12:00:00 +00:00
"type" : "stat" ,
"title" : "laufend" ,
"gridPos" : { "h" : 4 , "w" : 6 , "x" : 6 , "y" : 0 },
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
2026-07-30 12:13:01 +02:00
"targets" : [
{
2026-08-20 12:00:00 +00:00
"refId" : "A" ,
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"instant" : true ,
"expr" : "sum(pterodactyl_server_status)"
2026-07-30 12:13:01 +02:00
}
],
2026-08-20 12:00:00 +00:00
"options" : { "reduceOptions" : { "calcs" : [ "lastNotNull" ] }, "colorMode" : "value" , "graphMode" : "none" },
2026-07-30 12:13:01 +02:00
"fieldConfig" : {
"defaults" : {
2026-08-20 12:00:00 +00:00
"unit" : "short" ,
"thresholds" : { "mode" : "absolute" , "steps" : [ { "color" : "text" , "value" : null }, { "color" : "green" , "value" : 1 } ] }
2026-07-30 12:13:01 +02:00
},
"overrides" : []
}
2026-08-20 12:00:00 +00:00
},
{
"type" : "stat" ,
"title" : "Spieler online" ,
"description" : "Nur Server, deren Abfrage geantwortet hat. Der Vergleich > -1 filtert NaN heraus - ein gestoppter Server liefert NaN und wuerde die Summe sonst unbrauchbar machen." ,
"gridPos" : { "h" : 4 , "w" : 6 , "x" : 12 , "y" : 0 },
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"targets" : [
{
"refId" : "A" ,
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"instant" : true ,
"expr" : "sum(pterodactyl_server_players > -1)"
}
],
"options" : { "reduceOptions" : { "calcs" : [ "lastNotNull" ] }, "colorMode" : "value" , "graphMode" : "none" },
"fieldConfig" : {
"defaults" : {
"unit" : "short" ,
"thresholds" : { "mode" : "absolute" , "steps" : [ { "color" : "text" , "value" : null }, { "color" : "blue" , "value" : 1 } ] }
},
"overrides" : []
}
},
{
"type" : "stat" ,
"title" : "Abfrage fehlgeschlagen" ,
"description" : "Server, deren Spielabfrage nicht antwortet. Bei gestoppten Servern normal; bei einem laufenden Server ein Hinweis auf ein Problem." ,
"gridPos" : { "h" : 4 , "w" : 6 , "x" : 18 , "y" : 0 },
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"targets" : [
{
"refId" : "A" ,
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"instant" : true ,
"expr" : "count(pterodactyl_server_query_success == 0) or vector(0)"
}
],
"options" : { "reduceOptions" : { "calcs" : [ "lastNotNull" ] }, "colorMode" : "background" , "graphMode" : "none" },
"fieldConfig" : {
"defaults" : {
"unit" : "short" ,
"thresholds" : { "mode" : "absolute" , "steps" : [ { "color" : "green" , "value" : null }, { "color" : "orange" , "value" : 1 } ] }
},
"overrides" : []
}
},
{
"type" : "table" ,
"title" : "Server im Einzelnen" ,
"description" : "Zustand mit Spiel, Version und Port. Die Zusatzangaben kommen ueber einen Join auf pterodactyl_server_info - status allein traegt nur server_id und server_name." ,
"gridPos" : { "h" : 8 , "w" : 24 , "x" : 0 , "y" : 4 },
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"targets" : [
{
"refId" : "A" ,
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"instant" : true ,
"format" : "table" ,
"expr" : "pterodactyl_server_status * on(server_id) group_left(game, version, port) pterodactyl_server_info"
}
],
"transformations" : [
{
"id" : "organize" ,
"options" : {
"excludeByName" : { "Time" : true , "__name__" : true , "host" : true , "instance" : true , "job" : true , "server_id" : true },
"renameByName" : {
"server_name" : "Server" ,
"game" : "Spiel" ,
"version" : "Version" ,
"port" : "Port" ,
"Value" : "Zustand"
}
}
}
],
"fieldConfig" : {
"defaults" : {},
"overrides" : [
{
"matcher" : { "id" : "byName" , "options" : "Zustand" },
"properties" : [
{
"id" : "mappings" ,
"value" : [
{ "type" : "value" , "options" : { "0" : { "text" : "gestoppt" , "color" : "text" , "index" : 0 }, "1" : { "text" : "läuft" , "color" : "green" , "index" : 1 } } }
]
},
{ "id" : "custom.cellOptions" , "value" : { "type" : "color-text" } }
]
}
]
}
},
{
"type" : "timeseries" ,
"title" : "Spieler" ,
"gridPos" : { "h" : 8 , "w" : 12 , "x" : 0 , "y" : 12 },
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"targets" : [
{
"refId" : "A" ,
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"legendFormat" : "{{server_name}}" ,
"expr" : "pterodactyl_server_players > -1"
}
],
"fieldConfig" : {
"defaults" : { "unit" : "short" , "min" : 0 , "custom" : { "drawStyle" : "line" , "lineWidth" : 2 , "fillOpacity" : 10 , "showPoints" : "never" } },
"overrides" : []
},
"options" : { "legend" : { "displayMode" : "list" , "placement" : "bottom" , "showLegend" : true }, "tooltip" : { "mode" : "multi" } }
},
{
"type" : "timeseries" ,
"title" : "CPU-Kerne" ,
"description" : "Aus der Recording Rule gameserver:cpu_cores - sie nimmt den Join Container-UUID -> Klarname vorweg, weil cAdvisor die Gameserver nur unter ihrer UUID kennt." ,
"gridPos" : { "h" : 8 , "w" : 12 , "x" : 12 , "y" : 12 },
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"targets" : [
{
"refId" : "A" ,
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"legendFormat" : "{{server_name}}" ,
"expr" : "gameserver:cpu_cores"
}
],
"fieldConfig" : {
"defaults" : { "unit" : "short" , "min" : 0 , "custom" : { "drawStyle" : "line" , "lineWidth" : 2 , "fillOpacity" : 10 , "showPoints" : "never" } },
"overrides" : []
},
"options" : { "legend" : { "displayMode" : "list" , "placement" : "bottom" , "showLegend" : true }, "tooltip" : { "mode" : "multi" } }
},
{
"type" : "timeseries" ,
"title" : "Arbeitsspeicher" ,
"description" : "Belegung und, wo gesetzt, das Limit. Nicht jeder Server hat eines - dann fehlt die gestrichelte Linie." ,
"gridPos" : { "h" : 8 , "w" : 12 , "x" : 0 , "y" : 20 },
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"targets" : [
{
"refId" : "A" ,
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"legendFormat" : "{{server_name}}" ,
"expr" : "gameserver:memory_working_set_bytes"
},
{
"refId" : "B" ,
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"legendFormat" : "{{server_name}} — Limit" ,
"expr" : "gameserver:memory_limit_bytes"
}
],
"fieldConfig" : {
"defaults" : { "unit" : "bytes" , "min" : 0 , "custom" : { "drawStyle" : "line" , "lineWidth" : 2 , "fillOpacity" : 10 , "showPoints" : "never" } },
"overrides" : [
{
"matcher" : { "id" : "byRegexp" , "options" : ".*Limit" },
"properties" : [
{ "id" : "custom.fillOpacity" , "value" : 0 },
{ "id" : "custom.lineStyle" , "value" : { "dash" : [ 8 , 6 ], "fill" : "dash" } }
]
}
]
},
"options" : { "legend" : { "displayMode" : "list" , "placement" : "bottom" , "showLegend" : true }, "tooltip" : { "mode" : "multi" } }
},
{
"type" : "timeseries" ,
"title" : "Netzwerk" ,
"description" : "Eingehend positiv, ausgehend negativ aufgetragen." ,
"gridPos" : { "h" : 8 , "w" : 12 , "x" : 12 , "y" : 20 },
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"targets" : [
{
"refId" : "A" ,
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"legendFormat" : "{{server_name}} — ein" ,
"expr" : "gameserver:network_receive_bytes_per_second"
},
{
"refId" : "B" ,
"datasource" : { "type" : "prometheus" , "uid" : "belof8d814dtse" },
"legendFormat" : "{{server_name}} — aus" ,
"expr" : "- gameserver:network_transmit_bytes_per_second"
}
],
"fieldConfig" : {
"defaults" : { "unit" : "Bps" , "custom" : { "drawStyle" : "line" , "lineWidth" : 1 , "fillOpacity" : 15 , "showPoints" : "never" } },
"overrides" : []
},
"options" : { "legend" : { "displayMode" : "list" , "placement" : "bottom" , "showLegend" : true }, "tooltip" : { "mode" : "multi" } }
}
]
}