这是我在各个主机上进行的 Promtail 抓取配置的一部分,用于将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