Compartir a través de


Correlacionar datos en Azure Data Explorer y Azure Resource Graph con datos en un área de trabajo de Log Analytics

Puede correlacionar datos en Azure Data Explorer y Azure Resource Graph con datos del área de trabajo de Log Analytics y recursos de Application Insights para mejorar el análisis en Registros de Azure Monitor. Microsoft Sentinel, que también almacena datos en áreas de trabajo de Log Analytics, admite consultas entre servicios a Azure Data Explorer, pero no a Azure Resource Graph. En este artículo se explica cómo ejecutar consultas entre servicios desde cualquier servicio que almacene datos en un área de trabajo de Log Analytics.

Ejecute consultas entre servicios mediante cualquier herramienta de cliente que admita consultas del Lenguaje de consulta Kusto (KQL), incluida la interfaz de usuario web de Log Analytics, los libros, PowerShell y la API de REST.

Permisos necesarios

Para ejecutar una consulta entre servicios que correlaciona los datos en Azure Data Explorer o Azure Resource Graph con datos de un área de trabajo de Log Analytics, necesita:

  • Permisos de Microsoft.OperationalInsights/workspaces/query/*/read para las áreas de trabajo de Log Analytics que consulte, como los que proporciona el Rol integrado de lector de Log Analytics, por ejemplo.
  • Permisos de lector para los recursos que consulta en Azure Resource Graph.
  • Permisos de visor para las tablas que consulta en Azure Data Explorer.

Consideraciones sobre la implementación

Consideraciones generales entre servicios

  • Los nombres de las bases de datos distinguen mayúsculas de minúsculas.

  • Use funciones y funciones no parametrizadas cuya definición no incluya otras expresiones entre áreas de trabajo o entre servicios, incluidas adx(), arg(), resource(), workspace() y app().

  • Las consultas entre servicios solo admiten la recuperación de datos.

  • Las consultas entre servicios admiten solo comandos ".show". Esta capacidad permite que las consultas entre clústeres hagan referencia directamente a una función tabular de Azure Monitor, Azure Data Explorer o Azure Resource Graph. Los siguientes comandos se admiten en la consulta entre servicios:

    • .show functions
    • .show function {FunctionName}
    • .show database {DatabaseName} schema as json
  • mv-expand admite hasta 2000 registros.

  • Los registros de Azure Monitor no admiten la función external_table(), lo que permite consultar tablas externas en Azure Data Explorer. Para consultar una tabla externa, defina external_table(<external-table-name>) como una función sin parámetros en Azure Data Explorer. A continuación, puede llamar a la función mediante la expresión adx("").<function-name>.

  • Cuando usa el operador join en lugar de la unión, debe usar hint para combinar los datos de Azure Data Explorer o Azure Resource Graph con los datos del área de trabajo de Log Analytics. Use Hint.remote={direction of the Log Analytics workspace}.

    Por ejemplo:

    AzureDiagnostics
    | join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)
    
  • No se admite la identificación de la columna de marca de tiempo en un clúster. La API de consulta de Log Analytics no pasa el filtro de tiempo.

  • Los clústeres de Data Explorer configurados con restricciones de IP o Private Link (puntos de conexión privados) no admiten consultas entre servicios.

Consideraciones sobre consultas entre servicios de Azure Resource Graph

  • Al consultar datos de Azure Resource Graph desde Azure Monitor:
    • El operador join le permite combinar datos de una tabla de Azure Resource Graph con una tabla del área de trabajo de Log Analytics.
    • La consulta devuelve solo los 1000 primeros registros.
    • Azure Monitor no devuelve errores de consulta de Azure Resource Graph.
    • El editor de consultas de Log Analytics marca las consultas válidas de Azure Resource Graph como errores de sintaxis.
    • Estos operadores no se admiten: smv-apply(), rand(), arg_max(), arg_min(), avg(), avg_if(), countif(), sumif(), percentile(), percentiles(), percentilew(), percentilesw(), stdev(), stdevif(), stdevp(), variance(), variancep(), varianceif().
  • Microsoft Sentinel no admite consultas entre servicios en Azure Resource Graph.

Consulta de datos en Azure Data Explorer mediante adx()

Escriba el identificador de un clúster de Azure Data Explorer en una consulta dentro del patrón adx, seguido del nombre y la tabla de la base de datos.

adx('https://help.kusto.windows.net/Samples').StormEvents

Combinación de tablas de clúster de Azure Data Explorer con un área de trabajo de Log Analytics

Use el comando union para combinar las tablas de clúster con un área de trabajo de Log Analytics.

Por ejemplo:

union customEvents, adx('https://help.kusto.windows.net/Samples').StormEvents
| take 10
let CL1 = adx('https://help.kusto.windows.net/Samples').StormEvents;
union customEvents, CL1 | take 10

Sugerencia

Se permite el formato abreviado: nombreDeClúster/catálogoInicial. Por ejemplo, adx('help/Samples') se convierte en adx('help.kusto.windows.net/Samples').

Combinación de datos desde un clúster de Azure Data Explorer de un inquilino con un recurso de Azure Monitor de otro inquilino

No se admiten las consultas entre inquilinos en los servicios. Debe iniciar sesión en un solo inquilino para ejecutar la consulta que abarca ambos recursos.

Si el recurso de Azure Data Explorer está en el inquilino A y el área de trabajo de Log Analytics está en el inquilino B, use uno de los métodos siguientes:

  • Utilice Azure Data Explorer para agregar roles en entidades de seguridad de distintos inquilinos. Agregue su identificador de usuario en el inquilino B como usuario autorizado en el clúster de Azure Data Explorer. Compruebe que la propiedad TrustedExternalTenant del clúster de Azure Data Explorer contiene al inquilino B. Ejecute la consulta cruzada completamente en el inquilino B.
  • Use Lighthouse para proyectar el recurso de Azure Monitor en el inquilino A.

Conexión a clústeres de Azure Data Explorer desde otros inquilinos

Kusto Explorer inicia sesión automáticamente en el inquilino al que pertenece originalmente la cuenta de usuario. Para acceder a los recursos de otros inquilinos con la misma cuenta de usuario, tiene que especificar explícitamente el valor de TenantId en la cadena de conexión:

Data Source=https://ade.applicationinsights.io/subscriptions/SubscriptionId/resourcegroups/ResourceGroupName;Initial Catalog=NetDefaultDB;AAD Federated Security=True;Authority ID=TenantId

Consultar datos en Azure Resource Graph mediante arg() (versión preliminar)

Introduzca el patrón arg(""), seguido del nombre de la tabla de Azure Resource Graph.

Por ejemplo:

arg("").<Azure-Resource-Graph-table-name>

Sugerencia

El operador arg() ya está disponible para la búsqueda avanzada en la plataforma unificada de Microsoft Defender. Esta característica solo le permite consultar datos de Microsoft Sentinel. Obtenga más información en Uso del operador arg() para consultas de Azure Resource Graph.

Estas son algunas consultas de ejemplo de Azure Log Analytics que usan las nuevas funcionalidades de consulta entre servicios de Azure Resource Graph:

  • Filtre una consulta de Log Analytics en función de los resultados de una consulta de Azure Resource Graph:

    arg("").Resources 
    | where type == "microsoft.compute/virtualmachines" and properties.hardwareProfile.vmSize startswith "Standard_D"
    | join (
        Heartbeat
        | where TimeGenerated > ago(1d)
        | distinct Computer
        )
        on $left.name == $right.Computer
    
  • Cree una regla de alerta que solo se aplique a determinados recursos tomados de una consulta ARG:

    • Excluya los recursos basados en etiquetas (por ejemplo, no desencadenar alertas para las máquinas virtuales con la etiqueta "Prueba").

      arg("").Resources
      | where tags.environment=~'Test'
      | project name 
      
    • Recupere los datos de rendimiento relacionados con el uso de CPU y filtre por recursos con la etiqueta "prod".

      InsightsMetrics
      | where Name == "UtilizationPercentage"
      | lookup (
          arg("").Resources 
          | where type == 'microsoft.compute/virtualmachines' 
          | project _ResourceId=tolower(id), tags
          )
          on _ResourceId
      | where tostring(tags.Env) == "Prod"
      

Más casos de uso:

  • Use una etiqueta para determinar si las máquinas virtuales deben ejecutarse 24/7 o deben apagarse por la noche.
  • Muestre alertas en cualquier servidor que contenga un número determinado de núcleos.

Creación de una alerta basada en una consulta entre servicios desde el área de trabajo de Log Analytics

Para crear una regla de alerta basada en una consulta entre servicios desde el área de trabajo de Log Analytics, siga los pasos descritos en Creación o edición de una regla de alertas de búsqueda de registros, seleccionando el área de trabajo de Log Analytics, en la pestaña Ámbito.

Nota:

También puede ejecutar consultas entre servicios desde Azure Data Explorer y Azure Resource Graph en un área de trabajo de Log Analytics seleccionando el recurso correspondiente como ámbito de la alerta.

Combine tablas de Azure Resource Graph con un área de trabajo de Log Analytics

Use el comando union para combinar las tablas de clúster con un área de trabajo de Log Analytics.

Por ejemplo:

union AzureActivity, arg("").Resources
| take 10
let CL1 = arg("").Resources ;
union AzureActivity, CL1 | take 10

Cuando usa el joinoperador en lugar de la unión, debe usar hint para combinar los datos en Azure Resource Graph con datos en el área de trabajo de Log Analytics. Use Hint.remote={Direction of the Log Analytics Workspace}. Por ejemplo:

Perf | where ObjectName == "Memory" and (CounterName == "Available MBytes Memory")
| extend _ResourceId = replace_string(replace_string(replace_string(_ResourceId, 'microsoft.compute', 'Microsoft.Compute'), 'virtualmachines','virtualMachines'),"resourcegroups","resourceGroups")
| join hint.remote=left (arg("").Resources | where type =~ 'Microsoft.Compute/virtualMachines' | project _ResourceId=id, tags) on _ResourceId | project-away _ResourceId1 | where tostring(tags.env) == "prod"

Pasos siguientes