Skip to content

6. Custom dashboards

Vincenzo Reina edited this page May 5, 2025 · 6 revisions

Custom Dashboards

Default Dashboards

Bukkit/Paper Dashboards

  • Bukkit Server Metrics: TPS, memory, disk space, entities, chunks
  • Bukkit Players and Ping: Player count and ping statistics

Velocity Dashboards

  • Velocity System Metrics: Memory and disk usage
  • Velocity Players and Ping: Player count and ping statistics

Creating Simple Custom Dashboards

  1. In Grafana, click "+ New Dashboard"
  2. Click "Add visualization"
  3. Select "InfluxDB_v2_Flux" data source
  4. Create a basic query:
from(bucket: "metrics_db")
  |> range(start: v.timeRangeStart)
  |> filter(fn: (r) => r._measurement == "minecraft_stats")
  |> filter(fn: (r) => r._field == "your_metric_here")
  |> filter(fn: (r) => r.server == "your-server-name")

Common Metrics

Bukkit/Paper Metrics

  • TPS: tps_1m, tps_5m, tps_15m
  • World data: entities_count, loaded_chunks

Common Metrics (Both Platforms)

  • Memory: used_memory, available_memory
  • Disk: total_disk_space, usable_disk_space
  • Players: players_online
  • Ping: min_ping, max_ping, avg_ping

Quick Examples

TPS Graph (Bukkit/Paper)

from(bucket: "metrics_db")
  |> range(start: v.timeRangeStart)
  |> filter(fn: (r) => r._measurement == "minecraft_stats")
  |> filter(fn: (r) => r._field == "tps_1m")
  |> filter(fn: (r) => r.server == "bed1")

Online Players (Both)

from(bucket: "metrics_db")
  |> range(start: v.timeRangeStart)
  |> filter(fn: (r) => r._measurement == "minecraft_stats")
  |> filter(fn: (r) => r._field == "players_online")
  |> filter(fn: (r) => r.server == "velocity1")

Memory Usage (Both)

from(bucket: "metrics_db")
  |> range(start: v.timeRangeStart)
  |> filter(fn: (r) => r._measurement == "minecraft_stats")
  |> filter(fn: (r) => r._field == "used_memory")
  |> filter(fn: (r) => r.server == "bed1")

Average Ping (Both)

from(bucket: "metrics_db")
  |> range(start: v.timeRangeStart)
  |> filter(fn: (r) => r._measurement == "minecraft_stats")
  |> filter(fn: (r) => r._field == "avg_ping")
  |> filter(fn: (r) => r.server == "velocity1")

Multi-Server Dashboard

To show metrics from multiple servers:

  1. Add dashboard variable named "server"
  2. In queries, replace server name with: ${server}

Example with variable:

from(bucket: "metrics_db")
  |> range(start: v.timeRangeStart)
  |> filter(fn: (r) => r._measurement == "minecraft_stats")
  |> filter(fn: (r) => r._field == "players_online")
  |> filter(fn: (r) => r.server == "${server}")