Это часть моей конфигурации Promtail scrape на разных хостах для сбора journald
записей журнала в экземпляре Loki:
- 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
Цель состоит в том, чтобы переименовать все записи, захваченные с unit
метками типа session-1.scope
, session-10.scope
и т. д., с общей меткой session.scope
и добавить session_id
извлеченную из изначально назначенной метки к тексту записи. Хотя последний аспект, добавление префикса, работает и, таким образом, подразумевает, что большая часть конфигурации работает, последний из определенных этапов, назначение статического литерала метке, unit
не работает. Все записи, которые были правильно выбраны и изменены, по-прежнему имеют свои отдельные метки session-1.scope
, session-10.scope
и т. д.
Может ли кто-нибудь подсказать мне, чего мне не хватает, чтобы последний шаг заработал так, как ожидалось?
решение1
При поддержке на форумах сообщества я пришел к такому решению:
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
Он делает то, о чем говорит @jnauska.
решение2
Вы ссылаетесь на какое-то фактическое значение в разделе меток, но session.scope
оно не существует, поэтому изменить значение не удается.
Вы можете использовать шаблон, чтобы сгенерировать для него некоторое значение, например:
- template:
source: session.scope
template: 'session.scope'
- labels:
unit: session.scope