Compartir vía


Exportación de datos de un área de trabajo de Log Analytics a la cuenta de almacenamiento mediante Logic Apps

En este artículo se describe un método para usar Azure Logic Apps a fin de consultar datos de un área de trabajo de Log Analytics en Azure Monitor y enviarlos a Azure Storage. Use este proceso cuando necesite exportar los datos de registros de Azure Monitor para escenarios de auditoría y cumplimiento o a fin de permitir que otro servicio recupere estos datos.

Otros métodos de exportación

El método que se explica en este artículo describe una exportación programada a partir de una consulta de registro mediante una aplicación lógica. Entre otras opciones a fin de exportar datos para escenarios concretos se incluyen las siguientes:

Información general

En este procedimiento, se usa el conector de registros de Azure Monitor, que le permite ejecutar una consulta de registro desde una aplicación lógica y usar su salida en otras acciones del flujo de trabajo. En este procedimiento se usa el conector de Azure Blob Storage para enviar la salida de la consulta al almacenamiento.

Captura de pantalla en la que se muestra información general de Logic Apps.

Al exportar datos desde un área de trabajo de Log Analytics, debe limitar la cantidad de datos que procesa el flujo de trabajo de Logic Apps. Filtre y agregue los datos de registro en la consulta para reducir los datos necesarios. Por ejemplo, si necesita exportar eventos de inicio de sesión, filtre por los eventos necesarios y proyecte solo los campos obligatorios. Por ejemplo:

SecurityEvent
| where EventID == 4624 or EventID == 4625
| project TimeGenerated , Account , AccountType , Computer

Cuando exporte los datos en una programación, use la función ingestion_time() en la consulta para asegurarse de no perder los datos de llegada tardía. Si los datos se retrasan debido a problemas de red o de plataforma, el uso del tiempo de ingesta garantiza que se incluirán en la ejecución siguiente de Logic Apps. Para ver un ejemplo, vea el paso "Agregar una acción Registros de Azure Monitor" en la sección Procedimiento de Logic Apps.

Requisitos previos

Los requisitos previos siguientes deben completarse antes de iniciar este procedimiento:

  • Área de trabajo de Log Analytics: el usuario que crea la aplicación lógica debe tener al menos permiso de lectura en el área de trabajo.
  • Cuenta de Azure Storage: no es necesario que la cuenta de almacenamiento esté en la misma suscripción que el área de trabajo de Log Analytics. El usuario que crea la aplicación lógica debe tener permiso de escritura en la cuenta de almacenamiento.

Límites de conector

El área de trabajo de Log Analytics y las consultas de registro de Azure Monitor son servicios multiinquilino que incluyen límites para proteger y aislar a los clientes, así como mantener la calidad del servicio. Al consultar una gran cantidad de datos, tenga en cuenta los límites siguientes, que pueden afectar la configuración de la periodicidad de la instancia de Logic Apps y la consulta de registro:

  • Las consultas de registro no pueden devolver más de 500 000 filas.
  • Las consultas de registro no pueden devolver más de 64 000 000 de bytes.
  • Las consultas de registro no se pueden ejecutar durante más de 10 minutos.
  • El conector de Log Analytics está limitado a 100 llamadas por minuto.

Procedimiento de Logic Apps

Las secciones siguientes le guiarán por el procedimiento.

Creación de un contenedor en la cuenta de almacenamiento

Use el procedimiento que aparece en Crear un contenedor para agregar a la cuenta de almacenamiento un contenedor que almacene los datos exportados. El nombre que se usa en el contenedor de este artículo es loganalytics-data, pero puede usar el que quiera.

Creación de un flujo de trabajo de aplicación lógica

  1. Vaya a Logic Apps en Azure Portal y seleccione Agregar. Seleccione una Suscripción, Grupo de recursos y Región para almacenar la aplicación lógica nueva. Después, asígnele un nombre único. Puede activar la opción de configuración Log Analytics para recopilar información sobre eventos y datos en tiempo de ejecución, tal como se describe en Configuración de registros de Azure Monitor y recopilación de datos de diagnóstico para Azure Logic Apps. Esta configuración no es necesaria para usar el conector de Azure Monitor Logs.

    Captura de pantalla en la que se muestra la creación de una aplicación lógica.

  2. Seleccione Revisar y crear y, luego, Crear. Cuando la implementación finalice, seleccione Ir al recurso para abrir el Diseñador de aplicaciones lógicas.

Creación de un desencadenador para el flujo de trabajo

En Empezar con un desencadenador común, seleccione Periodicidad. Esta configuración crea un flujo de trabajo de aplicación lógica que se ejecuta automáticamente a intervalos regulares. En el cuadro Frecuencia de la acción, seleccione Día. En el cuadro Intervalo de la acción, escriba 1 para ejecutar el flujo de trabajo una vez al día.

Captura de pantalla en la que se muestra una acción Periodicidad.

Incorporación de una acción Registros de Azure Monitor

La acción de registros de Azure Monitor le permite especificar la consulta que se va a ejecutar. La consulta de registro que se usa en este ejemplo está optimizada para una periodicidad por hora. Recopila los datos ingeridos durante el tiempo de ejecución determinado. Por ejemplo, si el flujo de trabajo se ejecuta a las 4:35, el intervalo de tiempo sería de 3:00 a 4:00. Si cambia la aplicación lógica para que se ejecute con una frecuencia distinta, también debe cambiar la consulta. Por ejemplo, si establece la periodicidad para que se ejecute a diario, debe establecer startTime en la consulta en startofday(make_datetime(year,month,day,0,0)).

Se le pedirá que seleccione un inquilino para conceder acceso al área de trabajo de Log Analytics con la cuenta que va a usar el flujo de trabajo a fin de ejecutar la consulta.

  1. Seleccione + Nuevo paso para agregar una acción que se ejecute después de la acción de periodicidad. En Elegir una acción, escriba azure monitor. Después, seleccione Azure Monitor Logs (Registros de Azure Monitor).

    Captura de pantalla en la que se muestra una acción Registros de Azure Monitor.

  2. Seleccione Azure Log Analytics: Ejecutar la consulta y mostrar los resultados.

    Captura de pantalla en la que se muestra que Registros de Azure Monitor está resaltado en la opción Elegir una acción.

  3. Seleccione las opciones de Suscripción y Grupo de recursos para su área de trabajo de Log Analytics. Seleccione Área de trabajo de Log Analytics para el Tipo de recurso. Luego, seleccione el nombre del área de trabajo en Nombre del recurso.

  4. En la ventana Consulta, agregue la consulta de registro siguiente:

    let dt = now();
    let year = datetime_part('year', dt);
    let month = datetime_part('month', dt);
    let day = datetime_part('day', dt);
     let hour = datetime_part('hour', dt);
    let startTime = make_datetime(year,month,day,hour,0)-1h;
    let endTime = startTime + 1h - 1tick;
    AzureActivity
    | where ingestion_time() between(startTime .. endTime)
    | project 
        TimeGenerated,
        BlobTime = startTime, 
        OperationName ,
        OperationNameValue ,
        Level ,
        ActivityStatus ,
        ResourceGroup ,
        SubscriptionId ,
        Category ,
        EventSubmissionTimestamp ,
        ClientIpAddress = parse_json(HTTPRequest).clientIpAddress ,
        ResourceId = _ResourceId 
    
  5. El Intervalo de tiempo especifica los registros que se incluirán en la consulta en función de la columna TimeGenerated. El valor debe ser mayor que el intervalo de tiempo seleccionado en la consulta. Como esta consulta no usa la columna TimeGenerated, la opción Establecer en la consulta no está disponible. Para obtener más información sobre el intervalo de tiempo, vea Ámbito de consulta. Seleccione Últimas 4 horas para Intervalo de tiempo. Esto garantiza que se incluirán en los resultados los registros con un tiempo de ingesta mayor que TimeGenerated.

    Captura de pantalla en la que se muestra la configuración de la nueva acción Registros de Azure Monitor denominada Ejecutar la consulta y visualizar los resultados.

Incorporación de una acción Analizar JSON (opcional)

La salida de la acción Ejecutar consulta y mostrar resultados tiene formato JSON. Puede analizar estos datos y manipularlos como parte de la preparación de la acción Componer.

Puede proporcionar un esquema JSON que describa la carga que espera recibir. El diseñador analiza el contenido JSON mediante este esquema y genera tokens fáciles de usar que representan las propiedades del contenido JSON. Luego, puede hacer referencia fácilmente a estas propiedades y utilizarlas a lo largo del flujo de trabajo de la aplicación lógica.

Puede usar una salida de muestra del paso Ejecutar la consulta y mostrar los resultados.

  1. Seleccione Ejecutar desencadenador en la cinta de opciones de Logic Apps. Luego seleccione Ejecutar y, después, descargue y guarde un registro de salida. Para la consulta de muestra del paso anterior, puede usar la salida de muestra siguiente:

    {
        "TimeGenerated": "2020-09-29T23:11:02.578Z",
        "BlobTime": "2020-09-29T23:00:00Z",
        "OperationName": "Returns Storage Account SAS Token",
        "OperationNameValue": "MICROSOFT.RESOURCES/DEPLOYMENTS/WRITE",
        "Level": "Informational",
        "ActivityStatus": "Started",
        "ResourceGroup": "monitoring",
        "SubscriptionId": "00000000-0000-0000-0000-000000000000",
        "Category": "Administrative",
        "EventSubmissionTimestamp": "2020-09-29T23:11:02Z",
        "ClientIpAddress": "192.168.1.100",
        "ResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/monitoring/providers/microsoft.storage/storageaccounts/my-storage-account"
    }
    
  2. Seleccione + Nuevo paso y, después, + Agregar una acción. En Elegir una operación, escriba json y, luego, seleccione Analizar JSON.

    Captura de pantalla en la que se muestra la selección de un operador Analizar JSON.

  3. Seleccione el cuadro Contenido para mostrar una lista de valores de las actividades anteriores. Seleccione Cuerpo en la acción Ejecutar consulta y mostrar resultados. Esta es la salida de la consulta de registro.

    Captura de pantalla en la que se muestra la selección de un cuerpo.

  4. Copie el registro de ejemplo guardado anteriormente. Seleccione Usar una carga de ejemplo para generar el esquema y cópielo.

    Captura de pantalla en la que se muestra el análisis de una carga JSON.

Incorporación de la acción Componer

La acción Componer toma la salida del JSON analizado y crea el objeto que necesita almacenar en el blob.

  1. Seleccione + Nuevo paso y luego + Agregar una acción. En Elegir una operación, escriba compose. Luego, seleccione la acción Redactar.

    Captura de pantalla en la que se muestra la selección de una acción Redactar.

  2. Seleccione el cuadro Entradas para ver una lista de valores de las actividades anteriores. Seleccione Cuerpo en la acción Analizar JSON. Esta es la salida analizada de la consulta de registro.

    Captura de pantalla en la que se muestra la selección de un cuerpo de una acción Redactar.

Incorporación de la acción Crear blob

La acción Crear blob escribe el JSON compuesto en el almacenamiento.

  1. Seleccione + Nuevo paso y luego + Agregar una acción. En Elegir una operación, escriba blob. Luego seleccione la acción Crear blob.

    Captura de pantalla en la que se muestra la selección de la acción Crear blob.

  2. Escriba un nombre para la conexión a la cuenta de almacenamiento en Nombre de conexión. Luego seleccione el icono de carpeta en el cuadro Ruta de acceso de la carpeta para seleccionar el contenedor de la cuenta de almacenamiento. Seleccione Nombre del blob para ver una lista de valores de las actividades anteriores. Seleccione Expresión y escriba una expresión que coincida con el intervalo de tiempo. Para esta consulta, que se ejecuta cada hora, la expresión siguiente establece el nombre del blob según la hora anterior:

    subtractFromTime(formatDateTime(utcNow(),'yyyy-MM-ddTHH:00:00'), 1,'Hour')
    

    Captura de pantalla en la que se muestra una expresión del blob.

  3. Seleccione el cuadro Contenido del blob para mostrar una lista de valores de las actividades anteriores. Luego seleccione Salidas en la sección Redactar.

    Captura de pantalla en la que se muestra la creación de una expresión del blob.

Probar el flujo de trabajo

Para probar el flujo de trabajo, seleccione Ejecutar. Si el flujo de trabajo tiene errores, se indican en el paso que contiene el problema. Puede ver las ejecuciones y profundizar en cada paso para ver la entrada y la salida a fin de investigar los errores. En caso necesario, vea Solución de problemas y diagnóstico de errores de flujo de trabajo en Azure Logic Apps.

Captura de pantalla en la que se muestra el historial de ejecuciones.

Visualización de registros en el almacenamiento

Vaya al menú Cuentas de almacenamiento de Azure Portal y seleccione su cuenta de almacenamiento. Haga clic en el icono de Blobs. Luego seleccione el contenedor que especificó en la acción Crear blob. Seleccione uno de los blobs y luego Editar blob.

Captura de pantalla en la que se muestran los datos del blob.

Plantilla de aplicación lógica

El paso opcional de análisis de JSON no se incluye en la plantilla

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Compose": {
                "inputs": "@body('Run_query_and_list_results')",
                "runAfter": {
                    "Run_query_and_list_results": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            },
            "Create_blob_(V2)": {
                "inputs": {
                    "body": "@outputs('Compose')",
                    "headers": {
                        "ReadFileMetadataFromServer": true
                    },
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['azureblob']['connectionId']"
                        }
                    },
                    "method": "post",
                    "path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('AccountNameFromSettings'))}/files",
                    "queries": {
                        "folderPath": "/logicappexport",
                        "name": "@{utcNow()}",
                        "queryParametersSingleEncoded": true
                    }
                },
                "runAfter": {
                    "Compose": [
                        "Succeeded"
                    ]
                },
                "runtimeConfiguration": {
                    "contentTransfer": {
                        "transferMode": "Chunked"
                    }
                },
                "type": "ApiConnection"
            },
            "Run_query_and_list_results": {
                "inputs": {
                    "body": "let dt = now();\nlet year = datetime_part('year', dt);\nlet month = datetime_part('month', dt);\nlet day = datetime_part('day', dt);\n let hour = datetime_part('hour', dt);\nlet startTime = make_datetime(year,month,day,hour,0)-1h;\nlet endTime = startTime + 1h - 1tick;\nAzureActivity\n| where ingestion_time() between(startTime .. endTime)\n| project \n    TimeGenerated,\n    BlobTime = startTime, \n    OperationName ,\n    OperationNameValue ,\n    Level ,\n    ActivityStatus ,\n    ResourceGroup ,\n    SubscriptionId ,\n    Category ,\n    EventSubmissionTimestamp ,\n    ClientIpAddress = parse_json(HTTPRequest).clientIpAddress ,\n    ResourceId = _ResourceId ",
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['azuremonitorlogs']['connectionId']"
                        }
                    },
                    "method": "post",
                    "path": "/queryData",
                    "queries": {
                        "resourcegroups": "resource-group-name",
                        "resourcename": "workspace-name",
                        "resourcetype": "Log Analytics Workspace",
                        "subscriptions": "workspace-subscription-id",
                        "timerange": "Set in query"
                    }
                },
                "runAfter": {},
                "type": "ApiConnection"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "$connections": {
                "defaultValue": {},
                "type": "Object"
            }
        },
        "triggers": {
            "Recurrence": {
                "evaluatedRecurrence": {
                    "frequency": "Day",
                    "interval": 1
                },
                "recurrence": {
                    "frequency": "Day",
                    "interval": 1
                },
                "type": "Recurrence"
            }
        }
    },
    "parameters": {
        "$connections": {
            "value": {
                "azureblob": {
                    "connectionId": "/subscriptions/logic-app-subscription-id/resourceGroups/logic-app-resource-group-name/providers/Microsoft.Web/connections/blob-connection-name",
                    "connectionName": "blob-connection-name",
                    "id": "/subscriptions/logic-app-subscription-id/providers/Microsoft.Web/locations/canadacentral/managedApis/azureblob"
                },
                "azuremonitorlogs": {
                    "connectionId": "/subscriptions/blob-connection-name/resourceGroups/logic-app-resource-group-name/providers/Microsoft.Web/connections/azure-monitor-logs-connection-name",
                    "connectionName": "azure-monitor-logs-connection-name",
                    "id": "/subscriptions/blob-connection-name/providers/Microsoft.Web/locations/canadacentral/managedApis/azuremonitorlogs"
                }
            }
        }
    }
}

Pasos siguientes