Los logs no muestran la marca temporal prevista

Por defecto, cuando la API de entrada de Datadog recibe logs, se genera una marca temporal y se añade como atributo de fecha. Sin embargo, esta marca temporal predeterminada no siempre refleja la marca real que podría estar contenida en el propio log. En esta guía, aprenderás cómo anular la marca temporal predeterminada por la marca temporal real.

Panel del log que muestra la marca temporal del log, distinta de la marca temporal en el mensaje

Marca temporal indicada

La marca temporal del log se encuentra en la parte superior del panel del log. Las marcas temporales se almacenan en UTC y se muestran en la zona horaria local del usuario. En la captura de pantalla anterior, el perfil local está configurado en UTC+1, por lo que la hora a la que se recibió el log es 11:06:16.807 UTC.

Es posible que la marca temporal no muestre el valor esperado porque la zona horaria está mal configurada. Para comprobar si este es el caso, ve a Preferences (Preferencias) y mira en la sección Time zone (Zona horaria).

Si la zona horaria es correcta, extrae la marca temporal del mensaje para anular la que se muestra en el log.

Logs sin procesar

Si tus logs sin procesar no muestran la marca temporal correcta en Datadog, extrae la marca temporal correcta de los logs sin procesar y reasígnala.

Extraer el valor de la marca temporal con un analizador

  1. Ve a Pipelines de logs y haz clic en el pipeline que procesa los logs.
  2. Haz clic en Add Processor (Agregar procesador).
  3. Selecciona el tipo de procesador Grok Parser (Analizador Grok).
  4. Utiliza date() matcher para extraer la fecha y pasarla a un atributo de fecha personalizado. Consulta el siguiente ejemplo, así como ejemplos de parseo de fechas, para obtener más detalles.

En un ejemplo de log como este:

2017-12-13 11:01:03 EST | INFO | (tagger.go:80 in Init) | starting the tagging system

Añade una regla de parseo como:

MyParsingRule %{date("yyyy-MM-dd HH:mm:ss z"):date} \| %{word:severity} \| \(%{notSpace:logger.name}:%{integer:logger.line}[^)]*\) \|.*

El resultado de la extracción de MyParsingRule:

{
  "date": 1513180863000,
  "logger": {
    "line": 80,
    "name": "tagger.go"
  },
  "severity": "INFO"
}

El atributo date almacena el valor mytimestamp.

Definir un reasignador de fecha de log

Añade un Reasignador de fecha de log para asegurarte de que el valor del atributo date anula la marca temporal actual del log.

  1. Ve a Pipelines de logs y haz clic en el pipeline que procesa los logs.
  2. Haz clic en Add Processor (Agregar procesador).
  3. Selecciona Date remapper (Reasignador de fecha) como el tipo de procesador.
  4. Introduce un nombre para el procesador.
  5. Agrega date (fecha) a la sección Set date attribute(s) (Establecer atributos de fecha).
  6. Haz clic en Create (Crear).

El siguiente log generado en 06:01:03 EST, que corresponde a 11:01:03 UTC, se visualiza correctamente como 12:01:03 (la zona horaria mostrada es UTC+1 en este caso).

Panel de log que muestra la marca temporal correcta

Nota: Cualquier modificación en un pipeline solo afecta a los nuevos logs, ya que todo el procesamiento se realiza en la ingesta.

Logs de JSON

Los logs de JSON se analizan automáticamente en Datadog. Dado que el atributo status del log es un atributo reservado, pasa por operaciones de preprocesamiento para los logs de JSON.

En el ejemplo siguiente, la marca temporal real del log es el valor del atributo mytimestamp y no la marca temporal del log Dec 13, 2017 at 14:16:45.158.

Panel del log que muestra la marca temporal del log que es distinta del valor del atributo mytimestamp en el mensaje

Formatos de fecha admitidos

Para asegurarte de que el valor del atributo mytimestamp anula la marca temporal actual del log que se está mostrando, debes añadirlo como atributo de fecha.

  1. Ve a tu Pipeline de logs.
  2. Sitúate sobre Preprocessing for JSON Logs (Preprocesamiento para logs de JSON) y haz clic en el icono del lápiz.
  3. Añade mytimestamp a la lista de atributos de fecha. El reasignador de fechas busca cada uno de los atributos reservados en el orden en que aparecen en la lista. Para asegurarte de que la fecha procede del atributo mytimestamp, colócalo en primer lugar en la lista.
  4. Haz clic en Save (Guardar).

Hay formatos de fecha específicos que deben seguirse para que la reasignación funcione. Los formatos de fecha reconocidos son: ISO8601, UNIX (el formato EPOCH de milisegundos) y RFC3164.

Si utilizas un formato de fecha diferente, consulta Formato de fecha personalizado.

Nota: Cualquier modificación en el pipeline solo afecta a los nuevos logs, ya que todo el procesamiento se realiza en la ingesta.

Formato de fecha personalizado

Si el formato de fecha no es admitido por defecto por el reasignador, puedes analizar la fecha utilizando un Analizador Grok y luego convertirla a un formato compatible.

  1. Ve al Pipeline que está procesando los logs. Si todavía no tienes un pipeline configurado para esos logs, crea un nuevo pipeline para ello.
  2. Haz clic en Add Processor (Agregar procesador).
  3. Selecciona el tipo de procesador Grok Parser (Analizador Grok).
  4. Define la regla de parseo en función de tu formato de fecha. Consulta estos ejemplos de parseo de fechas para más detalles.
  5. En la sección Advanced Settings (Configuración avanzada), añade mytimestamp a la sección Extract from para que este analizador se aplique únicamente al atributo personalizado mytimestamp.
  6. Haz clic en Create (Crear).
  7. Añade un Reasignador de fecha de log para asignar la marca temporal correcta a los nuevos logs.