為什麼我的 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.scopesession-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

相關內容