grafana: tell the logs datasource that severity_text is the level
Grafana's log-level buttons filter on a field called `level`; no row in the store has one. The store's name for it is `severity_text`, chosen by VictoriaLogs' OTLP ingester rather than by us — v1.52.0's `app/vlinsert/opentelemetry/pb.go` writes it unconditionally and the ingest parameters have no `_level_field` to rename it with. So the mapping is made on the reader: the VictoriaLogs datasource, which was provisioned with no `jsonData` at all, now carries a `logLevelRules` entry per severity the journald parser can emit. `logLevelRules` is the datasource plugin's only level-related jsonData key — there is no field-name setting and no OpenTelemetry preset to switch on. It is read off `instanceSettings.jsonData` in the plugin's `datasource.ts` and typed in its `configuration/LogLevelRules/types.ts`, both recovered from the sourcemap shipped in the pinned artifact (`grafanaPlugins.victoriametrics-logs-datasource` 0.26.3). Each enabled rule appends an `OR severity_text:="INFO"`-shaped term to the query a level button emits, next to the `level:…` term that matches nothing. A wrong rule here fails silently: Grafana provisions unknown jsonData without complaint and the buttons go on returning zero rows. The three ways to get one wrong — a non-literal `enabled`, a non-canonical `level` spelling, a value that is not the stored text — are recorded at the binding, and a module-eval arm pins them along with the real failure mode, a severity added to `nix/journald-severity.nix` and not here. `Unspecified` is left unmapped on purpose: it is the store's own rendering of an absent severity and the thing the logs dashboard's "no severity" panel counts. Refs #4560
This commit is contained in:
parent
2346bef3b1
commit
8e9ca3ee6c
3 changed files with 119 additions and 0 deletions
|
|
@ -256,6 +256,24 @@ store as `Unspecified`. The **Log rows with no severity** panel on the
|
|||
had a priority and arrived without a severity anyway signal a broken mapping,
|
||||
while lines that never had one signal nothing of the sort.
|
||||
|
||||
### Why Explore's level buttons need the datasource told
|
||||
|
||||
The stored field is `severity_text`, and Grafana's log-level buttons filter on
|
||||
a field called `level` — a name no row here carries. That is not something the
|
||||
pipeline can fix: VictoriaLogs' OTLP ingester chooses the stored name itself,
|
||||
and its ingest parameters have no option to rename it.
|
||||
|
||||
So the datasource is told instead. `nix/host-modules/swarm-grafana.nix`
|
||||
provisions the VictoriaLogs datasource with a `logLevelRules` entry per
|
||||
severity in the table above, each matching `severity_text` against one of
|
||||
those values — which is the plugin's way of saying "the level lives in this
|
||||
field". A level button then filters on `level` **or** the matching
|
||||
`severity_text`, and the store answers the second half.
|
||||
|
||||
`Unspecified` is deliberately left out of those rules, so rows with no
|
||||
severity stay unfiltered by every level button and keep showing up in the
|
||||
panel that counts them.
|
||||
|
||||
## Host-emitted container-resource metrics (hive-c0re)
|
||||
|
||||
<!-- vale write-good.Passive = NO -->
|
||||
|
|
|
|||
Loading…
Reference in a new issue