Prometheus Scrape Config & Grafana Dashboard Generator
Configure node exporters, game server telemetry targets, and Alertmanager thresholds. Export production-ready Prometheus scrape configs (prometheus.yml) and turnkey Grafana dashboard JSON models with dark tactical visualizations for CS2, Minecraft, DayZ, and Rust.
Telemetry Target & Scrape Parameters
Define Prometheus endpoints, scrape intervals, and exporter port bindings.
/var/lib/grafana/dashboards/gameserver.json
Grafana v10+ schema JSON model with dark tactical theme{
"annotations": {
"list": []
},
"editable": true,
"fiscalYearStartMonth": 0,
"graphTooltip": 1,
"id": null,
"links": [],
"liveNow": false,
"panels": [
{
"id": 1,
"title": "Rust Dedicated Active Players",
"type": "stat",
"description": "Current active connected player concurrency.",
"gridPos": {
"h": 4,
"w": 6,
"x": 0,
"y": 0
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"editorMode": "code",
"expr": "rust_server_fps{instance=~\u0022$instance\u0022}",
"legendFormat": "{{instance}}",
"range": true,
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "short",
"color": {
"mode": "palette-classic"
},
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 85
}
]
}
},
"overrides": []
}
},
{
"id": 2,
"title": "Server Tickrate / FPS",
"type": "stat",
"description": "Real-time game engine execution frequency.",
"gridPos": {
"h": 4,
"w": 6,
"x": 6,
"y": 0
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"editorMode": "code",
"expr": "rust_server_players{instance=~\u0022$instance\u0022}",
"legendFormat": "{{instance}}",
"range": true,
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "players",
"color": {
"mode": "palette-classic"
},
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 85
}
]
}
},
"overrides": []
}
},
{
"id": 3,
"title": "Host CPU Saturation",
"type": "stat",
"description": "Total system CPU utilization across all physical and virtual cores.",
"gridPos": {
"h": 4,
"w": 6,
"x": 12,
"y": 0
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"editorMode": "code",
"expr": "100 - (avg(rate(node_cpu_seconds_total{mode=\u0022idle\u0022, instance=~\u0022$instance\u0022}[2m])) * 100)",
"legendFormat": "CPU Load",
"range": true,
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "percent",
"color": {
"mode": "palette-classic"
},
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 85
}
]
}
},
"overrides": []
}
},
{
"id": 4,
"title": "Host Memory Utilization",
"type": "stat",
"description": "Percentage of host physical memory actively allocated.",
"gridPos": {
"h": 4,
"w": 6,
"x": 18,
"y": 0
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"editorMode": "code",
"expr": "(1 - (node_memory_MemAvailable_bytes{instance=~\u0022$instance\u0022} / node_memory_MemTotal_bytes{instance=~\u0022$instance\u0022})) * 100",
"legendFormat": "RAM Used",
"range": true,
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "percent",
"color": {
"mode": "palette-classic"
},
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 85
}
]
}
},
"overrides": []
}
},
{
"id": 5,
"title": "Tickrate \u0026 Frame Stability Over Time",
"type": "timeseries",
"description": "Continuous history of game loop execution rate. Flat lines indicate stable performance.",
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 4
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"editorMode": "code",
"expr": "rust_server_players{instance=~\u0022$instance\u0022}",
"legendFormat": "Tickrate (Hz / FPS)",
"range": true,
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "players",
"color": {
"mode": "palette-classic"
},
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 85
}
]
}
},
"overrides": []
}
},
{
"id": 6,
"title": "Concurrent Player Population",
"type": "timeseries",
"description": "Player concurrency trends over the selected time window.",
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 4
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"editorMode": "code",
"expr": "rust_server_fps{instance=~\u0022$instance\u0022}",
"legendFormat": "Players",
"range": true,
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "short",
"color": {
"mode": "palette-classic"
},
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 85
}
]
}
},
"overrides": []
}
},
{
"id": 7,
"title": "System \u0026 Process Memory Allocation",
"type": "timeseries",
"description": "Physical memory bytes consumed by operating system and game daemon.",
"gridPos": {
"h": 8,
"w": 12,
"x": 0,
"y": 12
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"editorMode": "code",
"expr": "node_memory_MemTotal_bytes{instance=~\u0022$instance\u0022} - node_memory_MemAvailable_bytes{instance=~\u0022$instance\u0022}",
"legendFormat": "Used Memory",
"range": true,
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "bytes",
"color": {
"mode": "palette-classic"
},
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 85
}
]
}
},
"overrides": []
}
},
{
"id": 8,
"title": "rust_server_entities Tracking",
"type": "timeseries",
"description": "Total world entities (colliders, building blocks, deployables).",
"gridPos": {
"h": 8,
"w": 12,
"x": 12,
"y": 12
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"editorMode": "code",
"expr": "rust_server_entities{instance=~\u0022$instance\u0022}",
"legendFormat": "rust_server_entities",
"range": true,
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "entities",
"color": {
"mode": "palette-classic"
},
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 85
}
]
}
},
"overrides": []
}
},
{
"id": 9,
"title": "Network Traffic (Ingress / Egress)",
"type": "timeseries",
"description": "Real-time inbound gameplay and query bandwidth.",
"gridPos": {
"h": 7,
"w": 12,
"x": 0,
"y": 20
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"editorMode": "code",
"expr": "rate(node_network_receive_bytes_total{device=~\u0022eth.*|ens.*\u0022, instance=~\u0022$instance\u0022}[1m]) * 8",
"legendFormat": "RX {{device}}",
"range": true,
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "bps",
"color": {
"mode": "palette-classic"
},
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 85
}
]
}
},
"overrides": []
}
},
{
"id": 10,
"title": "Network Outbound Egress",
"type": "timeseries",
"description": "Real-time outbound player replication bandwidth.",
"gridPos": {
"h": 7,
"w": 12,
"x": 12,
"y": 20
},
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "prometheus"
},
"editorMode": "code",
"expr": "rate(node_network_transmit_bytes_total{device=~\u0022eth.*|ens.*\u0022, instance=~\u0022$instance\u0022}[1m]) * 8",
"legendFormat": "TX {{device}}",
"range": true,
"refId": "A"
}
],
"fieldConfig": {
"defaults": {
"unit": "bps",
"color": {
"mode": "palette-classic"
},
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
},
{
"color": "yellow",
"value": 70
},
{
"color": "red",
"value": 85
}
]
}
},
"overrides": []
}
}
],
"refresh": "10s",
"schemaVersion": 39,
"style": "dark",
"tags": [
"dustbowl",
"gameserver",
"rust",
"production"
],
"templating": {
"list": [
{
"current": {
"selected": false,
"value": "198.51.100.25:9100",
"text": "198.51.100.25:9100"
},
"hide": 0,
"includeAll": false,
"label": "Instance",
"multi": false,
"name": "instance",
"options": [],
"query": "label_values(node_cpu_seconds_total, instance)",
"type": "query"
}
]
},
"time": {
"from": "now-6h",
"to": "now"
},
"timepicker": {
"refresh_intervals": [
"5s",
"10s",
"30s",
"1m",
"5m",
"15m",
"30m",
"1h",
"2h",
"1d"
]
},
"timezone": "browser",
"title": "DustBowl Rust Dedicated Operations",
"uid": "db-rust-ops",
"version": 1
}Multiplayer Game Server Prometheus & Grafana Architecture
Why Aligning Scrape Intervals Matters
Multiplayer game engines operate on discrete tick loops (e.g. 20 Hz for Minecraft, 30 Hz for Rust, 64/128 Hz for CS2). Prometheus scrape intervals should typically be set to 15 seconds. Finer intervals (5 seconds) generate excessive query thread load on game daemons, while 60-second intervals can miss transient 500ms lag spikes and save hitches entirely.
Distinguishing CPU Saturation from Core Starvation
Many game server processes (like Rust and DayZ) are bottlenecked on a single primary simulation thread. A host CPU utilization of 25% on an 8-core machine may look safe, but if one CPU core is pegged at 100%, the server will drop ticks. The generated Grafana panels track per-core utilization and thread queue lengths.
Alertmanager Runbook Integration
The generated Alertmanager rules categorize anomalies by severity: warning for transient tick drops and high memory usage, and critical for process crashes or imminent out-of-memory terminations. These alerts route directly into Discord, Slack, or PagerDuty.
DustBowl Warden Managed Telemetry
In DustBowl Warden, Prometheus scrape targets and Grafana dashboards deploy automatically alongside your server clusters with zero manual configuration required.
