Warum bleibt eine Etikettenphase in der Aufnahmepipeline meines Promtail ohne Wirkung?

Warum bleibt eine Etikettenphase in der Aufnahmepipeline meines Promtail ohne Wirkung?

Dies ist ein Teil meiner Promtail-Scrape-Konfiguration auf verschiedenen Hosts, um journaldProtokolleinträge für eine Loki-Instanz zu sammeln:

- 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

Das Ziel besteht darin, alle erfassten Einträge mit unitLabels wie session-1.scopeusw. session-10.scopemit dem gemeinsamen Label neu zu kennzeichnen und dem Eintragstext session.scopedas aus dem ursprünglich zugewiesenen Label extrahierte voranzustellen . Während letzterer Aspekt, das Hinzufügen des Präfixes, funktioniert und somit impliziert, dass der Großteil der Konfiguration funktioniert, funktioniert dies im letzten der definierten Schritte, also die Zuweisung eines statischen Literals zum Label, nicht. Alle Einträge, die korrekt ausgewählt und geändert wurden, haben immer noch ihre unterschiedlichen Labels usw.session_idunitsession-1.scopesession-10.scope

Kann mir jemand einen Hinweis geben, was mir fehlt, damit dieser letzte Teil wie erwartet funktioniert?

Antwort1

Mit Unterstützung in den Community-Foren bin ich zu dieser Lösung gekommen:

    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

Es macht, was @jnauska erwähnt.

Antwort2

Sie haben im Abschnitt „Beschriftungen“ auf einen tatsächlichen Wert verwiesen, session.scopeder nicht existiert. Deshalb kann der Wert nicht geändert werden.

Sie können eine Vorlage verwenden, um Werte dafür zu generieren, wie etwa:

           - template:
                source: session.scope
                template: 'session.scope'
            - labels:
                unit: session.scope

verwandte Informationen