Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Mejore el análisis en los registros de Azure Monitor mediante la correlación de datos en Azure Data Explorer y Azure Resource Graph con datos en el área de trabajo de Log Analytics y los recursos de Application Insights. 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. Aunque Microsoft Sentinel almacena datos en áreas de trabajo de Log Analytics y admite consultas entre servicios en Azure Data Explorer, no todas las características de Microsoft Sentinel admiten consultas en Azure Resource Graph.
Ejecute consultas entre servicios utilizando cualquier herramienta de cliente que admita consultas del Lenguaje de Consulta Kusto (KQL), incluidos Log Analytics en el portal de Azure, libros de trabajo, PowerShell y la API REST.
Prerrequisitos
| Recurso | Permiso necesario |
|---|---|
| Área de trabajo de Log Analytics |
Microsoft.OperationalInsights/workspaces/query/*/read en las áreas de trabajo de Log Analytics que consulta, por ejemplo, tal como proporciona el rol integrado Lector de Log Analytics. |
| Gráfico de Recursos de Azure | Permisos de lectura para los recursos que consulta en Azure Resource Graph |
| Explorador de Datos de Azure | Visualización de permisos para las tablas que consulta en Azure Data Explorer |
Consideraciones de implementación
Las consultas entre servicios no se admiten en los escenarios siguientes:
- Nubes gubernamentales
- Clústeres de Data Explorer configurados con restricciones de IP o Private Link (puntos de conexión privados)
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. Las funciones aceptables incluyen
adx(),arg(),resource(),workspace()yapp(). - Las consultas entre servicios solo admiten la recuperación de datos.
- Los únicos comandos que las consultas entre servicios admiten son los
.showcomandos. 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.
.showcomandos compatibles con la consulta entre servicios:.show functions.show function {FunctionName}.show database {DatabaseName} schema as json - 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.
-
mv-expandadmite 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, definaexternal_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ónadx("").<function-name>. - Cuando usa el operador
joinen lugar de la unión, debe usarhintpara combinar los datos de Azure Data Explorer o Azure Resource Graph con los datos del área de trabajo de Log Analytics. UtiliceHint.remote={direction of the Log Analytics workspace}.
Por ejemplo:AzureDiagnostics | join hint.remote=left adx("cluster=ClusterURI").AzureDiagnostics on (ColumnName)
Consideraciones sobre consultas entre servicios de Azure Resource Graph
- La
argparte de la consulta solo devuelve los primeros 1000 registros. Tenga esto en cuenta si se combina con ,joinya que puede que falten registros si se alcanza el límite. - El operador
joinle permite combinar datos de una tabla de Azure Resource Graph con una tabla del área de trabajo de Log Analytics. - 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. Por ejemplo, una consulta válida podría dar un error similar al siguiente: "El nombre <> válido no hace referencia a ninguna columna, tabla, variable o función conocidas".
- 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(),bin_at. - Microsoft Sentinel no admite consultas entre servicios en todas las características en las que se usa KQL.
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: ClusterName/InitialCatalog. 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 el 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 de amenazas en el portal de Microsoft Defender. Esta característica permite resultados que consultan tablas de Microsoft Sentinel. Para más detalles, revise Consultas de Azure Resource Graph en el contexto de búsquedas avanzadas.
Estas son algunas consultas de ejemplo de Azure Log Analytics que usan las nuevas funcionalidades de consulta entre servicios de Azure Resource Graph:
Ejemplo: Filtrado de consultas 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
Ejemplos: Creación de una regla de alerta que solo se aplica a determinados recursos tomados de una consulta arg()
Excluya los recursos en función de las etiquetas. Por ejemplo, no desencadene alertas para máquinas virtuales con una Test etiqueta .
arg("").Resources
| where tags.environment=~'Test'
| project name
Recupere los datos de rendimiento relacionados con el uso de CPU y filtre por los recursos con la prod etiqueta .
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 de ejemplo
- Use una etiqueta para determinar si las máquinas virtuales deben ejecutarse ininterrumpidamente o deben apagarse por la noche.
- Mostrar alertas en cualquier servidor que contenga un número definido 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 .
Sugerencia
Ejecute consultas entre servicios desde Azure Data Explorer y Azure Resource Graph en un área de trabajo de Log Analytics; para ello, seleccione 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. Utilice 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"