Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Стоимость Azure Monitor может значительно варьироваться в зависимости от объема данных, собранных в вашей рабочей области Log Analytics. Набор решений, которые используют рабочее пространство, а также объем данных, собираемых каждым решением, влияют на этот объем.
В этой статье приводятся рекомендации по анализу собранных данных, которые помогут вам управлять затратами на прием данных. Она поможет вам в следующих аспектах.
- Определите причину более высокого уровня использования.
- Прогнозируйте затраты при мониторинге дополнительных ресурсов и настройке различных функций Azure Monitor.
Совет
Стратегии снижения затрат Azure Monitor см. в статье "Оптимизация затрат" и Azure Monitor.
Причины превышения ожидаемого уровня использования
Каждая рабочая область Log Analytics оплачивается как отдельная служба и включается в счет за подписку Azure. Объем приема данных может быть значительным в зависимости от:
- Набор сведений и служб (например, Application Insights, Container Insights, VM Insights) и их конфигурация.
- Количество и тип отслеживаемых ресурсов.
- Объем данных, собранных из каждого отслеживаемого ресурса.
Неожиданное увеличение любого из этих факторов может привести к увеличению расходов на хранение данных. Остальная часть этой статьи содержит методы для обнаружения такой ситуации и последующего анализа собранных данных для выявления и устранения источника повышенного использования.
Отправка оповещения при высоком уровне сбора данных
Чтобы избежать непредвиденных счетов, настройте упреждающие уведомления для чрезмерного использования. Получая уведомления, вы можете решить возможные аномалии еще до окончания периода выставления счетов.
В следующем примере приведено правило генерации оповещений поиска по журналам , которое отправляет оповещение, если оплачиваемый объем данных в течение последних 24 часов превышает 50 ГБ. Измените параметр Логика оповещений, чтобы использовать другое пороговое значение в зависимости от ожидаемого объема использования в вашей среде. Вы также можете увеличить частоту для проверки использования несколько раз в день, но этот параметр приводит к повышению платы за правило генерации оповещений.
| Параметр | Значение |
|---|---|
| Область применения | |
| Целевая область | Выберите рабочую область Log Analytics. |
| Условие | |
| Запрос | Usage \| where IsBillable \| summarize DataGB = sum(Quantity / 1000) |
| Измерение | Мера: DataGB Тип агрегирования: Итог Степень детализации агрегирования: 1 день |
| Логика оповещений | Оператор: Больше Пороговое значение: 50 Частота оценок: 1 день |
| Действия | Выберите или добавьте группу действий для получения уведомлений о превышении порогового значения. |
| Сведения | |
| Тяжесть | Предупреждение |
| Имя правила генерации оповещений | Оплачиваемый объем данных, превышающий 50 ГБ в сутки. |
Анализ использования с помощью встроенных средств
Запустите анализ с помощью существующих средств в Azure Monitor. Эти средства не требуют настройки и часто могут предоставлять необходимые сведения с минимальными усилиями. Если вам нужен более глубокий анализ собранных данных, чем существующие функции Azure Monitor, используйте любой из следующих запросов журналов в Log Analytics.
Инсайты рабочей области Log Analytics
Log Analytics Workspace Insights позволяет быстро понять данные в рабочей области. Например, это некоторые из аналитических сведений, которые можно обнаружить:
- Таблицы данных, которые поглощают наибольший объем данных в основной таблице.
- Основные ресурсы, которые вносят свой вклад в данные.
- Тенденция приема данных.
Вкладка "Использование" предоставляет разбивку приема по решению и таблице. Эта информация помогает быстро определить таблицы, которые способствуют основной части объема данных. На вкладке также отображается тенденция сбора данных с течением времени. Узнайте, увеличивался ли сбор данных равномерно с течением времени или внезапно из-за изменения конфигурации.
Выберите дополнительные запросы для предварительно созданных запросов, которые помогут лучше понять шаблоны данных.
Использование и ожидаемые затраты
На диаграмме приема данных для каждого решения на странице "Использование" и предполагаемых затрат для каждой рабочей области отображается общий объем отправленных данных и объем каждого решения, отправляемого за предыдущие 31 дней. Эта информация помогает определить тенденции, такие как то, происходит ли увеличение общего использования данных или использования определенным решением.
Запрос оплачиваемого тома данных из таблицы "Использование"
Анализ объема оплачиваемых данных, собранных конкретной службой или решением. Эти запросы используют таблицу "Потребление", которая собирает данные о потреблении для каждой таблицы в рабочей области.
Примечание.
Предложение с TimeGenerated предназначено только для того, чтобы гарантировать, что в портале Azure пользовательский опыт с запросами охватывает период дольше, чем стандартные 24 часа. При использовании типа данных Usage, StartTime и EndTime обозначают временные сегменты, для которых отображаются результаты.
Объем данных с выставлением счетов по типу за последний месяц
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
Объем данных, выставляемых на оплату, по решению и типу за последний месяц
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
Дополнительные примеры запросов см. в разделе "Запросы" для таблицы "Использование".
Запрос биллируемого объема данных из записей событий
Используйте запросы log в Log Analytics если требуется более глубокий анализ собранных данных. Каждая таблица в рабочей области Log Analytics содержит следующие стандартные столбцы, которые помогают анализировать оплачиваемые данные:
- _IsBillable определяет записи, которые несут плату за обработку данных. Используйте этот столбец для фильтрации данных, не подлежащих оплате.
- _BilledSize предоставляет размер записи в байтах.
Объем подлежащих оплате данных для конкретных событий
Если вы обнаружите, что определенный тип данных собирает чрезмерные данные, может потребоваться проанализировать данные в этой таблице, чтобы определить определенные записи, увеличивающиеся. В этом примере фильтруются идентификаторы определенных событий в Event таблице, а затем предоставляется число для каждого идентификатора. Этот запрос можно изменить с помощью столбцов из других таблиц.
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)
Дополнительные примеры запросов см. в разделе "Запросы" для таблицы событий.
Объем данных по ресурсам, группам ресурсов или подпискам Azure
Вы можете проанализировать объем платных данных, полученных из конкретного ресурса или набора ресурсов. Эти запросы используют столбцы _ResourceId и _SubscriptionId для данных из ресурсов, размещенных в Azure.
Предупреждение
Используйте эти запросы поиска только в случае необходимости, так как сканирование по типам данных требует больших затрат ресурсов на выполнение. Если вам не нужны результаты для каждой подписки, группы ресурсов или имени ресурса, используйте запросы из таблицы Использование в разделе Запрос объема оплачиваемых данных из таблицы "Использование".
Объем оплачиваемых данных по идентификатору ресурса за последний полный день
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
Объем данных с выставлением счетов по группе ресурсов за последний полный день
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
Это может быть полезно для синтаксического анализа _ResourceId:
| parse tolower(_ResourceId) with "/subscriptions/" subscriptionId "/resourcegroups/"
resourceGroup "/providers/" provider "/" resourceType "/" resourceName
Оплачиваемый объем данных по подписке за последний полный день
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
Совет
Для рабочих областей с большими объемами данных, выполняя такие запросы, как те, которые показаны в этом разделе, которые запрашивают большие объемы необработанных данных, может потребоваться ограничиться одним днем. Чтобы отслеживать тенденции с течением времени, рекомендуется настроить отчет Power BI и использовать инкрементное обновление, чтобы собирать объёмы данных для каждого ресурса один раз в день.
Объем данных по компьютеру
Вы можете проанализировать объем оплачиваемых данных, собранных из виртуальной машины или набора виртуальных машин. Таблица "Использование" не имеет детализации для отображения томов данных для определенных виртуальных машин, поэтому эти запросы используют оператор поиска для поиска всех таблиц, включающих имя компьютера. Тип использования опущен, так как этот запрос предназначен только для аналитики тенденций данных.
Предупреждение
Используйте эти запросы поиска только в случае необходимости, так как сканирование по типам данных требует больших затрат ресурсов на выполнение. Если вам не нужны результаты для каждой подписки, группы ресурсов или имени ресурса, используйте запросы из таблицы Использование в разделе Запрос объема оплачиваемых данных из таблицы "Использование".
Объем биллинговых данных для каждого компьютера за последний полный день
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
Количество оплачиваемых событий по компьютеру за последний полный день
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
Запрос объема данных для обычных типов данных
Если у вас есть избыточные платные данные для определенного типа данных, может потребоваться выполнить запрос для анализа данных в этой таблице. Следующие запросы предоставляют примеры для некоторых распространенных типов данных:
Решение для обеспечения безопасности
SecurityEvent
| summarize AggregatedValue = count() by EventID
| order by AggregatedValue desc nulls last
См. примеры запросов для таблицы SecurityEvent для получения дополнительных примеров запросов.
Решение по управлению журналами
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
Дополнительные примеры запросов см. в разделе "Запросы" для таблицы "Использование".
Тип данных Perf
Perf
| summarize AggregatedValue = count() by CounterPath
Perf
| summarize AggregatedValue = count() by CounterName
См. Запросы для таблицы Perf для получения дополнительных примеров запросов.
Тип данных события
Event
| summarize AggregatedValue = count() by EventID
Event
| summarize AggregatedValue = count() by EventLog, EventLevelName
Дополнительные примеры запросов см. в разделе "Запросы" для таблицы событий.
Тип данных системного журнала
Syslog
| summarize AggregatedValue = count() by Facility, SeverityLevel
Syslog
| summarize AggregatedValue = count() by ProcessName
Дополнительные примеры запросов см. в разделе "Запросы" таблицы Системного журнала .
Тип данных AzureDiagnostics
AzureDiagnostics
| summarize AggregatedValue = count() by ResourceProvider, ResourceId
Более подробно с запросами можно ознакомиться в разделе Запросы для таблицы AzureDiagnostics.
Запрос объёма данных Application Insights
Следующие запросы применяются к ресурсам Application Insights, включая классические ресурсы, которые хранят данные за пределами рабочей области Log Analytics. Используйте свойство _BilledSize, доступное для каждого обработанного события как для рабочих областей, так и для классических ресурсов. Для классических ресурсов можно также использовать агрегированные сведения в таблице systemEvents .
Примечание.
Запросы к таблицам Application Insights, за исключением SystemEvents, работают как для ресурса Application Insights на основе рабочей области, так и для классического ресурса Application Insights.
Обратная совместимость позволяет продолжать использовать устаревшие имена таблиц. Для ресурса, основанного на рабочей области, откройте журналы в рабочей области Log Analytics. Для классического ресурса откройте Журналы в разделе Application Insights.
Операции по зависимостям создают наибольший объем данных за последние 30 дней (основанные на рабочей области или классические)
dependencies
| where timestamp >= startofday(ago(30d))
| summarize sum(_BilledSize) by operation_Name
| render barchart
Ежедневный объем данных по типу для этого ресурса Application Insights за последние 7 дней (только классическая версия)
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)
Тенденции объемов данных для ресурсов, работающих на основе рабочих областей
Чтобы просмотреть тенденции объема данных для ресурсов Application Insights на основе рабочей области, используйте запрос, содержащий все таблицы Application Insights. В следующих запросах используются имена таблиц, специфичные для ресурсов, основанных на рабочей области.
Ежедневный объем данных по типу для всех ресурсов Application Insights в рабочей области в течение 7 дней
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)
Чтобы просмотреть тенденции тома данных только для одного ресурса Application Insights, добавьте следующую строку перед summarize предыдущим запросом:
| where _ResourceId contains "<myAppInsightsResourceName>"
Совет
Для рабочих областей с большими объемами данных ограничьте запросы, такие как предыдущий, который запрашивает большие объемы необработанных данных до одного дня. Чтобы отслеживать тенденции с течением времени, рекомендуется настроить отчет Power BI и использовать инкрементное обновление, чтобы собирать объёмы данных для каждого ресурса один раз в день.
Общие сведения о отправке данных узлами
Если вы не видите чрезмерные данные из какого-либо конкретного источника, у вас может быть чрезмерное количество агентов, отправляющих данные.
Количество узлов агентов, отправляющих сигналы ежедневно в течение последнего месяца
Heartbeat
| where TimeGenerated > startofday(ago(31d))
| summarize nodes = dcount(Computer) by bin(TimeGenerated, 1d)
| render timechart
Дополнительные примеры запросов см. в разделе "Запросы" для таблицы Heartbeat.
Предупреждение
Используйте эти запросы поиска только в случае необходимости, так как сканирование по типам данных требует больших затрат ресурсов на выполнение. Если вам не нужны результаты для каждой подписки, группы ресурсов или имени ресурса, используйте запросы из таблицы Использование в разделе Запрос объема оплачиваемых данных из таблицы "Использование".
Количество узлов, отправляя все данные за последние 24 часа
find where TimeGenerated > ago(24h) project Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize nodes = dcount(computerName)
Объем данных, отправленный каждым узлом за последние 24 часа
find where TimeGenerated > ago(24h) project _BilledSize, Computer
| extend computerName = tolower(tostring(split(Computer, '.')[0]))
| where computerName != ""
| summarize TotalVolumeBytes=sum(_BilledSize) by computerName
Узлы, оплачиваемые по устаревшей ценовой категории "За узел"
Устаревшая ценовая категория на узел выставляет счета за узлы с почасовой детализацией. Он также не подсчитывает узлы, которые отправляют только набор типов данных безопасности. Чтобы получить список компьютеров, которые считаются узлами и тарифицируются соответственно, если рабочая область находится в устаревшем тарифном плане "На узел", найдите узлы, отправляющие типы данных, за которые взимается плата, поскольку некоторые типы данных предоставляются бесплатно. В этом случае используйте крайнее левое поле полного доменного имени.
Следующие запросы возвращают количество компьютеров с данными, за которые выставляется счёт, за час. Количество единиц в счете находится в единицах месяцев узла, в которых запрос представляется как billableNodeMonthsPerDay. Если в рабочей области установлено решение "Управление обновлениями", добавьте типы данных Update и UpdateSummary в список в пункте 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
Примечание.
Некоторая сложность в фактическом алгоритме выставления счетов при использовании целевого решения не представлена в предыдущем запросе.
Диагностика поздних поступающих данных
Если вы видите высокую загрузку данных, сообщаемую с помощью Usage записей, но не наблюдаете тех же результатов, когда вы непосредственно суммируете _BilledSize по типу данных, причиной могут быть данные, поступившие с задержкой. Эта ситуация возникает при приеме данных со старыми метками времени.
Например, у агента может возникнуть проблема с подключением и отправка накопленных данных при повторном подключении. Или узел может иметь неправильное время. Любой из примеров может привести к очевидному несоответствию между данными, о которых сообщает тип данных Usage, и запросом, суммирующим _BilledSize по необработанным данным за определенный день, указанный в TimeGenerated, метке времени, когда событие было создано.
Чтобы диагностировать проблемы позднего поступления данных, используйте столбец _TimeReceived и столбец TimeGenerated. Свойство _TimeReceived — это время, когда Azure Monitor получает запись.
Следующий пример реагирует на высокие объемы поступающих данных W3CIISLog 2 мая 2021 года, чтобы определить метки времени этих данных. Инструкция where TimeGenerated > datetime(1970-01-01) приведена только для того, чтобы указать пользовательскому интерфейсу Log Analytics просматривать все данные.
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
Следующие шаги
- Информация о том, как вычисляются затраты на данные в рабочей области Log Analytics и различных параметрах конфигурации для снижения затрат, см. в разделе Цены на журналы Azure Monitor.
- Описание различных типов расходов Azure Monitor и о том, как их анализировать в вашем счете Azure, см. раздел Azure Monitor Затраты и Использование.
- Рекомендации по настройке и управлению Azure Monitor для минимизации расходов см. в Azure Monitor рекомендациях по управлению затратами.
- Сведения об использовании преобразований для уменьшения объема данных, собираемых в рабочей области Log Analytics путем фильтрации нежелательных записей и столбцов, см. в разделе Набор сбора данных в Azure Monitor (предварительная версия).