Te ofrecemos esta traducción automática para facilitar la lectura.
En caso de que haya discrepancias entre la versión en inglés y la versión traducida, se entiende que prevalece la versión en inglés. Visita esta página para obtener más información.
Log parsing es el proceso de traducir datos log no estructurados en atributos (pares de valores principales) según las reglas que usted defina. Puede emplear estos atributos en su consulta NRQL para facetar o filtrar el registro de formas útiles.
New Relic analiza los datos log automáticamente de acuerdo con ciertas reglas de análisis. En este documento, aprenderá cómo funciona el análisis de registros y cómo crear sus propias reglas de análisis personalizadas.
También puede crear, consultar y administrar sus reglas de análisis de registros utilizando NerdGraph, nuestra API GraphQL. Una herramienta útil para esto es nuestro explorador de API Nerdgraph. Para obtener más información, consulte nuestro tutorial de NerdGraph para analizar.
Aquí hay un video de 5 minutos sobre análisis de registros:
Ejemplo de análisis
Un buen ejemplo es un log de acceso NGINX predeterminado que contiene texto no estructurado. Es útil para buscar pero no mucho más. A continuación se muestra un ejemplo de una línea típica:
En un formato no analizado, necesitaría realizar una búsqueda de texto completo para responder la mayoría de las preguntas. Después del análisis, el log se organiza en atributos, como response code y request URL:
El análisis facilita la creación de consultas personalizadas que incluyan esos valores. Esto le ayuda a comprender la distribución de códigos de respuesta por URL de solicitud y a encontrar rápidamente páginas problemáticas.
Cómo funciona el análisis de registros
Aquí hay una descripción general de cómo New Relic implementa el análisis de registros:
Análisis de registros
Cómo funciona
Qué
El análisis se aplica a un campo seleccionado específico. De forma predeterminada, se utiliza el campo message . Sin embargo, se puede elegir cualquier campo/atributo, incluso uno que no exista actualmente en sus datos.
Cada regla de análisis se crea mediante una cláusula NRQL WHERE que determina qué registro intentará analizar la regla.
Para simplificar el proceso de coincidencia, recomendamos agregar un atributo logtype a su registro. Sin embargo, no está limitado a utilizar logtype; Se pueden utilizar uno o más atributos como criterios coincidentes en la cláusula NRQL WHERE.
Cuando
El análisis solo se aplicará una vez a cada mensaje de log. Si varias reglas de análisis coinciden con el log, solo se aplicará la primera que tenga éxito.
Las reglas de análisis están desordenadas. Si más de una regla de análisis coincide con un log, se elige una al azar. Asegúrese de crear sus reglas de análisis para que no coincidan con el mismo registro.
El análisis se lleva a cabo durante la ingesta log , antes de que los datos se escriban en NRDB. Una vez que los datos se han escrito en el almacenamiento, ya no se pueden analizar.
El análisis se produce en el pipeline en la que se realizan before enriquecimientos de datos. Tenga cuidado al definir los criterios coincidentes para una regla de análisis. Si el criterio se basa en un atributo que no existe hasta que se realiza el análisis o el enriquecimiento, esos datos no estarán presentes en el registro cuando se produzca la coincidencia. Como resultado, no se realizará ningún análisis.
Cómo
Las reglas se pueden escribir en Grok, expresiones regulares o una combinación de ambos. Grok es una colección de patrones que abstraen expresiones regulares complicadas.
Admitimos la sintaxis Java Regex en nuestra UI de análisis. Para los nombres de atributos o campos en grupos de captura, Java Regex solo permite [A-Za-z0-9].
Analizar atributos usando Grok
Los patrones de análisis se especifican utilizando Grok, un estándar de la industria para analizar mensajes de registro. Cualquier log entrante con un campo logtype se comparará con nuestras reglas de análisis integradas y, si es posible, se aplicará el patrón Grok asociado al log.
Grok es un superconjunto de expresiones regulares que agrega patrones con nombre integrados para usarse en lugar de expresiones regulares complejas literales. Por ejemplo, en lugar de tener que recordar que un número entero puede coincidir con la expresión regular (?:[+-]?(?:[0-9]+)), puedes simplemente escribir %{INT} para usar el patrón de Grok INT, que representa la misma expresión regular.
PATTERN_NAME es uno de los patrones Grok admitidos. El nombre del patrón es simplemente un nombre fácil de usar que representa una expresión regular. Son exactamente iguales a la expresión regular correspondiente.
OPTIONAL_EXTRACTED_ATTRIBUTE_NAME, si se proporciona, es el nombre del atributo que se agregará a su mensaje de registro con el valor que coincide con el nombre del patrón. Es equivalente a utilizar un grupo de captura con nombre utilizando expresiones regulares. Si no se proporciona esto, entonces la regla de análisis simplemente coincidirá con una región de su cadena, pero no extraerá un atributo con su valor.
OPTIONAL_TYPE especifica el tipo de valor de atributo que se extraerá. Si se omite, los valores se extraen como cadenas. Por ejemplo, para extraer el valor 123 de "File Size: 123" como un número en el atributo file_size, use value: %{INT:file_size:int}.
OPTIONAL_PARAMETER especifica un parámetro opcional para ciertos tipos. Actualmente, solo el tipo datetime toma un parámetro; consulte a continuación para obtener más detalles.
También puedes usar una combinación de expresiones regulares y nombres de patrones de Grok en tu cadena coincidente.
Haga clic en este enlace para obtener una lista de patrones de Grok compatibles y aquí para obtener una lista de tipos de Grok compatibles.
Tenga en cuenta que los nombres de las variables deben establecerse explícitamente y estar en minúsculas, como %{URI:uri}. Expresiones como %{URI} o %{URI:URI} no funcionarían.
Un registro log podría verse así:
{
"message":"54.3.120.2 2048 0"
}
Esta información es precisa, pero no es exactamente intuitivo lo que significa. Los patrones de Grok lo ayudan a extraer y comprender los telemetry data que desea. Por ejemplo, un log como este es mucho más fácil de usar:
{
"host_ip":"43.3.120.2",
"bytes_received":2048,
"bytes_sent":0
}
Para hacer esto, cree un patrón Grok que extraiga estos tres campos; Por ejemplo:
Después del procesamiento, su log incluirá los campos host_ip, bytes_received y bytes_sent. Ahora puede utilizar estos campos en New Relic para filtrar, facetar y realizar operaciones estadísticas en sus datos log . Para obtener más detalles sobre cómo analizar registros con patrones de Grok en New Relic, consulte nuestra publicación de blog.
Si tiene los permisos correctos, puede crear reglas de análisis en nuestra UI para crear, probar y habilitar el análisis de Grok. Por ejemplo, para obtener un tipo específico de mensaje de error para uno de sus microservicios llamado Servicios de inventario, crearía una regla de análisis de Grok que busque un mensaje de error y un producto específicos. Para hacer esto:
Dale un nombre a la regla; por ejemplo, Inventory Services error parsing.
Seleccione un campo existente para analizar (predeterminado = message) o ingrese un nuevo nombre de campo.
Identifique la cláusula NRQL WHERE que actúa como filtro previo para el registro entrante; por ejemplo, entity.name='Inventory Service'. Este prefiltro reduce la cantidad de registros que su regla debe procesar, eliminando el procesamiento innecesario.
Seleccione un log coincidente, si existe, o haga clic en la pestaña Pegar log para pegar un log de muestra.
Agregue la regla de análisis de Grok; Por ejemplo:
Inventory error: %{DATA:error_message} for product %{INT:product_id}
Dónde:
Inventory error: el nombre de su regla de análisis
error_message: El mensaje de error que desea seleccionar
product_id: El ID del producto para el servicio de inventario.
Habilite y guarde la regla de análisis.
Pronto verá que su registro del Servicio de inventario se enriquece con dos campos nuevos: error_message y product_id. Desde aquí, puedes consultar estos campos, crear gráficos y paneles, establecer alertas, etc.
El campo OPTIONAL_TYPE especifica el tipo de valor de atributo que se extraerá. Si se omite, los valores se extraen como cadenas.
Los tipos admitidos son:
Tipo especificado en Grok
Tipo almacenado en la base de datos de New Relic
boolean
boolean
byteshortintinteger
integer
long
long
float
float
double
double
string (por defecto) text
string
datedatetime
El tiempo como long
Por defecto se interpreta como ISO 8601. Si OPTIONAL_PARAMETER está presente, especifica la cadena de patrón de fecha y horaque se empleará para interpretar datetime.
Si tiene un registro de varias líneas, tenga en cuenta que el patrón GREEDYDATA Grok no coincide con las nuevas líneas (es equivalente a .*).
Entonces, en lugar de usar %{GREEDYDATA:some_attribute} directamente, necesitarás agregar la bandera multilínea delante: (?s)%{GREEDYDATA:some_attribute}
El pipeline New Relic Logs analiza los mensajes JSON de log de forma predeterminada, pero a veces tiene mensajes de registro JSON que se mezclan con texto sin formato. En esta situación, es posible que desee poder analizarlos y luego filtrarlos utilizando el atributo JSON. Si ese es el caso, puede utilizar el tipo grokjson , que analizará el JSON capturado por el patrón grok. Este formato se basa en 3 partes principales: la sintaxis grok, el prefejo que le gustaría asignar al atributo json analizado y el tipo jsongrok. Usando el tipo grokjson , puede extraer y analizar JSON de registros que no están formateados correctamente; por ejemplo, si su registro tiene como prefijo una cadena de fecha/hora:
Puede definir la lista de atributos a extraer o soltar con las opciones keepAttributes o dropAttributes. Por ejemplo, con la siguiente expresión de Grok:
Si desea omitir el prefijo my_attribute_prefix y conservar solo el atributo status , puede incluir "noPrefix": true y "keepAttributes: ["status"] en la configuración.
Si se escapó su JSON, puede usar la opción isEscaped para poder analizarlo. Si su JSON se escapó y luego se citó, también debe hacer coincidir las comillas, como se muestra a continuación. Por ejemplo, con la siguiente expresión de Grok:
Para configurar el tipo jsonGrok, emplee :json(_CONFIG_):
json({"dropOriginal": true}): elimine el fragmento JSON que se utilizó en el análisis. Cuando se establece en true (valor predeterminado), la regla de análisis eliminará el fragmento JSON original. Tenga en cuenta que el atributo JSON permanecerá en el campo del mensaje.
json({"dropOriginal": false}): Esto mostrará la carga útil JSON que se extrajo. Cuando se establece en false, la carga útil completa solo JSON se mostrará bajo un atributo denominado en my_attribute_prefix arriba. Tenga en cuenta que el atributo JSON permanecerá aquí en el campo de mensaje y también brindará al usuario 3 vistas diferentes de los datos JSON. Si le preocupa el almacenamiento de las tres versiones, se recomienda utilizar el valor predeterminado true aquí.
json({"depth": 62}): Niveles de profundidad que desea analizar el valor JSON (predeterminado en 62).
json({"keepAttributes": ["attr1", "attr2", ..., "attrN"]}): Especifica qué atributo se extraerá del JSON. La lista proporcionada no puede estar vacía. Si esta opción de configuración no está configurada, se extraen todos los atributos.
json({"dropAttributes": ["attr1", "attr2", ..., "attrN"]}): Especifica qué atributo se eliminará del JSON. Si esta opción de configuración no está configurada, no se elimina ningún atributo.
json({"noPrefix": true}): establezca esta opción en true para eliminar el prefijo del atributo extraído del JSON.
json({"isEscaped": true}): Establezca esta opción en true para analizar JSON que se escapó (lo que normalmente se ve cuando JSON está encadenado, por ejemplo, {\"key\": \"value\"}).
Si su sistema envía un registro de valores separados por comas (CSV) y necesita analizarlos en New Relic, puede usar el tipo csv Grok, que analiza el CSV capturado por el patrón Grok. Este formato se basa en 3 partes principales: la sintaxis de Grok, el prefijo que le gustaría asignar al atributo CSV analizado y el tipocsv de Grok. Usando el tipo csvGrok, puede extraer y analizar CSV del registro.
Es obligatorio indicar las columnas en la configuración del tipo CSV Grok (que debe ser un JSON válido).
Puede ignorar cualquier columna estableciendo "_" (guión bajo) como nombre de la columna para eliminarla del objeto resultante.
Opciones de configuración opcionales:
Si bien la configuración de "columnas" es obligatoria, es posible cambiar el análisis del CSV con las siguientes configuraciones.
dropOriginal: (El valor predeterminado es true) Suelte el fragmento CSV utilizado en el análisis. Cuando se establece en true (valor predeterminado), la regla de análisis descarta el campo original.
noPrefix: (El valor predeterminado es false) No incluye el nombre del campo Grok como prefijo en el objeto resultante.
separator: (Predeterminado en ,) Define el carácter/cadena que divide cada columna.
Otro escenario común son los valores separados por tabulaciones (TSV), para eso debes indicar \t como separador, ej. %{GREEDYDATA:log:csv({"columns": ["timestamp", "status", "method", "url", "time", "bytes"], "separator": "\t"})
quoteChar: (Predeterminado en ") Define el carácter que opcionalmente rodea el contenido de una columna.
Si su sistema envía registros que contienen direcciones IPv4, New Relic puede ubicarlas geográficamente y enriquecer el registro de eventos con el atributo especificado. Puede utilizar el tipogeo Grok, que encuentra la posición de una dirección IP capturada por el patrón Grok. Este formato se puede configurar para devolver uno o más campos relacionados con la dirección, como la ciudad, el país y la latitud/longitud de la IP.
Es obligatorio especificar los campos lookup deseados devueltos por la acción geo . Se requiere al menos un elemento de las siguientes opciones.
city: Nombre de la ciudad
countryCode: Abreviatura de país
countryName: Nombre del país
latitude: Latitud
longitude: Longitud
postalCode: Código postal, código postal o similar
region: Abreviatura de estado, provincia o territorio
regionName: Nombre del estado, provincia o territorio
Organizar por tipo de registro
New Relic log pipeline de ingesta de puede analizar datos haciendo coincidir un registro de evento con una regla que describe cómo log se debe analizar el . Hay dos formas de analizar el registro de eventos:
Las reglas son una combinación de lógica de coincidencia y lógica de análisis. La comparación se realiza definiendo una coincidencia de consulta en un atributo del registro. Las reglas no se aplican retroactivamente. Los registros recopilados antes de que se cree una regla no son analizados por esa regla.
La forma más sencilla de organizar su registro y cómo se analizan es incluir el campo logtype en su registro de eventos. Esto le dice New Relic qué regla incorporada aplicar al registro.
Importante
Una vez que una regla de análisis está activa, los datos analizados por la regla cambian permanentemente. Esto no se puede revertir.
Límites
El análisis es computacionalmente costoso, lo que introduce riesgos. El análisis se realiza para reglas personalizadas definidas en una cuenta y para hacer coincidir patrones con un log. Una gran cantidad de patrones o reglas personalizadas mal definidas consumirán una gran cantidad de memoria y recursos de CPU y, al mismo tiempo, tardarán mucho tiempo en completarse.
Para evitar problemas, aplicamos dos límites de análisis: por mensaje, por regla y por cuenta.
Límite
Descripción
Por mensaje por regla
El límite por mensaje por regla evita que el tiempo dedicado a analizar cualquier mensaje sea superior a 100 ms. Si se alcanza ese límite, el sistema dejará de intentar analizar el mensaje de registro con esa regla.
El pipeline de ingesta intentará ejecutar cualquier otro aplicable en ese mensaje, y el mensaje seguirá pasando a través del pipeline de ingesta y se almacenará en NRDB. El mensaje de registro estará en su formato original, no analizado.
Por cuenta
El límite por cuenta existe para evitar que las cuentas utilicen más recursos de los que les corresponden. El límite considera el tiempo total dedicado a procesar all mensaje de registro para una cuenta por minuto.
Sugerencia
Para comprobar fácilmente si se han alcanzado sus límites de tarifas, vaya a la página de su Limitssistema en la New Relic UI.
Reglas de análisis integradas
Los formatos log comunes ya tienen reglas de análisis bien establecidas creadas para ellos. Para aprovechar las reglas de análisis integradas, agregue el atributo logtype al reenviar el registro. Establezca el valor en algo que se enumera en la siguiente tabla y las reglas para ese tipo de log se aplicarán automáticamente.
Lista de reglas integradas
Los siguientes valores de atributo logtype se asignan a una regla de análisis predefinida. Por ejemplo, para consultar la aplicación Load Balancer:
Desde la New Relic UI, utilice el formato logtype:"alb".
Al agregar registros, es importante proporcionar metadatos que faciliten la organización, búsqueda y análisis de esos registros. Una forma sencilla de hacerlo es agregar el atributo logtype al mensaje de registro cuando se envían. Las reglas de análisis integradas se aplican de forma predeterminada a ciertos valores logtype .
Sugerencia
Los campos logType, logtype y LOGTYPE son compatibles con reglas integradas. Para facilitar la búsqueda, le recomendamos que se alinee con una única sintaxis en su organización.
A continuación se muestran algunos ejemplos de cómo agregar logtype al registro enviado mediante algunos de nuestros métodos de envío admitidos.
Agregue logtype como attribute. Debe configurar el tipo de registro para cada fuente nombrada.
logs:
-name: file-simple
file: /path/to/file
attributes:
logtype: fileRaw
-name: nginx-example
file: /var/log/nginx.log
attributes:
logtype: nginx
Agregue un bloque de filtro al archivo .conf , que utiliza un record_transformer para agregar un nuevo campo. En este ejemplo utilizamos un logtype de nginx para activar la regla de análisis NGINX incorporada. Mira otros ejemplos de Fluentd.
<filter containers>
@type record_transformer
enable_ruby true
<record>
#Add logtype to trigger a built-in parsing rule for nginx access logs
logtype nginx
#Set timestamp from the value contained in the field "time"
timestamp record["time"]
#Add hostname and tag fields to all records
hostname "#{Socket.gethostname}"
tag ${tag}
</record>
</filter>
Agregue un bloque de filtro al archivo .conf que use un record_modifier para agregar un nuevo campo. En este ejemplo utilizamos un logtype de nginx para activar la regla de análisis NGINX incorporada. Consulte otros ejemplos de Fluent Bit.
[FILTER]
Name record_modifier
Match *
Record logtype nginx
Record hostname ${HOSTNAME}
Record service_name Sample-App-Name
Agregue un bloque de filtro a la configuración de Logstash que utiliza un filtro de mutación add_field para agregar un nuevo campo. En este ejemplo utilizamos un logtype de nginx para activar la regla de análisis NGINX incorporada. Consulte otros ejemplos de Logstash.
filter {
mutate {
add_field=> {
"logtype"=> "nginx"
"service_name"=> "myservicename"
"hostname"=> "%{host}"
}
}
}
Puede agregar atributo a la solicitud JSON enviada a New Relic. En este ejemplo, agregamos un atributo logtype de valor nginx para activar la regla de análisis NGINX incorporada. Obtenga más información sobre el uso de la API de registros.
POST /log/v1 HTTP/1.1
Host: log-api.newrelic.com
Content-Type: application/json
X-License-Key: YOUR_LICENSE_KEY
Accept: */*
Content-Length: 133
{
"timestamp": TIMESTAMP_IN_UNIX_EPOCH,
"message": "User 'xyz' logged in",
"logtype": "nginx",
"service": "login-service",
"hostname": "login.example.com"
}
Crear y ver reglas de análisis personalizadas
Muchos registros tienen un formato o estructura únicos. Para analizarlos, se debe crear y aplicar una lógica personalizada.
Desde el navegador izquierdo en la UI de registro, seleccione Parsing y luego cree su propia regla de análisis personalizada con una cláusula NRQL WHERE válida y un patrón Grok.
Para crear y administrar sus propias reglas de análisis personalizadas:
Desde Manage data en el panel de navegación izquierdo de la UI de log, haga clic en Parsing y luego haga clic en Create parsing rule.
Introduzca un nombre para la nueva regla de análisis.
Seleccione un campo existente para analizar (predeterminado = message) o ingrese un nuevo nombre de campo.
Introduzca una cláusula NRQL WHERE válida que coincida con el log que desea analizar.
Seleccione un log coincidente, si existe, o haga clic en la pestaña Paste log para pegar un log de muestra. Tenga en cuenta que si copia texto de la UI del registro o del generador de consultas para pegarlo en la UI usuario de análisis, cerciorar de que sea la versión Unformatted.
Desde Manage data en el panel de navegación izquierdo de la UI de registro, haga clic en Parsing.
Resolución de problemas
Si el análisis no funciona como esperaba, puede deberse a lo siguiente:
Logic: La lógica de coincidencia de reglas de análisis no coincide con el registro que desea.
Timing: Si su regla de coincidencia de análisis tiene como objetivo un valor que aún no existe, fallará. Esto puede ocurrir si el valor se agrega más adelante en el proceso como parte del proceso de enriquecimiento.
Limits: Hay una cantidad fija de tiempo disponible cada minuto para procesar el registro mediante análisis, patrones, filtros de eliminación, etc. Si se ha invertido la cantidad máxima de tiempo, se omitirá el análisis de registros de eventos adicionales.