Why is a labels stage in my Promtail's ingestion pipeline without effect?
This is a part of my Promtail scrape configuration on various hosts to collect journald
log entries to a Loki instance:
- job_name: journald
journal:
labels:
job: journald
relabel_configs:
- source_labels:
- __journal__systemd_unit
target_label: unit
pipeline_stages:
- match:
selector: '{unit=~"session-\\d+\\.scope"}'
stages:
- regex:
source: unit
expression: "^session-(?P<session_id>\\d+)\\.scope$"
- template:
source: message
template: "id={{ .session_id }} {{ .Entry }}"
- output:
source: message
- labels:
unit: session.scope
The aim is to relabel all entries captured with unit
labels like session-1.scope
, session-10.scope
etc. with the common label session.scope
and to prepend the session_id
extracted from the initially assigned label to the entry text. While that latter aspect, adding the prefix, is working and thus implying that most of the configuration is working, the last of the defined stages, that asignment of a static literal to the unit
label does not. All entries that were correctly selected and altered still have their distinct labels session-1.scope
, session-10.scope
etc.
Can anyone hint me what I'm missing to make that last bit work as expected?
Solution 1:
You have refer to some actual value in labels section, session.scope
doesn't exists so it fails to alter the value.
You can use template to generate some value for it like:
- template:
source: session.scope
template: 'session.scope'
- labels:
unit: session.scope
Solution 2:
With support in the community forums i came to this solution:
pipeline_stages:
- match:
selector: '{service=~"session-\\d+\\.scope"}'
stages:
- regex:
source: service
expression: "^session-(?P<session_id>\\d+)\\.scope$"
- template:
source: message
template: "{% raw %}id={{ .session_id }} {{ .Entry }}{% endraw %}"
- output:
source: message
- template:
source: label
template: session.scope
- labels:
service: label
It is doing what @jnauska mentions.