Устранение неполадок, связанных с включением отладчика моментальных снимков Application Insights или просмотром моментальных снимков
Если после включения Application Insights Snapshot Debugger для приложения вы все равно не видите моментальные снимки для исключений, воспользуйтесь этими инструкциями по устранению неполадок.
Существует множество причин, по которым моментальные снимки могут не создаваться. Чтобы определить их, можно начать с запуска проверки работоспособности моментального снимка.
Неподдерживаемые сценарии
Ниже приведены сценарии, в которых Snapshot Collector не поддерживается.
Сценарий | Побочные эффекты | Рекомендация |
---|---|---|
Использование пакета SDK для Snapshot Collector непосредственно в приложении (файл .csproj) при включенном расширенном параметре "Interop". | Локальный пакет SDK для Application Insights (включая телеметрию Snapshot Collector) будет потерян, поэтому моментальные снимки будут недоступны. Приложение может аварийно завершить работу при запуске с ошибкой System.ArgumentException: telemetryProcessorTypedoes not implement ITelemetryProcessor Дополнительные сведения о возможности Application Insights "Interop" см. в документации. |
Если вы используете расширенный параметр "Interop", используйте внедрение Snapshot Collector без кода (включается в пользовательском интерфейсе портала Azure). |
Убедитесь, что используете соответствующую конечную точку Snapshot Debugger.
В настоящее время единственными регионами, для которых требуются изменения конечных точек, являются Azure для государственных организаций и Microsoft Azure, управляемые 21Vianet.
Для Службы приложений и приложений, использующих пакет SDK для Application Insights, необходимо изменить строку подключения с помощью поддерживаемых переопределений для Snapshot Debugger, как показано ниже.
Свойство строки подключения | Облако для государственных организаций США | облако для Китая. |
---|---|---|
SnapshotEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
Дополнительные сведения о других переопределениях подключения см. в Документации по Application Insights.
Для приложения-функции необходимо обновить host.json
, указав эти поддерживаемые переопределения:
Свойство | Облако для государственных организаций США | облако для Китая. |
---|---|---|
AgentEndpoint | https://snapshot.monitor.azure.us |
https://snapshot.monitor.azure.cn |
Ниже приведен пример файла host.json
с конечной точкой облачного агента для государственных организаций США:
{
"version": "2.0",
"logging": {
"applicationInsights": {
"samplingExcludedTypes": "Request",
"samplingSettings": {
"isEnabled": true
},
"snapshotConfiguration": {
"isEnabled": true,
"agentEndpoint": "https://snapshot.monitor.azure.us"
}
}
}
}
Использование проверки работоспособности моментальных снимков
Из-за некоторых распространенных проблем окно "Открыть моментальный снимок отладки" может не отображаться. Например, из-за использования устаревшего сборщика моментальных снимков, достижения ежедневного лимита отправки или длительного времени передачи моментального снимка. Для устранения распространенных неполадок можно использовать проверку работоспособности моментальных снимков.
В области исключения в представлении сквозной трассировки есть ссылка, которая позволяет перейти к окну проверки работоспособности моментальных снимков.
Интерактивный интерфейс, подобный чату, ищет распространенные проблемы и приводит инструкции по их устранению.
Если это не устранит проблему, воспользуйтесь следующими шагами по устранению неполадок вручную.
Проверка ключа инструментирования
Убедитесь, что в опубликованном приложении используется правильный ключ инструментирования. Как правило, ключ инструментирования считывается из файла ApplicationInsights.config. Убедитесь, что его значение такое же, что и у ключа инструментирования для ресурса Application Insights, который отображается на портале.
Примечание.
Поддержка приема ключей инструментирования будет завершена 31 марта 31, 2025 г. Прием ключей инструментирования будет и дальше осуществляться, но мы больше не будем предоставлять обновления или поддержку для этой функции. Перейдите на строки подключения, чтобы использовать новые возможности.
Проверка параметров клиента TLS/SSL (ASP.NET)
Если у вас есть приложение ASP.NET, размещенное в Службе приложений Azure или в службах IIS на виртуальной машине, подключение к службе Snapshot Debugger может завершиться сбоем из-за отсутствия протокола безопасности SSL.
Для конечной точки snapshot Debugger требуется TLS версии 1.2. Набор протоколов безопасности SSL включается как параметр совместимости с помощью значения httpRuntime targetFramework
в разделе system.web
файла web.config
.
Если httpRuntime targetFramework
имеет значение 4.5.2 или ниже, по умолчанию протокол TLS 1.2 не применяется.
Примечание.
Значение httpRuntime targetFramework
не зависит от целевой платформы, используемой при сборке приложения.
Чтобы проверить этот параметр, откройте файл web.config и найдите раздел system.web. Убедитесь, что для параметра targetFramework
задано значение httpRuntime
4.6 или выше.
<system.web>
...
<httpRuntime targetFramework="4.7.2" />
...
</system.web>
Примечание.
Изменение значения httpRuntime targetFramework
изменяет характеристики среды выполнения для приложения и может привести к другим незначительным изменениям в его работе. После внесения этого изменения обязательно тщательно протестируйте свое приложение. Полный список изменений совместимости см. здесь.
Примечание.
Если targetFramework
имеет значение 4.7 или выше, ОС Windows определяет доступные протоколы. В Службе приложений Azure доступен протокол TLS 1.2. Однако при использовании собственной виртуальной машины может потребоваться дополнительно включить TLS 1.2 в ОС.
Сценарии накладных расходов отладчика моментальных снимков
Отладчик моментальных снимков предназначен для использования в рабочих средах. Параметры по умолчанию включают ограничения скорости, чтобы свести к минимуму влияние на приложения.
Однако вы можете столкнуться с небольшими затратами на ЦП, память и ввод-вывод, связанные с отладчиком моментальных снимков, как в следующих сценариях.
При возникновении исключения в приложении:
- Создание подписи для типа проблемы и выбор того, следует ли создавать моментальный снимок, добавляет очень небольшую нагрузку на ЦП и память.
- Если включена отмена оптимизации, существует дополнительная нагрузка для повторного выполнения JITting метода, который вызвал исключение. Это приведет к следующему выполнению метода. В зависимости от размера метода это может быть от 1 мс до 100 мс времени ЦП.
Если обработчик исключений решит создать моментальный снимок:
Создание моментального снимка процесса занимает около половины секунды (P50=0,3s, P90=1.2s, P95=1.9s), в течение которого поток, вызвавший исключение, приостановлен. Другие потоки не блокируются.
Преобразование моментального снимка процесса в мини-dump и отправка его в Application Insights занимает несколько минут.
- Преобразование: P50=63s, P90=187s, P95=275s.
- Отправка: P50=31s, P90=75s, P95=98s.
Это делается в средство отправки моментальных снимков, которое выполняется в отдельном процессе. Процесс отправки моментальных снимков выполняется ниже обычного приоритета ЦП и использует низкоприоритетный ввод-вывод.
Мини-dump сначала записывается на диск, и объем дискового пространства примерно совпадает с рабочим набором исходного процесса. Написание мини-dump может вызвать сбои страниц, так как память считывается.
Мини-dump сжимается во время отправки, который потребляет как ЦП, так и память в процессе отправки моментальных снимков. Затраты на ЦП, память и диск для этого пропорциональны размеру моментального снимка процесса. Средство отправки моментальных снимков последовательно обрабатывает моментальные снимки.
При TrackException
вызове:
Отладчик моментальных снимков проверяет, является ли исключение новым или создан моментальный снимок для него. Это добавляет очень небольшую нагрузку на ЦП.
Предварительные версии .NET Core
Если вы используете предварительную версию .NET Core или приложение ссылается на пакет SDK для Application Insights (прямо или косвенно с помощью зависимой сборки), следуйте инструкциям по включению Snapshot Debugger для других сред.
Проверка страницы состояния расширения сайта Служб диагностики
Если вы включили Snapshot Debugger с помощью панели Application Insights на портале, он был включен расширением веб-сайта Служб диагностики.
Примечание.
Установка отладчика моментальных снимков Application Insights без кода выполняется в соответствии с политикой поддержки .NET Core.
Дополнительные сведения о поддерживаемых средах выполнения см. в политике поддержки .NET Core.
Страницу состояния этого расширения можно проверить по следующему URL-адресу: https://{site-name}.scm.azurewebsites.net/DiagnosticServices
Примечание.
Домен ссылки на страницу состояния будет зависеть от облака. Этот домен будет таким же, как и сайт управления KUDU для Службы приложений. На этой странице состояния указывается состояние установки для агентов Profiler и Snapshot Collector. В случае непредвиденной ошибки на экране отобразятся сведения о том, как ее исправить.
Чтобы получить базовый URL-адрес этой страницы состояния, воспользуйтесь сайтом управления KUDU для Службы приложений.
- Откройте службу приложений на портале Azure.
- Щелкните Дополнительные инструменты или выполните поиск по запросу Kudu.
- Выберите Выполнить.
- На сайте управления KUDU в URL-адресе добавьте
/DiagnosticServices
и нажмите клавишу ВВОД. Результат будет выглядеть приблизительно так:https://<kudu-url>/DiagnosticServices
Обновление пакета NuGet до последней версии
В зависимости от того, как была включена служба Snapshot Debugger, см. следующие варианты:
Если служба Snapshot Debugger была включена с помощью панели Application Insights на портале, то в приложении, вероятно, уже установлен последний пакет NuGet.
Если служба Snapshot Debugger была включена путем включения пакета NuGet Microsoft.ApplicationInsights.SnapshotCollector, с помощью диспетчера пакетов NuGet для Visual Studio убедитесь, что вы используете последнюю версию
Microsoft.ApplicationInsights.SnapshotCollector
.
Сведения о последних обновлениях и исправлениях ошибок см. в заметках о выпуске.
Проверьте журналы отправителя
После создания моментального снимка на диске создается файл минидампа (.dmp). Этот файл минидампа и любые связанные PDB-файлы создаются в отдельном процессе передачи в хранилище Snapshot Debugger Application Insights. После успешной передачи минидамп удаляется с диска. Файлы журнала для процесса передачи сохраняются на диске. В среде службы приложений эти журналы можно найти в D:\Home\LogFiles
. Используйте веб-сайт управления Kudu для службы приложений, чтобы найти эти файлы журнала.
- Откройте службу приложений на портале Azure.
- Щелкните Дополнительные инструменты или выполните поиск по запросу Kudu.
- Выберите Выполнить.
- В раскрывающемся списке Консоль отладки выберите CMD.
- Щелкните LogFiles.
Вы увидите хотя бы один файл с именем, начинающимся с Uploader_
или SnapshotUploader_
, и расширением .log
. Выберите соответствующую пиктограмму, чтобы скачать все файлы журналов, или открыть их в браузере.
Имя файла содержит уникальный суффикс, который идентифицирует экземпляр службы приложений. Если экземпляр службы приложений размещен на нескольких компьютерах, для каждого компьютера существуют отдельные файлы журналов. Когда отправитель обнаруживает новый файл минидампа, он записывается в файл журнала. Ниже приведен пример успешного моментального снимка и отправки:
SnapshotUploader.exe Information: 0 : Received Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Creating minidump from Fork request ID 139e411a23934dc0b9ea08a626db16c5 from process 6368 (Low pri)
DateTime=2018-03-09T01:42:41.8571711Z
SnapshotUploader.exe Information: 0 : Dump placeholder file created: 139e411a23934dc0b9ea08a626db16c5.dm_
DateTime=2018-03-09T01:42:41.8728496Z
SnapshotUploader.exe Information: 0 : Dump available 139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:45.7525022Z
SnapshotUploader.exe Information: 0 : Successfully wrote minidump to D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Uploading D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp, 214.42 MB (uncompressed)
DateTime=2018-03-09T01:42:45.7681360Z
SnapshotUploader.exe Information: 0 : Upload successful. Compressed size 86.56 MB
DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Extracting PDB info from D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp.
DateTime=2018-03-09T01:42:59.6184651Z
SnapshotUploader.exe Information: 0 : Matched 2 PDB(s) with local files.
DateTime=2018-03-09T01:42:59.6809606Z
SnapshotUploader.exe Information: 0 : Stamp does not want any of our matched PDBs.
DateTime=2018-03-09T01:42:59.8059929Z
SnapshotUploader.exe Information: 0 : Deleted D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\139e411a23934dc0b9ea08a626db16c5.dmp
DateTime=2018-03-09T01:42:59.8530649Z
Примечание.
Приведенный выше пример взят из пакета NuGet Microsoft.ApplicationInsights.SnapshotCollector
версии 1.2.0. В более ранних версиях процесс передачи называется MinidumpUploader.exe
, а журнал содержит менее подробные сведения.
В предыдущем примере, ключ инструментирования — это c12a605e73c44346a984e00000000000
. Это значение должно соответствовать ключу инструментирования для вашего приложения.
Минидамп связан с моментальным снимком с идентификатором 139e411a23934dc0b9ea08a626db16c5
. Позже этот идентификатор можно использовать для поиска связанной записи исключений в аналитике Application Insights.
Отправитель проверяет наличие новых PDB-файлов примерно один раз каждые 15 минут. Приведем пример:
SnapshotUploader.exe Information: 0 : PDB rescan requested.
DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Scanning D:\home\site\wwwroot for local PDBs.
DateTime=2018-03-09T01:47:19.4457768Z
SnapshotUploader.exe Information: 0 : Local PDB scan complete. Found 2 PDB(s).
DateTime=2018-03-09T01:47:19.4614027Z
SnapshotUploader.exe Information: 0 : Deleted PDB scan marker : D:\local\Temp\Dumps\c12a605e73c44346a984e00000000000\6368.pdbscan
DateTime=2018-03-09T01:47:19.4614027Z
Для приложений, которые не размещаются в службе приложений, журналы отправителя находятся в той же папке, что и минидампы: %TEMP%\Dumps\<ikey>
(где <ikey>
— ваш ключ инструментирования).
Устранение неполадок с облачными службами
В облачных службах размер временной папки по умолчанию может быть слишком мал для хранения файлов минидампов. Это приводит к потере моментальных снимков.
Необходимый размер зависит от общего рабочего набора приложения и количества параллельных моментальных снимков.
Как правило, рабочий набор веб-роли 32-разрядного приложения ASP.NET может занимать от 200 МБ до 500 МБ. Предусмотрите место хотя бы для двух параллельных моментальных снимков.
Например, если приложение использует 1 ГБ всего рабочего набора, выделите как минимум 2 ГБ дискового пространства для хранения моментальных снимков.
Выполните следующие действия, чтобы настроить роль облачной службы с выделенным локальным ресурсом для моментальных снимков.
Добавьте новый локальный ресурс в облачную службу, изменив файл ее определения (.csdef). В следующем примере определяется ресурс с именем
SnapshotStore
и размером 5 ГБ.<LocalResources> <LocalStorage name="SnapshotStore" cleanOnRoleRecycle="false" sizeInMB="5120" /> </LocalResources>
Измените код запуска роли, чтобы добавить переменную среды, указывающую на локальный ресурс
SnapshotStore
. Для рабочих ролей код необходимо добавить в методOnStart
нужной роли:public override bool OnStart() { Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath); return base.OnStart(); }
Для веб-ролей (ASP.NET) код необходимо добавить в метод
Application_Start
веб-приложения:using Microsoft.WindowsAzure.ServiceRuntime; using System; namespace MyWebRoleApp { public class MyMvcApplication : System.Web.HttpApplication { protected void Application_Start() { Environment.SetEnvironmentVariable("SNAPSHOTSTORE", RoleEnvironment.GetLocalResource("SnapshotStore").RootPath); // TODO: The rest of your application startup code } } }
Обновите файл ApplicationInsights.config для используемой роли, чтобы переопределить размещение временной папки, которое используется в
SnapshotCollector
.<TelemetryProcessors> <Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector"> <!-- Use the SnapshotStore local resource for snapshots --> <TempFolder>%SNAPSHOTSTORE%</TempFolder> <!-- Other SnapshotCollector configuration options --> </Add> </TelemetryProcessors>
Переопределение папки теневой копии
При запуске сборщик Snapshot Collector пытается найти папку на диске, который подходит для выполнения процесса передачи моментальных снимков. Выбранная папка называется папкой теневой копии.
Snapshot Collector проверяет несколько известных расположений, гарантируя наличие прав на копирование двоичных файлов отправителя моментальных снимков. Используются следующие переменные среды:
- Fabric_Folder_App_Temp
- LOCALAPPDATA
- APPDATA
- TEMP
Если подходящая папка не найдена, Snapshot Collector сообщает об ошибке: Could not find a suitable shadow copy folder (Не удалось найти подходящую папку теневой копии).
Если копирование завершается сбоем, Snapshot Collector выдает ошибку ShadowCopyFailed
.
Если не удается запустить отправитель, Snapshot Collector выдает ошибку UploaderCannotStartFromShadowCopy
. Текст сообщения часто содержит исключение System.UnauthorizedAccessException
. Эта ошибка обычно возникает из-за того, что приложение работает от имени учетной записи с ограниченными разрешениями. У учетной записи есть разрешение на запись в папку теневой копии, но нет разрешения на выполнение кода.
Так как эти ошибки обычно возникают во время запуска, за ними следует ошибка ExceptionDuringConnect
с сообщением Uploader failed to start (Не удалось запустить средство отправки).
Чтобы устранить эти ошибки, вы можете указать папку теневой копии вручную с помощью параметра конфигурации ShadowCopyFolder
. Например, в файле ApplicationInsights.config:
<TelemetryProcessors>
<Add Type="Microsoft.ApplicationInsights.SnapshotCollector.SnapshotCollectorTelemetryProcessor, Microsoft.ApplicationInsights.SnapshotCollector">
<!-- Override the default shadow copy folder. -->
<ShadowCopyFolder>D:\SnapshotUploader</ShadowCopyFolder>
<!-- Other SnapshotCollector configuration options -->
</Add>
</TelemetryProcessors>
Или же в файле appsettings.json, если вы используете его с приложением .NET Core:
{
"ApplicationInsights": {
"InstrumentationKey": "<your instrumentation key>"
},
"SnapshotCollectorConfiguration": {
"ShadowCopyFolder": "D:\\SnapshotUploader"
}
}
Поиск исключений с моментальными снимками с помощью поиска Application Insights
При создании моментального снимка вызванное исключение обозначается идентификатором моментального снимка. При передаче сведений об исключении в Application Insights этот идентификатор моментального снимка добавляется в качестве пользовательского свойства. В колонке поиска Application Insights можно найти все записи с пользовательским свойством ai.snapshot.id
.
- Перейдите к ресурсу Application Insights на портале Azure.
- Нажмите Поиск.
- В текстовом поле поиска введите
ai.snapshot.id
и нажмите клавишу ВВОД.
Если этот поиск не дал результатов, значит в Application Insights не передавались моментальные снимки за выбранный интервал времени.
Чтобы найти определенный идентификатор снимка из журналов отправителя, введите этот идентификатор в поле поиска. Если не удается найти записи для моментального снимка, который, как вам известно, был отправлен, выполните следующие действия:
Еще раз проверьте, что вы смотрите на правильный ресурс Application Insights при проверке ключа инструментирования.
С помощью метки времени из журнала отправителя, настройте фильтр диапазона времени поиска так, чтобы охватить этот диапазон времени.
Если исключение с таким идентификатором моментальных снимков по-прежнему не отображается, значит запись этого исключения не отправлялась в Application Insights. Это происходит в случае сбоя приложения после снятия снимка, но до того, как оно передало запись исключения. В этом случае проверьте журналы службы приложений в Diagnose and solve problems
, чтобы проверить, были ли неожиданные перезагрузки или необработанные исключения.
Изменение правил прокси-сервера сети или брандмауэра
Если ваше приложение подключается к Интернету через прокси-сервер или брандмауэр, вам может потребоваться обновить правила для обмена данными со службой Snapshot Debugger.
IP-адреса, используемые службой Application Insights Snapshot Debugger, включены в тег службы Azure Monitor. Дополнительные сведения см. в статье Документация по Тегам служб.
Существуют ли затраты на выставление счетов при использовании моментальных снимков?
Плата за подписку на Snapshot Debugger не взимается. Собранные файлы моментальных снимков хранятся отдельно от телеметрии, собранной пакетами SDK Application Insights, и плата за получение или хранение моментальных снимков не взимается.