Análisis del uso en un área de trabajo de Log Analytics
Los costos de la plataforma Azure Monitor pueden variar significativamente en función del volumen de datos que se recopilan en el área de trabajo de Log Analytics. Este volumen lo determinan el conjunto de soluciones que usan el área de trabajo y la cantidad de datos que recopila cada solución. En este artículo se proporcionan instrucciones sobre cómo analizar los datos recopilados para ayudarle a controlar los costos de la ingesta de datos. Le ayuda a determinar la causa del uso más alto que el esperado. Además, le ayudará a predecir los costos mediante la supervisión de recursos adicionales y la configuración de diferentes características de Azure Monitor.
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:
- El conjunto de conclusiones y servicios habilitados y su configuración
- El número y tipo de recursos supervisados
- El volumen de datos recopilados de cada recurso supervisado
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, debería recibir una notificación proactiva cada vez que experimente un uso excesivo. La notificación le permite abordar cualquier posible anomalía antes de que finalice el periodo 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 era 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 supondrá un cargo mayor para la regla de alerta.
Configuración | Valor |
---|---|
Á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 | |
severity | Advertencia |
Nombre de la regla de alertas | Volumen de datos facturables superior a 50 GB en 24 horas. |
Análisis de uso en Azure Monitor
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.
Conclusiones del área de trabajo de Log Analytics
La herramienta Conclusiones del área de trabajo de Log Analytics le proporciona una descripción rápida de los datos del área de trabajo. Por ejemplo, puede determinar lo siguiente:
- Las tablas de datos que ingieren el mayor volumen de datos de la tabla principal.
- Los principales recursos que ofrecen datos.
- La tendencia de la ingesta de datos.
Consulte la pestaña Uso para obtener un desglose de la ingesta por solución y tabla. Esta información puede ayudarle a identificar rápidamente qué tablas 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. Puede determinar si la recopilación de datos aumentó constantemente a lo largo del tiempo o, por el contrario, aumentó repentinamente en respuesta a un cambio concreto de configuración.
Seleccione Consultas adicionales para obtener consultas pregeneradas que le ayudarán a comprender los patrones de datos aún mejor.
Uso y costos estimados
El gráfico de ingesta de datos por solución de la página Uso y costos estimados de cada área de trabajo muestra el volumen total de datos enviados y la cantidad enviada por cada solución durante los últimos 31 días. Esta información le ayudará a determinar tendencias como, por ejemplo, si algún aumento procede del uso general de datos o del uso de una solución concreta.
Consulta de volúmenes de datos desde la tabla de 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.
La siguiente consulta recopila el 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
La siguiente consulta recopila el 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
Consulta de volúmenes de datos directamente desde los eventos
Si necesita un análisis más profundo en los datos recopilados, puede usar las consultas de registro de Log Analytics. Cada una de las tablas de un área de trabajo de Log Analytics contiene las siguientes columnas estándar. Estas pueden ayudarle a analizar los datos facturables:
- _IsBillable identifica a los registros que tienen un cargo por ingesta. Use esta columna para filtrar los datos no facturables.
- _BilledSize proporciona el tamaño del registro en bytes.
Volumen de datos 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)
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 recuperados por suscripción, grupo de recursos o nombre de recurso, use la tabla Uso tal y como se hace en las consultas anteriores.
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 la columna _ResourceId
:
| parse tolower(_ResourceId) with "/subscriptions/" subscriptionId "/resourcegroups/"
resourceGroup "/providers/" provider "/" resourceType "/" resourceName
Volumen de datos facturable por suscripción durante 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 recuperados por suscripción, grupo de recursos o nombre de recurso, use la tabla Uso tal y como se hace en las consultas anteriores.
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 equipo 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
Consulta de los tipos de datos comunes
Si observa que un tipo de datos determinado tiene una cantidad excesiva de datos facturables, puede que deba realizar una consulta para analizar los datos de esa tabla. Las consultas siguientes proporcionan ejemplos para algunos tipos de datos comunes:
Solución Security
SecurityEvent
| summarize AggregatedValue = count() by EventID
| order by AggregatedValue desc nulls last
Solución Log Management
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
Tipo de datos Perf
Perf
| summarize AggregatedValue = count() by CounterPath
Perf
| summarize AggregatedValue = count() by CounterName
Tipo de datos Event
Event
| summarize AggregatedValue = count() by EventID
Event
| summarize AggregatedValue = count() by EventLog, EventLevelName
Tipo de datos Syslog
Syslog
| summarize AggregatedValue = count() by Facility, SeverityLevel
Syslog
| summarize AggregatedValue = count() by ProcessName
Tipo de datos de AzureDiagnostics
AzureDiagnostics
| summarize AggregatedValue = count() by ResourceProvider, ResourceId
Datos de Application Insights
Hay dos enfoques a la hora de investigar la cantidad de datos que recopila Application Insights. Su disponibilidad depende de si tiene una aplicación clásica o basada en áreas de trabajo. Tanto para los recursos clásicos como para los basados en áreas de trabajo, use la propiedad _BilledSize
disponible en cada evento ingerido. Para 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
, funcionarán 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)
Tendencias del volumen de datos de los recursos basados en el área de trabajo
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, al realizar consultas como esta, es posible que sea necesario restringir 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 los datos excesivos no proceden de un origen concreto, es posible que haya 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
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 recuperados por suscripción, grupo de recursos o nombre de recurso, use la tabla Uso tal y como se hace en las consultas anteriores.
Recuento de los nodos que enviaron cualquier dato durante las últimas 24 horas
find where TimeGenerated > ago(24h) project Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize nodes = dcount(computerName)
La siguiente consulta recopila el volumen de datos que envió cada nodo durante 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 y 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 facturarán 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 de la factura está en unidades de meses de nodo, que se representa mediante billableNodeMonthsPerDay
en la consulta. 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", "MaliciousIPCommunication", "LinuxAuditLog", "SysmonEvent", "ProtectionStatus", "WindowsEvent")
| 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.
Recuentos de nodos de seguridad y automatización
El siguiente código de ejemplo le permite obtener un recuento de los distintos nodos de seguridad
union
(
Heartbeat
| where (Solutions has 'security' or Solutions has 'antimalware' or Solutions has 'securitycenter')
| project Computer
),
(
ProtectionStatus
| where Computer !in (Heartbeat | project Computer)
| project Computer
)
| distinct Computer
| project lowComputer = tolower(Computer)
| distinct lowComputer
| count
El siguiente código de ejemplo le permite obtener el número de nodos de Automatización distintos
ConfigurationData
| where (ConfigDataType == "WindowsServices" or ConfigDataType == "Software" or ConfigDataType =="Daemons")
| extend lowComputer = tolower(Computer) | summarize by lowComputer
| join (
Heartbeat
| where SCAgentChannel == "Direct"
| extend lowComputer = tolower(Computer) | summarize by lowComputer, ComputerEnvironment
) on lowComputer
| summarize count() by ComputerEnvironment | sort by ComputerEnvironment asc
Datos de llegada tardía
Si observa informes de una ingesta de datos elevada mediante los registros Usage
, pero no observa los mismos resultados sumando _BilledSize
directamente al tipo de datos, es posible que algunos datos estén llegando tarde. 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 bien, un host 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 las incidencias de datos que llegan tarde, use la columna _TimeReceived, además de la columna TimeGenerated. La propiedad _TimeReceived
es la hora en que el punto de ingesta de Azure Monitor recibió el registro en la nube de Azure.
El siguiente ejemplo es en respuesta 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
- Consulte Detalles de los precios de los registros de Azure Monitor para información sobre cómo se calculan los cargos por los datos en un área de trabajo de Log Analytics y las diferentes opciones de configuración que pueden reducirlos.
- Consulte el artículo Supervisión del uso y costos estimados en Azure Monitor para obtener más detalles sobre los distintos tipos de cargos de Azure Monitor y cómo analizarlos en la factura de Azure.
- Consulte Procedimientos recomendados de Azure Monitor: Administración de costos para conocer los procedimientos recomendados para configurar y administrar Azure Monitor con el objetivo de minimizar los cargos.
- Consulte Transformaciones de recopilación de datos en Azure Monitor (versión preliminar) para obtener más información sobre el uso de transformaciones para reducir la cantidad de datos recopilados en un área de trabajo de Log Analytics, filtrando los registros y columnas no deseados.