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.

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').

Cuando se usa el joinoperador en lugar de unión, se le pedirá que use un hint para combinar los datos del clúster de Azure Data Explorer con el á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)

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>

El operador arg() de Log Analytics también se puede usar en la plataforma unificada de Microsoft Defender. El operador arg() solo funciona sobre los datos de Microsoft Sentinel (es decir, no se admiten las tablas Defender XDR). Esta característica le permite aprovechar arg() y sus conclusiones directamente dentro de la interfaz de búsqueda avanzada de amenazas, lo que le ahorra la necesidad de abrir manualmente una nueva ventana para que Microsoft Sentinel use el operador.

Recorte de pantalla del operador arg en la búsqueda avanzada de amenazas.

Sugerencia

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

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.

Limitaciones

Limitaciones generales de las consultas entre servicios

  • Las consultas entre servicios no admiten funciones ni funciones con parámetros cuya definición incluye otras expresiones entre áreas de trabajo o entre servicios, incluidas adx(), arg(), resource(), workspace() y app().
  • Las consultas entre servicios admiten solo funciones de ".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
  • Los nombres de las bases de datos distinguen mayúsculas de minúsculas.
  • No se admite la identificación de la columna marca de tiempo en el clúster. La API de consulta de Log Analytics no pasará el filtro de tiempo.
  • Las consultas entre servicios solo admiten la recuperación de datos.
  • Private Link (puntos de conexión privados) y las restricciones de IP no admiten consultas entre servicios.
  • mv-expand se limita a 2000 recursos.
  • 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>.

Limitaciones de consultas entre servicios de Azure Resource Graph

  • Microsoft Sentinel no admite consultas entre servicios en Azure Resource Graph.
  • Al consultar datos de Azure Resource Graph desde Azure Monitor:
    • 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.
    • Las combinaciones no se admiten cuando no se usa Hint.
    • 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().

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