Análisis del uso en un área de trabajo de Log Analytics

Los costos de Azure Monitor pueden variar significativamente en función del volumen de datos recopilados en el espacio de trabajo de Log Analytics. El conjunto de soluciones que usan el área de trabajo y la cantidad de datos que recopila cada solución afectan a este volumen.

En este artículo se proporcionan instrucciones sobre cómo analizar los datos recopilados para ayudarle a controlar los costos de ingesta de datos. Esto le permitirá realizar lo siguiente:

  • Determine la causa del uso superior al esperado.
  • Prediga los costos a medida que supervisa más recursos y configura diferentes características de Azure Monitor.

Captura de pantalla que muestra la salida de una consulta de ejemplo en Log Analytics.

Sugerencia

Para descubrir estrategias que le ayudarán a reducir los costes de Azure Monitor, consulte Optimización de costes y Azure Monitor.

Causas de un uso superior al esperado

Cada área de trabajo de Log Analytics se cobra como un servicio independiente y contribuye a la factura de la suscripción a Azure. La cantidad de datos ingeridos puede ser considerable dependiendo de los factores siguientes:

Un aumento inesperado en cualquiera de estos factores puede dar lugar a un aumento de los cargos por la retención de datos. En el resto de este artículo se proporcionan métodos para detectar este tipo de situación y, a continuación, analizar los datos recopilados para identificar y mitigar el origen del aumento del uso.

Enviar una alerta cuando la recopilación de datos es alta

Para evitar facturas inesperadas, configure notificaciones proactivas para un uso excesivo. Al recibir notificaciones, se configura para solucionar posibles anomalías antes del final del período de facturación.

El ejemplo siguiente es una regla de alerta de búsqueda de registros que envía una alerta si el volumen de datos facturable ingerido en las últimas 24 horas es mayor que 50 GB. Modifique la configuración de la lógica de alertas para usar un umbral diferente basado en el uso esperado en su entorno También puede aumentar la frecuencia para comprobar el uso varias veces al día, pero esta opción da como resultado un cargo mayor para la regla de alertas.

Configuración Importancia
Ámbito
Ámbito de destino Seleccione el área de trabajo de Log Analytics.
Condition
Consultar Usage \| where IsBillable \| summarize DataGB = sum(Quantity / 1000)
Medición Medida: DataGB
Tipo de agregación: Total
Granularidad de agregación: 1 día
Lógica de alerta Operador: Mayor que
Valor del umbral: 50
Frecuencia de evaluación: 1 día
Acciones Seleccione o agregue un grupo de acciones para que le notifique cuando se supere el umbral.
Detalles
gravedad Advertencia
Nombre de la regla de alertas Volumen de datos facturables superior a 50 GB en 24 horas.

Análisis del uso con herramientas integradas

Use las herramientas existentes en Azure Monitor para iniciar el análisis. Esta herramientas no requieren ninguna configuración y, a menudo, pueden proporcionar la información que necesita con un esfuerzo mínimo. Si necesita un análisis más profundo de los datos recopilados que el que ofrecen las características existentes de Azure Monitor, use cualquiera de las siguientes consultas de registro de Log Analytics.

Análisis del espacio de trabajo de Log Analytics

Log Analytics Workspace Insights proporciona una comprensión rápida de los datos del área de trabajo. Por ejemplo, estas son algunas de las conclusiones que puede descubrir:

  • Tablas de datos que ingieren la mayoría del volumen de datos de la tabla principal.
  • Principales recursos que contribuyen a los datos.
  • La tendencia de la ingesta de datos.

La pestaña Uso proporciona un desglose de la ingesta por solución y tabla. Esta información le ayuda a identificar rápidamente las tablas que contribuyen a la mayor parte del volumen de datos. En la pestaña también se muestran las tendencias de la recopilación de datos a lo largo del tiempo. Vea si la recopilación de datos aumenta constantemente con el tiempo o aumenta repentinamente en respuesta a un cambio de configuración.

Seleccione Consultas adicionales para consultas precompiladas que le ayuden a comprender mejor los patrones de datos.

Uso y costos estimados

El gráfico Ingesta de datos por solución en la página Uso y costos estimados para cada área de trabajo muestra el volumen total de datos enviados y la cantidad que envía cada solución durante los 31 días anteriores. Esta información le ayuda a determinar las tendencias, como si algún aumento procede del uso general de datos o del uso por parte de una solución específica.

Consulta el volumen de datos facturable en la tabla Uso

Analice la cantidad de datos facturables que recopiló una solución o servicio concreto. Este tipo de consultas utiliza la tabla Uso. Esta recopila los datos de uso de cada tabla del área de trabajo.

Nota:

La cláusula con TimeGenerated solo se utiliza para garantizar que la experiencia de consulta en Azure Portal examina más allá del período predeterminado de 24 horas. Al utilizar el tipo de datos Uso, StartTime y EndTime representan los períodos de tiempo de los que se presentan resultados.

Volumen de datos facturable por tipo durante el último mes

Usage 
| where TimeGenerated > ago(32d)
| where StartTime >= startofday(ago(31d)) and EndTime < startofday(now())
| where IsBillable == true
| summarize BillableDataGB = sum(Quantity) / 1000. by bin(StartTime, 1d), DataType 
| render columnchart

Volumen de datos facturable por plan de tabla durante el último mes

Vea la cantidad de datos ingeridos en cada plan de tabla (registros de análisis, registros básicos o registros auxiliares). Esta Plan columna se agregó a la tabla Usage a mediados de mayo de 2026. Los datos ingeridos antes de eso no tendrán rellenada esta columna.

Usage 
| where TimeGenerated > ago(32d)
| where StartTime >= startofday(ago(31d)) and EndTime < startofday(now())
| where IsBillable == true
| summarize BillableDataGB = sum(Quantity) / 1000. by bin(StartTime, 1d), Plan
| render columnchart

Volumen de datos facturable por solución y tipo durante el último mes

Usage 
| where TimeGenerated > ago(32d)
| where StartTime >= startofday(ago(31d)) and EndTime < startofday(now())
| where IsBillable == true
| summarize BillableDataGB = sum(Quantity) / 1000 by Solution, DataType
| sort by Solution asc, DataType asc

Para obtener más consultas de ejemplo, consulte Consultas para la tabla de Uso.

Consulta del volumen de datos facturable a partir de registros de eventos

Use consultas log en Log Analytics si necesita un análisis más profundo de los datos recopilados. Cada tabla de un área de trabajo de Log Analytics tiene las siguientes columnas estándar que pueden ayudarle a analizar los datos facturables:

  • _IsBillable identifica los registros que incurren en un cargo de ingesta. Use esta columna para filtrar los datos no facturables.
  • _BilledSize proporciona el tamaño del registro en bytes.

Volumen de datos facturable para eventos específicos

Si cree que un tipo determinado de datos está recopilando una cantidad excesiva de datos, puede que desee analizar los datos de esa tabla para determinar qué registros están aumentando concretamente. En el siguiente ejemplo, se filtran los id. de eventos concretos de la tabla Event y, después, se proporciona un recuento para cada id. Puede modificar estas consultas mediante el uso de las columnas de otras tablas.

Event
| where TimeGenerated > startofday(ago(31d)) and TimeGenerated < startofday(now()) 
| where EventID == 5145 or EventID == 5156
| where _IsBillable == true
| summarize count(), Bytes=sum(_BilledSize) by EventID, bin(TimeGenerated, 1d)

Para obtener más consultas de ejemplo, consulte Consultas para la tabla Event.

Volumen de datos por recurso de Azure, grupo de recursos o suscripción

Puede analizar la cantidad de datos facturables recopilados de un determinado recurso o conjunto de recursos. Estas consultas usan las columnas _ResourceId y _SubscriptionId para recuperar los datos de los recursos hospedados en Azure.

Advertencia

Use las consultas find con moderación, ya que la ejecución de exámenes que abarcan distintos tipos de datos consume muchos recursos. Si no necesita resultados por suscripción, grupo de recursos o nombre de recurso, use las consultas de la tabla Uso en Consulta del volumen de datos facturables de la tabla Uso.

Volumen de datos facturable por identificador de recurso para el último día completo

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _ResourceId, _BilledSize, _IsBillable
| where _IsBillable == true 
| summarize BillableDataBytes = sum(_BilledSize) by _ResourceId 
| sort by BillableDataBytes nulls last

Volumen de datos facturable por grupo de recursos para el último día completo

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _ResourceId, _BilledSize, _IsBillable
| where _IsBillable == true 
| summarize BillableDataBytes = sum(_BilledSize) by _ResourceId
| extend resourceGroup = tostring(split(_ResourceId, "/")[4] )
| summarize BillableDataBytes = sum(BillableDataBytes) by resourceGroup 
| sort by BillableDataBytes nulls last

Puede resultar útil analizar _ResourceId:

| parse tolower(_ResourceId) with "/subscriptions/" subscriptionId "/resourcegroups/" 
    resourceGroup "/providers/" provider "/" resourceType "/" resourceName   

Volumen de datos facturable por suscripción para el último día completo

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _BilledSize, _IsBillable, _SubscriptionId
| where _IsBillable == true 
| summarize BillableDataBytes = sum(_BilledSize) by _SubscriptionId 
| sort by BillableDataBytes nulls last

Sugerencia

En el caso de las áreas de trabajo con grandes volúmenes de datos, al realizar consultas como se muestra en esta sección --, que consultan grandes volúmenes de datos sin procesar, es posible que deba restringirse a un solo día. Para realizar un seguimiento de las tendencias a lo largo del tiempo, considere la posibilidad de configurar un informe de Power BI y usar la actualización incremental para recopilar volúmenes de datos por recurso una vez al día.

Volumen de datos por equipo

Puede analizar la cantidad de datos facturables que se recopilan de una máquina virtual o de un conjunto de ellas. La tabla Uso no tiene la granularidad para mostrar volúmenes de datos de máquinas virtuales específicas, por lo que estas consultas usan el operador find para buscar en todas las tablas que incluyen un nombre de equipo. El tipo Uso se omite, ya que es solo para el análisis de tendencias de datos.

Advertencia

Use las consultas find con moderación, ya que la ejecución de exámenes que abarcan distintos tipos de datos consume muchos recursos. Si no necesita resultados por suscripción, grupo de recursos o nombre de recurso, use las consultas de la tabla Uso en Consulta del volumen de datos facturables de la tabla Uso.

Volumen de datos facturable por equipo durante el último día completo

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _BilledSize, _IsBillable, Computer, Type
| where _IsBillable == true and Type != "Usage"
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| summarize BillableDataBytes = sum(_BilledSize) by  computerName 
| sort by BillableDataBytes desc nulls last

Recuento de eventos facturables por ordenador para el último día completo

find where TimeGenerated between(startofday(ago(1d))..startofday(now())) project _IsBillable, Computer, Type
| where _IsBillable == true and Type != "Usage"
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| summarize eventCount = count() by computerName  
| sort by eventCount desc nulls last

Consultar el volumen de datos para tipos de datos comunes

Si descubre que tiene una cantidad excesiva de datos facturables para un tipo de datos en particular, puede que deba realizar una consulta para analizar los datos de la tabla correspondiente. Las consultas siguientes proporcionan ejemplos para algunos tipos de datos comunes:

Solución de seguridad

SecurityEvent 
| summarize AggregatedValue = count() by EventID
| order by AggregatedValue desc nulls last

Consulte Consultas para la tabla SecurityEvent para obtener más consultas de ejemplo.

Solución de administración de registros

Usage 
| where Solution == "LogManagement" and iff(isnotnull(toint(IsBillable)), IsBillable == true, IsBillable == "true") == true 
| summarize AggregatedValue = count() by DataType
| order by AggregatedValue desc nulls last

Para obtener más consultas de ejemplo, consulte Consultas para la tabla de Uso.

Tipo de datos Perf

Perf 
| summarize AggregatedValue = count() by CounterPath
Perf 
| summarize AggregatedValue = count() by CounterName

Consulte Consultas para la tabla Perf para obtener más consultas de ejemplo.

Tipo de datos de evento

Event 
| summarize AggregatedValue = count() by EventID
Event 
| summarize AggregatedValue = count() by EventLog, EventLevelName

Para obtener más consultas de ejemplo, consulte Consultas para la tabla Event.

Tipo de datos de Syslog

Syslog 
| summarize AggregatedValue = count() by Facility, SeverityLevel
Syslog 
| summarize AggregatedValue = count() by ProcessName

Consulte Consultas para la tabla syslog para obtener más consultas de ejemplo.

Tipo de datos AzureDiagnostics

AzureDiagnostics 
| summarize AggregatedValue = count() by ResourceProvider, ResourceId

Consulte Consultas para la tabla AzureDiagnostics para obtener más consultas de ejemplo.

Consulta del volumen de datos de Application Insights

Las siguientes consultas se aplican a los recursos de Application Insights, incluidos los recursos clásicos que almacenan datos fuera de un área de trabajo de Log Analytics. Tanto para los recursos clásicos como para los basados en áreas de trabajo, use la propiedad _BilledSize disponible en cada evento ingerido. En el caso de los recursos clásicos, también puede usar información agregada en la tabla systemEvents .

Nota:

Las consultas en tablas de Application Insights, excepto SystemEvents, funcionan para un recurso de Application Insights clásico y basado en áreas de trabajo. La compatibilidad con versiones anteriores le permite seguir usando nombres de tabla heredados. Si usa un recurso basado en el área de trabajo, abra la página Registros en el menú del área de trabajo de Log Analytics. Si usa un recurso clásico, abra la página Registros desde el menú de Application Insights.

Operaciones de dependencia que generan el mayor volumen de datos en los últimos 30 días (basadas en el espacio de trabajo o clásicas)

dependencies
| where timestamp >= startofday(ago(30d))
| summarize sum(_BilledSize) by operation_Name
| render barchart  

Volumen de datos diario por tipo para este recurso de Application Insights los últimos 7 días (solo clásico)

systemEvents
| where timestamp >= startofday(ago(7d)) and timestamp < startofday(now())
| where type == "Billing"
| extend BillingTelemetryType = tostring(dimensions["BillingTelemetryType"])
| extend BillingTelemetrySizeInBytes = todouble(measurements["BillingTelemetrySize"])
| summarize sum(BillingTelemetrySizeInBytes) by BillingTelemetryType, bin(timestamp, 1d)  

Para examinar las tendencias de los volúmenes de datos en los recursos de Application Insights basados en áreas de trabajo, use una consulta que incluya todas las tablas de Application Insights. Las siguientes consultas usan los nombres de tablas específicos de los recursos basados en áreas de trabajo.

Volumen de datos diario por tipo para todos los recursos de Application Insights de un área de trabajo durante los 7 días

union AppAvailabilityResults,
      AppBrowserTimings,
      AppDependencies,
      AppExceptions,
      AppEvents,
      AppMetrics,
      AppPageViews,
      AppPerformanceCounters,
      AppRequests,
      AppSystemEvents,
      AppTraces
| where TimeGenerated >= startofday(ago(7d)) and TimeGenerated < startofday(now())
| summarize sum(_BilledSize) by _ResourceId, bin(TimeGenerated, 1d)

Para ver las tendencias del volumen de datos de un solo recurso de Application Insights, agregue la siguiente línea antes del summarize en la consulta anterior:

| where _ResourceId contains "<myAppInsightsResourceName>"

Sugerencia

En el caso de las áreas de trabajo con grandes volúmenes de datos, restrinja consultas como la anterior, que consultan grandes volúmenes de datos sin procesar, a un solo día. Para realizar un seguimiento de las tendencias a lo largo del tiempo, considere la posibilidad de configurar un informe de Power BI y usar la actualización incremental para recopilar volúmenes de datos por recurso una vez al día.

Descripción de nodos que envían datos

Si no ve datos excesivos de ningún origen determinado, es posible que tenga un número excesivo de agentes que envían datos.

Recuento de los nodos de agente que enviaron un latido diario durante el último mes

Heartbeat 
| where TimeGenerated > startofday(ago(31d))
| summarize nodes = dcount(Computer) by bin(TimeGenerated, 1d)    
| render timechart

Para obtener más consultas de ejemplo, consulte Consultas para la tabla Heartbeat.

Advertencia

Use las consultas find con moderación, ya que la ejecución de exámenes que abarcan distintos tipos de datos consume muchos recursos. Si no necesita resultados por suscripción, grupo de recursos o nombre de recurso, use las consultas de la tabla Uso en Consulta del volumen de datos facturables de la tabla Uso.

Recuento de nodos que envían datos en las últimas 24 horas

find where TimeGenerated > ago(24h) project Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize nodes = dcount(computerName)

Volumen de datos enviado por cada nodo en las últimas 24 horas

find where TimeGenerated > ago(24h) project _BilledSize, Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize TotalVolumeBytes=sum(_BilledSize) by computerName

Nodos facturados según el plan de tarifa heredado por nodo

El plan de tarifa heredado por nodo factura los nodos con granularidad por hora. Tampoco cuenta los nodos que solo envían un conjunto de tipos de datos de seguridad. Para obtener una lista de los equipos que se facturan como nodos si el área de trabajo se encuentra en el plan de tarifa heredado Por nodo, busque los nodos que envían tipos de datos facturados, ya que algunos tipos de datos son gratuitos. En este caso, use el campo ubicado más a la izquierda del nombre de dominio completo.

Las siguientes consultas devuelven el recuento de equipos cuyos datos se facturan por horas. El número de unidades que figura en su factura se expresa en unidades de meses de nodo, que la consulta representa como billableNodeMonthsPerDay. Si el área de trabajo tiene instalada la solución Update Management, agregue los tipos de datos Actualizar y UpdateSummary a la lista de la cláusula where.

find where TimeGenerated >= startofday(ago(7d)) and TimeGenerated < startofday(now()) project Computer, _IsBillable, Type, TimeGenerated
| where Type !in ("SecurityAlert", "SecurityBaseline", "SecurityBaselineSummary", "SecurityDetection", "SecurityEvent", "WindowsFirewall", "LinuxAuditLog", "ProtectionStatus", "WindowsEvent", "MDCFileIntegrityMonitoringEvents")
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| where _IsBillable == true
| summarize billableNodesPerHour=dcount(computerName) by bin(TimeGenerated, 1h)
| summarize billableNodesPerDay = sum(billableNodesPerHour)/24., billableNodeMonthsPerDay = sum(billableNodesPerHour)/24./31.  by day=bin(TimeGenerated, 1d)
| sort by day asc

Nota:

Si se usa un destino de solución no representado en la consulta anterior, se añadirá una cierta complejidad adicional al algoritmo de facturación real.

Diagnosticar datos con llegada tardía

Si observa un elevado volumen de ingesta de datos al consultar los registros Usage, pero no obtiene los mismos resultados al sumar _BilledSize directamente sobre el tipo de datos, es posible que la causa sea la llegada tardía de datos. Esta situación ocurre cuando los datos se ingieren con marcas de tiempo antiguas.

Por ejemplo, un agente podría experimentar un problema de conectividad y enviar los datos acumulados una vez que se vuelva a conectar. O un anfitrión podría tener una hora incorrecta. Esto puede resultar en una discrepancia aparente entre los datos ingeridos que notifique el tipo de datos Uso y una consulta que sume la propiedad _BilledSize a los datos sin procesar, de un día determinado que especifica TimeGenerated; la marca de tiempo en la que se generó el evento.

Para diagnosticar problemas de datos de llegada tardía, use la columna _TimeReceived y la columna TimeGenerated . La propiedad _TimeReceived es la hora en que Azure Monitor recibe el registro.

El siguiente ejemplo responde a un escenario con grandes volúmenes de datos W3CIISLog, ingeridos el 2 de mayo de 2021, y tiene la finalidad de identificar las marcas de tiempo de estos datos ingeridos. La instrucción where TimeGenerated > datetime(1970-01-01) solo se incluye para proporcionar una pista a la interfaz de usuario de Log Analytics, para que busque a través de todos los datos.

W3CIISLog
| where TimeGenerated > datetime(1970-01-01)
| where _TimeReceived >= datetime(2021-05-02) and _TimeReceived < datetime(2021-05-03) 
| where _IsBillable == true
| summarize BillableDataMB = sum(_BilledSize)/1.E6 by bin(TimeGenerated, 1d)
| sort by TimeGenerated asc 

Pasos siguientes