Por que um estágio de rótulos no pipeline de ingestão do meu Promtail está sem efeito?

Por que um estágio de rótulos no pipeline de ingestão do meu Promtail está sem efeito?

Isso faz parte da minha configuração de raspagem do Promtail em vários hosts para coletar journaldentradas de log para uma instância do 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

O objetivo é renomear todas as entradas capturadas com unitrótulos como session-1.scope, session-10.scopeetc. com o rótulo comum session.scopee preceder o session_idextraído do rótulo inicialmente atribuído ao texto da entrada. Embora esse último aspecto, adicionar o prefixo, esteja funcionando e, portanto, implicando que a maior parte da configuração esteja funcionando, o último dos estágios definidos, a atribuição de um literal estático ao unitrótulo, não funciona. Todas as entradas que foram corretamente selecionadas e alteradas ainda possuem seus rótulos distintos session-1.scope, session-10.scopeetc.

Alguém pode me dar uma dica do que estou perdendo para que a última parte funcione conforme o esperado?

Responder1

Com suporte nos fóruns da comunidade cheguei a esta solução:

    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

Está fazendo o que @jnauska menciona.

Responder2

Você se refere a algum valor real na seção de rótulos, session.scopenão existe, portanto não altera o valor.

Você pode usar o modelo para gerar algum valor como:

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

informação relacionada