Share via


Recopilación de registros de un archivo de texto o JSON con el agente de Azure Monitor

Muchas aplicaciones registran información en archivos de texto o JSON, en lugar de los servicios de registro estándar, como el registro de eventos de Windows o Syslog. En este artículo se explica cómo recopilar datos de registro de archivos de texto y JSON en máquinas supervisadas con el agente de Azure Monitor mediante la creación de una regla de recopilación de datos (DCR).

Nota:

La ingesta JSON se encuentra en versión preliminar en este momento.

Requisitos previos

Para completar este procedimiento, necesita:

  • Área de trabajo de Log Analytics en la que tiene al menos derechos de colaborador.

  • Uno o dos puntos de conexión de recopilación de datos, en función de si la máquina virtual y el área de trabajo de Log Analytics se encuentran en la misma región.

    Para obtener más información, consulte Configuración de puntos de conexión de recopilación de datos en función de la implementación.

  • Permisos para crear objetos de regla de recopilación de datos en el área de trabajo.

  • El texto JSON debe estar contenido en una sola fila para garantizar la ingesta adecuada. No se admite el formato de cuerpo (archivo) JSON.

  • Una máquina virtual, un conjunto de escalado de máquinas virtuales, un servidor habilitado para Arc local o un agente de supervisión de Azure en un cliente local de Windows que escribe registros en un archivo JSON o de texto.

    Requisitos y prácticas recomendadas del archivo de texto y JSON:

    • Almacene archivos en la unidad local del equipo en el que se ejecuta el agente de Azure Monitor y en el directorio que se está supervisando.
    • Delimite el final de un registro con un final de línea.
    • Use la codificación ASCII o UTF-8. No se admiten otros formatos, como UTF-16.
    • Cree un nuevo archivo de registro todos los días para que pueda quitar fácilmente los archivos antiguos.
    • Limpie todos los archivos de registro en el directorio supervisado. El seguimiento de muchos archivos de registro podría impulsar el uso de memoria y CPU del agente. Espere al menos 2 días para permitir un tiempo suficiente para que se procesen todos los registros.
    • No sobrescriba un archivo de salida con nuevos registros. Solo debería anexar nuevos registros al final del archivo. La sobrescritura provocará la pérdida de datos.
    • No cambie el nombre de un archivo a un nuevo nombre y, a continuación, abra un nuevo archivo con el mismo nombre. Esto podría provocar la pérdida de datos.
    • No cambie el nombre ni copie archivos de registro grandes que coincidan con el patrón de examen de archivos en el directorio supervisado. Si fuera necesario, no supere los 50 MB por minuto.
    • No cambie el nombre de un archivo que coincida con el patrón de examen de archivos a un nuevo nombre que también coincida con el patrón de examen de archivos. Esto hará que se ingieren datos duplicados.

Creación de una tabla personalizada

La tabla creada en el script tiene dos columnas:

  • TimeGenerated (datetime) [Obligatorio]
  • RawData (cadena) [Opcional si se proporciona el esquema de tabla]
  • 'FilePath' (cadena) [Opcional]
  • YourOptionalColumn (cadena) [Opcional]

El esquema de tabla predeterminado para los datos de registro recopilados en los archivos de texto es 'TimeGenerated' y 'RawData'. La adición de 'FilePath' a cualquiera de los equipos es opcional. Si conoce el esquema final o su origen es un registro JSON, puede agregar las columnas finales en el script antes de crear la tabla. Siempre puede agregar columnas con la interfaz de usuario de la tabla de Log Analytics más adelante.

Los nombres de columna y los atributos JSON deben coincidir exactamente para analizarse automáticamente en la tabla. Tanto las columnas como los atributos JSON distinguen mayúsculas de minúsculas. Por ejemplo, Rawdata no recopilará los datos de evento. Debe ser RawData. La ingesta anulará los atributos JSON que no tengan una columna correspondiente.

La manera más fácil de realizar la llamada REST es desde una línea de comandos (CLI) de Azure Cloud PowerShell. Para abrir el shell, vaya a Azure Portal, presione el botón Cloud Shell y seleccione PowerShell. Si esta es la primera vez que usa Azure Cloud PowerShell, deberá recorrer el asistente para la configuración única.

Copie y pegue este script en PowerShell para crear la tabla en el área de trabajo:

$tableParams = @'
{
    "properties": {
        "schema": {
               "name": "{TableName}_CL",
               "columns": [
        {
                                "name": "TimeGenerated",
                                "type": "DateTime"
                        }, 
                       {
                                "name": "RawData",
                                "type": "String"
                       },
                       {
                                "name": "FilePath",
                                "type": "String"
                       },
                      {
                                "name": `"YourOptionalColumn",
                                "type": "String"
                     }
              ]
        }
    }
}
'@

Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{WorkspaceName}/tables/{TableName}_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams

Debe recibir una respuesta 200 y detalles sobre la tabla que acaba de crear.

Creación de una regla de recopilación de datos para un archivo de texto o JSON

La regla de recopilación de datos define lo siguiente:

  • Qué archivos de registro de origen examina el agente de Azure Monitor para detectar nuevos eventos.
  • Cómo transforma Azure Monitor los eventos durante la ingesta.
  • El área de trabajo de Log Analytics de destino y la tabla a la que Azure Monitor envía los datos.

Puede definir una regla de recopilación de datos para enviar datos de varias máquinas a varias áreas de trabajo de Log Analytics, incluidas las áreas de trabajo de otra región o inquilino. Cree la regla de recopilación de datos en la misma región que el área de trabajo de Log Analytics.

Nota

Para enviar datos entre inquilinos, primero debe habilitar Azure Lighthouse.

Para analizar automáticamente el archivo de registro JSON en una tabla personalizada, siga los pasos de la plantilla de Resource Manager. Los datos de texto se pueden transformar en columnas mediante la transformación en tiempo de ingesta.

Para crear la regla de recopilación de datos en Azure Portal:

  1. En el menú Supervisión, seleccione las Reglas de recopilación de datos.

  2. Haga clic en Crear para crear una nueva regla de recopilación de datos y asociaciones.

    Captura de pantalla que muestra el botón Crear en la pantalla Reglas de recopilación de datos.

  3. Escriba un nombre de regla y especifique una suscripción, un grupo de recursos, una región, un tipo de plataforma y un punto de conexión de recopilación de datos:

    • Región especifica dónde se creará la regla de recopilación de datos. Las máquinas virtuales y sus asociaciones pueden estar en cualquier suscripción o grupo de recursos del inquilino.
    • Tipo de plataforma especifica el tipo de recursos a los que se puede aplicar esta regla. La opción Personalizadopermite tipos de Windows y Linux.
    • Punto de conexión de recopilación de datos especifica el punto de conexión de recopilación de datos al que el agente de Azure Monitor envía los datos recopilados. Este punto de conexión de recopilación de datos debe estar en la misma región que el área de trabajo de Log Analytics. Para obtener más información, consulte Configuración de puntos de conexión de recopilación de datos en función de la implementación.

    Captura de pantalla que muestra la pestaña Básico de la pantalla Regla de recopilación de datos.

  4. En la pestaña Recursos:

    1. Seleccione + Agregar recursos y asocie recursos a la regla de recopilación de datos. Los recursos pueden ser máquinas virtuales, conjuntos de escalado de máquinas virtuales y Azure Arc para servidores. Azure Portal instala el agente de Azure Monitor en recursos que no lo tengan ya instalado.

      Importante

      El portal habilita una identidad administrada asignada por el sistema en los recursos de destino, junto con las identidades asignadas por el usuario existentes, si existen. En el caso de las aplicaciones que ya existan, y a menos que se especifique la identidad asignada por el usuario en la solicitud, la máquina usa de manera predeterminada la identidad asignada por el sistema.

    2. Seleccione Habilitar puntos de conexión de recopilación de datos.

    3. De manera opcional, puede seleccionar un punto de conexión de recopilación de datos para cada una de las máquinas virtuales asociadas a la regla de recopilación de datos. La mayoría de las veces, solo debe usar los valores predeterminados.

      Este punto de conexión de recopilación de datos envía archivos de configuración a la máquina virtual y debe estar en la misma región que la máquina virtual. Para obtener más información, consulte Configuración de puntos de conexión de recopilación de datos en función de la implementación.

    Captura de pantalla que muestra la pestaña Recursos de la pantalla Regla de recopilación de datos.

  5. En la pestaña Recopilar y entregar, haga clic en Agregar origen de datos para agregar un origen de datos y un conjunto de destino.

  6. En la lista desplegable Tipo de origen de datos, seleccione Registros de texto personalizados o registros JSON.

  7. Especifique la información siguiente:

    • Patrón de archivo: identifica dónde se encuentran los archivos de registro en el disco local. Puede escribir varios patrones de archivo separados por comas (en Linux, se necesita la versión 1.26 o posterior de AMA para recopilar de una lista de patrones de archivo separados por comas).

      Ejemplos de entradas válidas:

      • 20220122-MyLog.txt
      • ProcessA_MyLog.txt
      • ErrorsOnly_MyLog.txt, WarningOnly_MyLog.txt

      Nota

      Normalmente, en el mismo directorio existen varios archivos de registro del mismo tipo. Por ejemplo, una máquina puede crear un archivo cada día para evitar que el archivo de registro llegue a ser demasiado grande. Para recopilar datos de registro en este escenario, puede usar un carácter comodín de archivo. Use el formato C:\directoryA\directoryB\*MyLog.txt para Windows y /var/*.log para Linux. No se admiten caracteres comodín de directorio.

    • Nombre de tabla: el nombre de la tabla de destino que creó en el área de trabajo de Log Analytics. Para obtener más información, consulte Creación de una tabla personalizada.

    • Delimitador de registro: se usará en el futuro para permitir delimitadores adicionales, aparte del de final de línea admitido actualmente (/r/n).

    • Transformar: agregue una transformación en tiempo de ingesta o déjelo como origen si no necesita transformar los datos recopilados.

  8. En la pestaña Destination (Destino), agregue uno o varios destinos para el origen de datos. Puede seleccionar destinos múltiples destinos del mismo o distinto tipo. Por ejemplo, puede seleccionar varias áreas de trabajo de Log Analytics, lo que también se conoce como hospedaje múltiple.

    Captura de pantalla que muestra la pestaña de destino de la pantalla Agregar origen de datos para una regla de recopilación de datos en Azure Portal.

  9. Seleccione Revisar y crear para revisar los detalles de la regla de recopilación de datos y la asociación con el conjunto de máquinas virtuales.

  10. Elija Crear para crear la regla de recopilación de datos.

Nota:

Los datos pueden tardar hasta 10 minutos en enviarse a los destinos después de crear la regla de recopilación de datos.

Consultas de registros de ejemplo

Los nombres de columna que se usan aquí son solo por ejemplo. Lo más probable es que los nombres de columna del registro sean diferentes.

  • Contar el número de eventos por código.

    MyApp_CL
    | summarize count() by code
    

Regla de alertas de ejemplo

  • Crear una regla de alerta en cualquier evento de error.

    MyApp_CL
    | where status == "Error"
    | summarize AggregatedValue = count() by Computer, bin(TimeGenerated, 15m)
    

Solución de problemas

Siga estos pasos para solucionar problemas de recopilación de registros de archivos de texto y JSON.

Compruebe si ha ingerido datos en la tabla personalizada

Para empezar, compruebe si se han ingerido registros en la tabla de registro personalizada mediante la ejecución de la siguiente consulta en Log Analytics:

<YourCustomTable>_CL
| where TimeGenerated > ago(48h)
| order by TimeGenerated desc

Si no se devuelve ningún registro, compruebe el resto de secciones en busca de posibles causas. Esta consulta busca entradas de los últimos dos días, pero puede modificarla para otro intervalo de tiempo. Los datos nuevos pueden tardar entre 5 y 7 minutos en aparecer en la tabla. El agente de Azure Monitor solo recopila los datos escritos en el archivo de texto o JSON después de asociar la regla de recopilación de datos a la máquina virtual.

Comprobar que ha creado una tabla personalizada

Debe crear una tabla de registro personalizada en el área de trabajo de Log Analytics para poder enviar datos a esta.

Comprobar que el agente envía latidos correctamente

Compruebe que el agente de Azure Monitor se esté comunicando correctamente mediante la ejecución de la siguiente consulta en Log Analytics para comprobar si hay registros en la tabla Heartbeat.

Heartbeat
| where TimeGenerated > ago(24h)
| where Computer has "<computer name>"
| project TimeGenerated, Category, Version
| order by TimeGenerated desc

Comprobar que se ha especificado la ubicación de registro correcta en la regla de recopilación de datos

La regla de recopilación de datos tendrá una sección similar a la siguiente. El elemento filePatterns especifica la ruta de acceso al archivo de registro que se va a recopilar del equipo del agente. Compruebe el equipo del agente para comprobar que esto sea correcto.

"dataSources": [{
            "configuration": {
                "filePatterns": ["C:\\JavaLogs\\*.log"],
                "format": "text",
                "settings": {
                    "text": {
                        "recordStartTimestampFormat": "yyyy-MM-ddTHH:mm:ssK"
                    }
                }
            },
            "id": "myTabularLogDataSource",
            "kind": "logFile",
            "streams": [{
                    "stream": "Custom-TabularData-ABC"
                }
            ],
            "sendToChannels": ["gigl-dce-00000000000000000000000000000000"]
        }
    ]

Este patrón de archivo se debe corresponder con los registros de la máquina del agente.

Captura de pantalla con archivo de registro de texto en una máquina de agente.

Uso del solucionador de problemas del agente de Azure Monitor

Use el Solucionador de problemas del agente de Azure Monitor para buscar problemas comunes y compartir resultados con Microsoft.

Comprobación de que los registros se están rellenando

El agente solo recopilará el contenido nuevo escrito en el archivo de registro que se va a recopilar. Si está experimentando con los registros de recopilación de un archivo de texto o JSON, puede usar el siguiente script para generar registros de ejemplo.

# This script writes a new log entry at the specified interval indefinitely.
# Usage:
# .\GenerateCustomLogs.ps1 [interval to sleep]
#
# Press Ctrl+C to terminate script.
#
# Example:
# .\ GenerateCustomLogs.ps1 5

param (
    [Parameter(Mandatory=$true)][int]$sleepSeconds
)

$logFolder = "c:\\JavaLogs"
if (!(Test-Path -Path $logFolder))
{
    mkdir $logFolder
}

$logFileName = "TestLog-$(Get-Date -format yyyyMMddhhmm).log"
do
{
    $count++
    $randomContent = New-Guid
    $logRecord = "$(Get-Date -format s)Z Record number $count with random content $randomContent"
    $logRecord | Out-File "$logFolder\\$logFileName" -Encoding utf8 -Append
    Start-Sleep $sleepSeconds
}
while ($true)

Pasos siguientes

Más información sobre: