为什么我的 Promtail 提取管道中的标签阶段没有效果?

为什么我的 Promtail 提取管道中的标签阶段没有效果?

这是我在各个主机上进行的 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.scopesession.scopesession_idunitsession-1.scopesession-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

相关内容