Cover the full metric set in the dashboard and add a shareable export - #46
Merged
Conversation
The dashboard showed eight panels out of a much larger metric set, so most of what the mod measures had nowhere to appear. It now runs top to bottom as a story about the server: a glance strip, tick health with the histogram quantiles and busy time against the budget, players and ping, world and entity breakdown, worldgen, network on both the per-second families and the byte totals, suspends and warnings and log levels, and a runtime row for the dotnet_* families. Panels whose families are conditional say so in their description. Someone looking at an empty graph should learn that it needs the engine probe, or RuntimeMetrics, rather than assume the mod is broken. The second file is the same dashboard in export-for-sharing form, so an outsider can import it and be asked for a datasource instead of inheriting the uid pulse-prom that only exists here. It is generated by make-shared.py rather than kept in sync by hand. check-dashboard.py covers the failure mode that has no error message: overlapping panels, a panel past the 24 column grid, and duplicate ids all render wrong without Grafana saying a word.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #45.
Th3Dilli was right that the dashboard read as unfinished. It had eight panels
against a metric set several times that size, so most of what the mod measures
had nowhere to show up.
The dashboard now runs top to bottom as a story about the server. A glance strip
of the numbers you check first, then tick health with p50/p95/p99 out of the
histogram and busy time drawn against the budget, players and ping and deaths,
chunks and entities with the per-code breakdown stacked, worldgen, network on
both the engine's per-second families and the byte totals so TCP and UDP are
both visible, then suspends, engine warnings and log levels, and a runtime row
for the
dotnet_*families. 33 data panels across 8 rows, up from 8 panels.Panels whose families are conditional say so in their own description. Someone
staring at an empty graph should learn from the panel that it needs the engine
probe, or
RuntimeMetrics, instead of concluding the mod is broken. The samegoes for the numbers that need interpreting: busy time meeting the budget is a
saturated server, and the suspend seconds are the freeze players actually feel
during an autosave.
pulse-overview-shared.jsonis the second ask. Same dashboard inexport-for-sharing form, so Grafana's import dialog asks which Prometheus to
bind rather than handing you 33 panels wired to the uid
pulse-prom, whichexists only on a Grafana provisioned from this directory. It is generated by
make-shared.pyrather than kept in sync by hand; the README says so, in thehope that nobody edits it directly.
check-dashboard.pycovers the failure mode with no error message. Overlappingpanels, a panel running past the 24 column grid and duplicate panel ids all get
drawn wrong or dropped without Grafana saying a word, which is a miserable thing
to chase by eye. Stdlib only, like the generator.
Checked rather than assumed:
check-dashboard.py, and the checker was itself run against adeliberately broken dashboard to confirm it catches all five violations rather
than always printing ok.
promtool check rulesover a generatedrule file.
dotnet_*names in particular were taken by enumerating the real
System.Runtimemeterand pushing the names through the same mapping
PrometheusText.MetricNameapplies, which is where
dotnet_thread_pool_queue_length_totalgets its_total.panels with no errors, and the shared file imported cleanly through
/api/dashboards/importwith every datasource reference resolved.exactly what the script produces.
Left out on purpose: no template variables, since there is one server per
scrape target here and a datasource picker would just be one more thing to
get wrong on import. No alert rules either,
contrib/alertsalready owns those.