-
Notifications
You must be signed in to change notification settings - Fork 2
6. Custom dashboards
Vincenzo Reina edited this page Apr 21, 2025
·
7 revisions
ServerPulse includes pre-configured Grafana dashboards, but you can create custom dashboards to better suit your needs. This guide covers dashboard customization and creation.
ServerPulse provides three default dashboards:
-
Server Metrics Dashboard
- Memory usage (available/used)
- Disk space (total/usable)
- TPS (Ticks Per Second)
- Online players count
-
World Statistics Dashboard
- Entity counts per world
- Loaded chunks per world
-
Player Ping Dashboard
- Minimum ping
- Maximum ping
- Average ping
-
Create Dashboard
- Click '+ New' in the sidebar
- Select 'New Dashboard'
- Click 'Add visualization'
-
Configure Data Source
- Select 'InfluxDB_v2_Flux'
- Set bucket to 'metrics_db'
- Use 'minecraft_stats' as measurement
-
Create Basic Query
from(bucket: "metrics_db") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "minecraft_stats") |> filter(fn: (r) => r._field == "tps_1m") |> filter(fn: (r) => r.server == "your-server")
-
Customize Panel
- Set title
- Choose visualization type
- Adjust time range
- Set refresh interval
Perfect for tracking metrics over time:
from(bucket: "metrics_db")
|> range(start: v.timeRangeStart)
|> filter(fn: (r) => r._field == "tps_1m")
|> aggregateWindow(every: v.windowPeriod, fn: mean)
Good for current values:
from(bucket: "metrics_db")
|> range(start: v.timeRangeStart)
|> filter(fn: (r) => r._field == "players_online")
|> last()
Useful for resource utilization:
from(bucket: "metrics_db")
|> range(start: v.timeRangeStart)
|> filter(fn: (r) => r._field == "used_memory")
|> last()
- Click the dashboard settings icon (⚙️)
- Select 'Variables'
- Click 'Add variable'
- Common variable types:
- Server selector
- Time range picker
- World selector
- Edit panel
- Go to 'Field' tab
- Add threshold:
- Green: > 18 TPS
- Yellow: 15-18 TPS
- Red: < 15 TPS
- Edit panel
- Go to 'Panel links' section
- Add links to related dashboards or external docs
from(bucket: "metrics_db")
|> range(start: v.timeRangeStart)
|> filter(fn: (r) => r._field == "used_memory" or r._field == "available_memory")
|> aggregateWindow(every: v.windowPeriod, fn: mean)
from(bucket: "metrics_db")
|> range(start: v.timeRangeStart)
|> filter(fn: (r) => r._field == "entities_count")
|> group(columns: ["world"])
from(bucket: "metrics_db")
|> range(start: v.timeRangeStart)
|> filter(fn: (r) => r._field == "players_online")
|> timeShift(duration: 1d)
|> window(every: 1h)
-
Organization
- Use descriptive panel titles
- Group related metrics together
- Add documentation where needed
-
Performance
- Keep time ranges reasonable
- Use efficient queries
- Avoid too many panels per dashboard
-
Usability
- Add helpful tooltips
- Use consistent colors
- Include proper units
- Set appropriate refresh intervals
- [Installation(https://github.com/renvins/serverpulse/wiki/installation)]
- [Configuration(https://github.com/renvins/serverpulse/wiki/configuration)]
- [Metrics Reference(https://github.com/renvins/serverpulse/wiki/metrics)]
- [Alert System(https://github.com/renvins/serverpulse/wiki/alerts)]
- [Docker Infrastructure(https://github.com/renvins/serverpulse/wiki/docker)]