Поделиться через


Статистика пакета SDK для Application Insights (предварительная версия)

Application Insights предлагает пользовательские метрики пакета SDK, которые помогают отслеживать и устранять проблемы с отсутствием или непредвиденным поведением телеметрии. Если данные телеметрии не достигают конечной точки приема, статистика пакета SDK помогает определить, что произошло и что делать дальше.

Эти пользовательские метрики включают количество успешных элементов, удалений и повторных попыток. Они также включают коды удаления и коды повторных попыток , которые объясняют причину и руководство по следующим шагам.

Визуализация представлена в книге статистики пакета SDK.

Это важно

Предварительные версии функций предоставляются без соглашения об уровне обслуживания и не рекомендуется использовать для рабочих нагрузок. Для получения дополнительной информации см. Дополнительные условия использования для предварительных версий Microsoft Azure.

Предпосылки

  • Приложение инструментировано одним из следующих элементов:
    • .NET/ .NET Core: Azure.Monitor.OpenTelemetry.AspNetCore версия 1.4.0-beta.1 или более поздняя.
    • .NET/ .NET Core (только экспортер): Azure.Monitor.OpenTelemetry.Exporter версия 1.5.0-beta.1 или более поздняя.
    • Python OpenTelemetry Distro 1.8.0+ и azure-monitor-opentelemetry-exporter 1.0.0b42+
    • Node.js OpenTelemetry Distro 1.13.0+ и @azure/monitor-opentelemetry-exporter 1.0.0-beta.34+
    • Node.js SDK для Application Insights Classic API 3.10.0+
  • Переменная среды, заданная для включения.

Общие сведения о статистике пакета SDK

Статистика пакета SDK — это счетчики для каждого процесса, которые пакеты SDK и агенты Application Insights выдают в качестве пользовательских метрик. Эти метрики суммируют количество элементов телеметрии, которые экспортер отправляет успешно, сколько элементов экспортера сбрасывается, а также сколько элементов, запланированных экспортером для повторных попыток.

Пакет SDK публикует три метрики:

  • preview.item.success.count
  • preview.item.dropped.count
  • preview.item.retry.count

Замечание

Количество повторных попыток представляет попытки и никогда не уменьшается. Более поздний успех для одних и того же элемента отражается только в серии успешных операций.

Размеры

Эти метрики включают измерения в customDimensions измерения и стандартные измерения Application Insights для срезов:

Ключ измерения Description
telemetry_type Тип телеметрии, связанный с числом. Значения соответствуют таблицам Application Insights, таким как REQUEST, DEPENDENCY, EXCEPTION, TRACEи CUSTOM_EVENTAVAILABILITY.
drop.code, drop.reason Код и краткая причина для удаленных элементов. Код — это состояние HTTP из конечной точки приема или клиентского кода, например CLIENT_EXCEPTION.
retry.code, retry.reason Код и краткая причина запланированных повторных попыток. Код — это состояние HTTP из конечной точки приема или клиентского кода, например CLIENT_TIMEOUT.
telemetry_success Значение REQUEST элемента DEPENDENCY телеметрии во время экспорта (successилиtrue).false
language, version Пакет SDK или язык агента и версия.
compute.type Вычислительная среда, например aks, , appsvcfunctions, springcloudvmили unknown.
sdkVersion Строка версии пакета SDK также доступна в тегах.
cloud_RoleName, cloud_RoleInstance Измерения ресурсов, которые можно использовать для среза по службе и экземпляру.

Каждая строка метрик представляет агрегированное число для интервала экспорта. Всего попыток в срез времени равен success + dropped для этого среза.

Включение и настройка статистики пакета SDK

Включите, задав переменную APPLICATIONINSIGHTS_SDKSTATS_ENABLED_PREVIEW=true среды в среде процесса приложения и перезагрузив приложение.

Интервал экспорта

  • Интервал экспорта по умолчанию — 15 минут.
  • Настройка другого интервала в секундах с APPLICATIONINSIGHTS_SDKSTATS_EXPORT_INTERVALпомощью .
  • Минимальный интервал составляет одну секунду.

Вам не нужно развертывать ресурсы книги. Шаблон статистики пакета SDK отображается в коллекции книг в ресурсе Application Insights. В книге не отображаются данные , пока пакет SDK не выдает эти пользовательские метрики.

Открытие книги статистики пакета SDK

Откройте ресурс Application Insights, а затем откройте книги и выберите статистику пакета SDK (предварительная версия). В интерфейсе используется одна книга с упрощенным набором визуальных элементов.

Снимок экрана: книга по умолчанию для статистики пакета SDK.

Фильтры

Используйте фильтры в верхней части книги для области представления:

  • Диапазон времени: фильтрация по окну времени и размеру ячейки.
  • Версия пакета SDK: фильтрация по полю sdkVersion .
  • Тип телеметрии: фильтрация по измерению telemetry_type .
  • Причина сброса и Код сброса: Фильтр по drop.reason и drop.code.

Визуальные элементы книги

Книга фокусируется на кратком наборе диаграмм, которые хранят результаты в контексте:

  • Падение скорости. Отображается dropped / (dropped + success) на выбранном зерне времени.
  • С течением времени анализ запросов и зависимостей. Разделяет данные телеметрии запросов и зависимостей по значению элемента success в приложении, а затем отображает отправленные и удаленные на отдельных линейчатых диаграммах:
    • Успешно отправлено и удалено. Сравнивает элементы, записанные приложением как успешное, и что экспортер отправил в Application Insights элементы в той же категории, что и экспортер.
    • Не удалось и отправлено и удалено. Сравнивает элементы, записанные приложением как сбой, и что экспортер отправил с элементами в той же категории, что и экспортер. Пики сбоем, удаленные часто указывают на временные проблемы службы, регулирование или проблемы конфигурации.
    • Используйте фильтры версий drop Reason, Drop Code и SDK , чтобы изолировать причины. Например, если произошел сбой, удаление возрастает, проверьте наличие 429 проблем регулирования или 401403 проверки подлинности.
  • Детализация контейнера времени. При выборе контейнера откроется представление разбивки с учетом причин и кодов верхнего падения за этот период.
  • Экспорт результатов с течением времени. Графики счетчиков success, retryа также dropped вместе.

Устранение неполадок с непредвиденным поведением телеметрии

Используйте коды, чтобы определить, что произошло и что делать дальше. Выноски книги указывают, где сначала выглядеть.

Диагностика кодов удаления

Экспортер задает для drop.code товаров, которые он не мог доставить. Используйте следующее руководство.

Замечание

Когда конечная точка приема принимает некоторые элементы и отклоняет другие, вы можете увидеть 206 Partial Content. Принятые элементы вносят свой вклад success. Отклоненные элементы способствуют dropped сопутствующем коду удаления.

Коды удаления клиента

drop.code Что это означает на практике Что вы должны сделать дальше
CLIENT_EXCEPTION Элементы были удалены из-за того, что экспортер попал в исключение или не получил ответа. Проверьте журналы приложений и экспортеров. Проверьте систему доменных имен (DNS), протокол TLS, прокси-сервер, брандмауэр и правила исходящего интернета. Проверьте доступность конечной точки от узла.
CLIENT_READONLY Не удалось записать локальную сохраняемость, так как файловая система доступна только для чтения. Указатель сохраняемости на путь, доступный для записи. Исправление разрешений контейнера или виртуальной машины. Рекомендуется отключить сохраняемость диска, если не разрешено в среде.
CLIENT_PERSISTENCE_CAPACITY Локальная сохраняемость была заполнена, а новые элементы не могут быть буферичены. Увеличьте квоту диска или размер хранилища. Уменьшите размер пакета или частоту приема. Рассмотрим выборку.
CLIENT_STORAGE_DISABLED Локальная сохраняемость отключена. Элементы, необходимые для буферизации, не могут быть сохранены и удалены. Включите локальное хранилище или горизонтальное масштабирование для снижения давления.
*NON_RETRYABLE_STATUS_CODE Конечная точка приема вернула неизменяемое состояние, например 400, , 401403или 404. Используйте таблицы кода HTTP для правильной настройки, учетных данных или схемы телеметрии, а затем повторное развертывание.

Коды состояния HTTP конечной точки приема

Состояние HTTP Типичная причина Что вы должны сделать дальше
200 OK Все принятые элементы. Никаких действий не требуется.
206 Partial Content Некоторые элементы приняты и другие отклонены. Проверьте журналы экспортера для ошибок каждого элемента. Проверьте схему и размеры. Уменьшите размер пакета, если полезные данные близки к ограничениям размера.
307 или 308 Redirect Перенаправление на определенную конечную точку метки. Разрешить перенаправления в вашей среде. Обновите строку подключения до правильного региона, если перенаправления постоянны.
400 Bad Request Недопустимая телеметрия или неподдерживаемая схема. В некоторых случаях неправильное настройка Microsoft Entra может отображаться как 400. Проверьте размеры полезных данных и схему. Исправьте строку подключения или аудиторию маркеров при неправильном перенаправлении.
401 Unauthorized Сбой проверки подлинности или маркер не имеет необходимых разрешений. Исправьте строку подключения или учетные данные. Убедитесь, что удостоверение имеет правильные роли и область маркера для Application Insights.
402 Payment Required Превышено ежедневное ограничение. Настройте ежедневное ограничение, уменьшите прием или увеличьте выборку. Дождитесь сброса.
403 Forbidden Неправильное разрешение или сопоставление. Правильные назначения ролей или сопоставление конечных точек. Убедитесь, что строка ресурса и подключения относятся к той же среде.
404 Not Found Строка подключения указывает на неправильный регион или ресурс. Обновите строку подключения до правильного ресурса и региона.
405 Method Not Allowed Метод запроса не разрешен. Обновите пакет SDK и убедитесь, что используются только поддерживаемые методы.
408 Request Timeout Время ожидания сети. Проверьте задержку сети и правила брандмауэра. При необходимости увеличьте время ожидания клиента.
413 Payload Too Large Полезные данные пакетной службы превысили ограничения размера. Уменьшите максимальный размер пакета. Рекомендуется отправлять более частые, небольшие пакеты.
429 Too Many Requests Регулирование с Retry-Afterпомощью . Уменьшение скорости отправки. Уважение Retry-After. Увеличьте выборку или горизонтальное масштабирование.
439 Daily Quota Exceeded (не рекомендуется) Устаревший сигнал квоты. То же самое, что 402. Предпочитает отслеживать 402.
5xx Server Error Временные проблемы со службой. Ожидается восстановление. Если он сохраняется за несколько минут, проверьте состояние Azure и откройте вариант поддержки с метками времени и регионами.
Other Не распознано. Захватить идентификаторы корреляции из журналов и открыть вариант поддержки.

Диагностика кодов повторных попыток

Экспортер задает retry.code для элементов, которые планируется отправить позже. Повторные попытки указывают попытку доставки, которая еще не прошла успешно, а не окончательное падение.

retry.code Что это означает на практике Что вы должны сделать дальше
CLIENT_EXCEPTION Исключение среды выполнения, например сбой сети, препятствовал доставке. Проверьте DNS, прокси-серверы, TLS и брандмауэр. Просмотрите журналы экспортера для получения сведений об исключении.
CLIENT_TIMEOUT Время ожидания ответа от экспортера истекло. При необходимости увеличьте время ожидания. Изучите задержку сети и скорость реагирования сервера.
*RETRYABLE_STATUS_CODE Конечная точка приема вернула повторяемое состояние HTTP (например408, , 429). 5xx Ожидается окончательное восстановление. Уменьшение скорости отправки или выборки при регулировании. Следите за Retry-After этим и почитайте его.

Интерпретация повторных попыток

Счетчик preview.item.retry.count увеличивается всякий раз, когда экспортер планирует отправлять данные телеметрии снова. Он отражает попытки, а не окончательные результаты. Счетчик никогда не уменьшается. Используйте его вместе с успешной и удаленной серией, чтобы понять работоспособность доставки.

  • Растущая линия повторных попыток сама по себе не означает потерю данных. Элементы позже можно отправить успешно.
  • Сравните повторные попытки с успехом. Если успех восстанавливается после всплеска повторных попыток, проблема, скорее всего, была временной.
  • Сравните повторные попытки с удаленными. Если повторные попытки выросли, пока упали, остается почти нулевым, экспортер буферизирует и восстанавливается.
  • Постоянный высокий уровень повторных попыток с неструктурированным или падением успеха сигнализирует о блокирующей проблеме. См. статью "Если успех не восстанавливается".
Исследование по коду

Разделите метрику повторных попыток, retry.code чтобы определить, почему выполняется повторная попытка.

retry.code То, что обычно означает Что нужно проверить или сделать дальше
CLIENT_TIMEOUT Время ожидания ответа от экспортера истекло. При необходимости увеличьте время ожидания клиента. Проверьте задержку, прокси-серверы и правила брандмауэра.
CLIENT_EXCEPTION Ошибка сети или среды выполнения не допустила доставку. Просмотрите журналы экспортера. Проверьте конфигурацию DNS, TLS, прокси-сервера и исходящей сети.
408 Время ожидания запроса истекло в конечной точке приема. Изучение сетевого пути и задержки. Рассмотрим меньшие пакеты или более высокую частоту отправки.
429 Регулирование путем приема, часто с Retry-After. Уменьшение скорости отправки или увеличение выборки. Честь Retry-After перед повтором.
5xx Временные проблемы со службой при приеме. Ожидается восстановление. Продолжить повторную попытку с обратным выходом. Проверьте состояние Azure, если оно сохраняется.
Если успешное восстановление не выполняется

Если повторные попытки продолжают расти и успешно не восстанавливаются, сводка, чтобы удалить коды , чтобы найти блокировщик. Начните с проблем конфигурации и квоты, таких как 402 (ежедневное ограничение), 401 или (проверка подлинности или 403 разрешение), а также проблемы с хранилищем клиентов, например CLIENT_PERSISTENCE_CAPACITY, CLIENT_READONLYили CLIENT_STORAGE_DISABLED. Исправьте основную причину, а затем убедитесь, что удаленный возврат возвращается к нулю и успешно увеличивается на следующие интервалы.

Объем затрат и данных

Статистика пакета SDK отправляет агрегированные customMetrics записи. Рабочая нагрузка публикует счетчики вместо каждого элемента телеметрии, поэтому объем данных остается низким относительно телеметрии приложения. Счет за записи в качестве стандартного приема данных Application Insights для customMetrics, и они следуют параметрам хранения. Экспортер отправляет счетчики на существующий канал приема.

Формула планирования

Estimated records per hour per instance ≈
  (#metrics emitted per interval)
  × (3600 / interval_seconds)
  × (distinct dimension combinations you use)

Интервал по умолчанию — 15 минут (interval_seconds = 900). Настройка другого интервала с APPLICATIONINSIGHTS_SDKSTATS_EXPORT_INTERVALпомощью .

Использование статистики пакета SDK в Azure Monitor за пределами книги по умолчанию

Вы можете использовать пользовательские метрики пакета SDK с другими функциями Azure Monitor.

Анализатор данных Azure

Ниже приведены примеры ссылок на язык запросов Kusto (KQL ).

Экспорт результатов и времени

let g = 15m; // align with export interval for clearer charts
customMetrics
| where name in ("preview.item.success.count", "preview.item.dropped.count", "preview.item.retry.count")
| summarize 
    success = sumif(todouble(value), name == "preview.item.success.count"),
    dropped = sumif(todouble(value), name == "preview.item.dropped.count"),
    retry   = sumif(todouble(value), name == "preview.item.retry.count")
    by bin(timestamp, g)

Ставки с течением времени

let g = 15m;
customMetrics
| where name in ("preview.item.dropped.count", "preview.item.success.count", "preview.item.retry.count")
| summarize 
    success = sumif(todouble(value), name == "preview.item.success.count"),
    dropped = sumif(todouble(value), name == "preview.item.dropped.count"),
    retry   = sumif(todouble(value), name == "preview.item.retry.count")
    by bin(timestamp, g)
| extend drop_rate = dropped / iff((success + dropped) == 0.0, 1.0, (success + dropped))
| extend retry_to_attempt_ratio = retry / iff((success + dropped) == 0.0, 1.0, (success + dropped))
| project timestamp, drop_rate, retry_to_attempt_ratio

Анализ зависимостей и запросов с течением времени (реплицирует сложенные полосы)

let g = 15m;
// Successful request or dependency telemetry: sent vs dropped
let sent_success = (requests
| where success == true
| summarize c = count() by bin(timestamp, g)
| union (dependencies | where success == true | summarize c = count() by bin(timestamp, g))
| summarize sent = sum(c) by timestamp);
let dropped_success = (customMetrics
| where name == "preview.item.dropped.count"
| extend telemetry_type = tostring(customDimensions["telemetry_type"]),
        telemetry_success = tostring(customDimensions["telemetry_success"])
| where telemetry_type in ("REQUEST","DEPENDENCY") and telemetry_success == "true"
| summarize dropped = sum(todouble(value)) by bin(timestamp, g));
sent_success
| join kind=fullouter dropped_success on timestamp
| project timestamp, ["Successful - Sent"] = todouble(sent), ["Successful - Dropped"] = todouble(dropped)
| order by timestamp asc;

// Failed request or dependency telemetry: sent vs dropped
let sent_failed = (requests
| where success == false
| summarize c = count() by bin(timestamp, g)
| union (dependencies | where success == false | summarize c = count() by bin(timestamp, g))
| summarize sent = sum(c) by timestamp);
let dropped_failed = (customMetrics
| where name == "preview.item.dropped.count"
| extend telemetry_type = tostring(customDimensions["telemetry_type"]),
        telemetry_success = tostring(customDimensions["telemetry_success"])
| where telemetry_type in ("REQUEST","DEPENDENCY") and telemetry_success == "false"
| summarize dropped = sum(todouble(value)) by bin(timestamp, g));
sent_failed
| join kind=fullouter dropped_failed on timestamp
| project timestamp, ["Failed - Sent"] = todouble(sent), ["Failed - Dropped"] = todouble(dropped)
| order by timestamp asc

Сводка по причинам удаления с кодом

customMetrics
| where name == "preview.item.dropped.count"
| extend drop_reason = tostring(customDimensions["drop.reason"]),
        drop_code   = tostring(customDimensions["drop.code"])
| summarize total_dropped = sum(todouble(value)) by drop_reason, drop_code
| order by total_dropped desc

Уведомления

Создание оповещений журнала, отслеживающих коэффициенты или определенные коды.

// Drop rate over 5 minutes
let window = 5m;
customMetrics
| where timestamp >= ago(window)
| where name in ("preview.item.success.count", "preview.item.dropped.count")
| summarize 
    success = sumif(todouble(value), name == "preview.item.success.count"),
    dropped = sumif(todouble(value), name == "preview.item.dropped.count")
| extend drop_rate = dropped / iff((success + dropped) == 0.0, 1.0, (success + dropped))
| project drop_rate
// Over-quota daily cap (HTTP 402) in the last 10 minutes
let window = 10m;
customMetrics
| where timestamp >= ago(window)
| where name == "preview.item.dropped.count"
| extend drop_code = tostring(customDimensions["drop.code"])
| summarize dropped_402 = sum(todouble(value)) by drop_code
| where drop_code == "402" and dropped_402 > 0
| project dropped_402

Подсказка

Сопоедините оповещение 402 с руководством по ежедневной крышке , чтобы ответчики могли настроить ограничение или уменьшить прием.

Power BI

Используйте соединитель журналов Azure Monitor , чтобы перенести эти метрики в Power BI.

// Drop and retry ratios by hour
let window = 14d;
let g = 1h;
customMetrics
| where timestamp >= ago(window)
| where name in ("preview.item.success.count", "preview.item.dropped.count", "preview.item.retry.count")
| summarize 
    success = sumif(todouble(value), name == "preview.item.success.count"),
    dropped = sumif(todouble(value), name == "preview.item.dropped.count"),
    retry   = sumif(todouble(value), name == "preview.item.retry.count")
    by bin(timestamp, g)
| extend drop_rate = dropped / iff((success + dropped) == 0.0, 1.0, (success + dropped))
| extend retry_to_attempt_ratio = retry / iff((success + dropped) == 0.0, 1.0, (success + dropped))
| order by timestamp asc
// Dropped items by reason
let window = 14d;
let g = 1h;
customMetrics
| where timestamp >= ago(window)
| where name == "preview.item.dropped.count"
| extend drop_reason = tostring(customDimensions["drop.reason"])
| summarize dropped = sum(todouble(value)) by bin(timestamp, g), drop_reason
| order by timestamp asc

Обозреватель метрик

Диаграмма этих статистических данных пакета SDK в метриках.

  1. Откройте ресурс Application Insights.
  2. Откройте метрики.
  3. Для пространства имен метрик выберите метрики на основе журналов.
  4. Для метрики выберите один из следующих вариантов:
    • preview.item.success.count
    • preview.item.dropped.count
    • preview.item.retry.count
  5. (Необязательно) Задайте для агрегированиязначение Sum для суммарных значений времени.
  6. Используйте split by для изучения. Распространенные разбиения:
    • причина сбоя, код сбоя
    • тип_телеметрии, версия_SDK
    • cloud_RoleName, cloud_RoleInstance

Как счетчики статистики пакета SDK отличаются от журналов?

Не ожидайте, что эти счетчики равны счетчикам элементов в таблицах, таких как requests или dependencies. Различия возникают по нескольким причинам:

  • Время агрегирования. Статистические данные агрегируются по интервалам и пакетам. Журналы хранят отдельные элементы, поэтому количество разных зерен времени может смещения.
  • Выборка и процессоры. Статистика подсчитывает элементы после применения пакета SDK выборки и всех процессоров, которые сбрасывают или изменяют данные телеметрии. Журналы отражают принятые конечные точки приема.
  • Частичные успехи. Конечная точка приема может принять часть пакета и отклонить остальные. Экспортер записывает элементы, принятые в качестве успешного и отклоненного, как и в том же интервале.
  • Локальная буферизация. При повторных попытках экспортера он может отправлять буферные элементы позже. Время назначения статистики, извлеченного или успешного подсчета не всегда соответствует времени события исходной телеметрии.
  • Превышена квота или ежедневное ограничение. Когда ресурс превышает ежедневное ограничение, конечная точка приема возвращает ошибку, а записи экспортера удаляются. Соответствующая телеметрия приложения не отображается в журналах во время окна крышки.
  • Scope. Статистика охватывает поведение экспортера. Журналы охватывают конец конечной телеметрии, включая поля, которые не влияют на успех экспортера.