es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo extraer el nivel de registro utilizando promtail scrape_configs

Tengo varios pods en el clúster y Promtail está configurado como DaemonSet para enviar registros a Loki. pero no estoy seguro de cómo crear una etiqueta adicional para nivel de registro a partir de registros específicos de un pod para consultar en Grafana.

Registros de los pods:

[2021-12-14 11:11:11] INFO forcetask[id=pod-0] message2
[2021-12-14 11:11:11] INFO forcetask[id=pod-0] message1

Pero la salida cuando se consulta {app=”loki”} en Grafana es:

{log="2021-12-14 11:11:11] INFO forcetask[id=pod-0] message2", stream="stdout", timestamp="..."}
{log="2021-12-14 11:11:11] ERROR forcetask[id=pod-0] Error1", stream="stderr", timestamp="..."}

He configurado scrape_configs en Promtail de la siguiente manera, pero sin suerte. ¿Alguien puede decirme qué me falta aquí?

scrape_configs:
- job_name: my-custom-labels
  pipeline_stages:
  - docke: {}
  - json:
      log: log
      stream: stream
      timestamp: timestamp
  - labels:
       log:
  - match:
      selector: '{app="loki"}'    -- esta es una de las etiquetas de la instancia de Loki 
      stages:
      - regex:
          expression: '\\[(?P<timestamp>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})\]\s(?P<level>\w+)\s(?P<message>.*)'
      - labels:
          level:
      - timestamp:
          format: RFC3339Nano
          source: timestamp

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para crear una etiqueta adicional para el nivel de registro a partir de los registros específicos de un pod para realizar consultas en Grafana:

    Deberás modificar el archivo de configuración de Promtail para agregar una etapa de canalización que extraiga el nivel de registro y lo añada como una etiqueta. Aquí tienes un ejemplo de configuración:

    scrape_configs:
    - job_name: my-custom-labels
      pipeline_stages:
      - docker: {}
      - json:
          log: log
          stream: stream
          timestamp: timestamp
      - regex:
          expression: '\[(?P<timestamp>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2})\]\s(?P<level>\w+)\s(?P<message>.*)'
      - labels:
          level:
      - match:
          selector: '{app="loki"}'
          stages:
          - formatters:
            - type: json
            - source: log
            - action: replace
              replace_with:
                log: '{{ level }} {{ message }}'
    

    En este ejemplo de configuración, estamos agregando una nueva etapa de canalización después del analizador JSON que extrae el nivel de registro utilizando una expresión regular. Luego, estamos añadiendo el nivel de registro como una etiqueta utilizando la etapa labels. Por último, utilizamos la etapa formatters para reemplazar el mensaje de registro original con un nuevo mensaje que incluye la etiqueta del nivel de registro. Este nuevo mensaje se enviará a Loki.

    Con esta configuración, deberías poder realizar consultas de mensajes de registro en base a su nivel de registro en Grafana. Por ejemplo, puedes utilizar la consulta app="loki" and level="INFO" para filtrar mensajes según su nivel.

Comments are closed.