Сбор и хранение данных в Application Insights

После установки в приложение пакет SDK для Azure Application Insights отправляет данные телеметрии приложения в облако. Естественно, ответственные разработчики хотят знать, какие именно данные отправляются, что с ними происходит и как ими управлять. В частности, возникают следующие вопросы: можно ли отправлять конфиденциальные данные, где они хранятся и насколько это безопасно?

Ответ прост.

  • Для отправки конфиденциальных данных в службу лучше не использовать телеметрические модули со стандартными настройками. Телеметрия включает метрики нагрузки, производительности и использования, отчеты об исключениях и другие диагностические данные. Основными пользовательскими данными, которые отображаются в диагностических отчетах, являются URL-адреса. Однако приложение в любом случае не должно помещать конфиденциальные данные в URL-адрес в виде обычного текста.
  • Можно написать код, который будет отправлять дополнительные пользовательские телеметрические данные для диагностики и мониторинга (Эта расширяемость — одна из полезных возможностей Application Insights) По ошибке код может включать в себя личные и другие конфиденциальные данные. Если приложение работает с такими данными, то следует тщательно проверять весь написанный код.
  • При разработке и тестировании приложения можно легко проверить, какие именно данные отправляются с помощью пакета SDK. Данные отображаются в окнах вывода отладочных данных IDE и браузера.
  • Расположение можно выбрать при создании нового ресурса Application Insights. Дополнительные сведения о доступности Application Insights для каждого региона см. здесь.
  • Просмотрите собранные данные, поскольку они могут содержать данные, которые разрешены только некоторых случаях. Хорошим примером такой ситуации является имя устройства. Имя устройства с сервера не оказывает никакого влияния на конфиденциальность и является полезным, однако имя устройства с телефона или ноутбука может оказывать влияние на конфиденциальность и быть менее полезным. Пакет SDK, разработанный главным образом для целевых серверов, по умолчанию будет собирать имя устройства, и его, возможно, потребуется перезаписать как при обычных обстоятельствах, так и при исключениях.

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

Что такое Azure Application Insights?

Azure Application Insights — это служба Майкрософт, которая помогает повысить производительность и удобство использования активного приложения. Она отслеживает приложение на протяжении всего времени его работы: как на этапе тестирования, так и после публикации или развертывания. Application Insights создает диаграммы и таблицы, которые могут отображать различные данные: например, в какое время дня у вас наибольшее число пользователей, насколько быстро приложение отвечает на запросы и насколько хорошо оно обслуживается внешними службами, от которых зависит. В случае сбоев, ошибок или проблем с производительностью можно более детально просмотреть телеметрические данные, чтобы определить причину проблемы. Кроме этого, в случае каких-либо изменений в доступности и производительности приложения служба будет отправлять вам по электронной почте соответствующие уведомления.

Чтобы использовать эту возможность, установите в приложение пакет SDK Application Insights, который интегрируется с кодом приложения. Когда приложение запущено, пакет SDK отслеживает его работу и отправляет телеметрические данные в службу Application Insights. Это облачная служба, размещенная в Microsoft Azure. (Application Insights работает для любых приложений, а не только тех, которые размещены в Azure.)

Служба Application Insights хранит и анализирует телеметрические данные. Для просмотра результатов анализа или поиска в сохраненных телеметрических данных войдите в учетную запись Azure и откройте в окне приложения ресурс Application Insights. Доступ к данным также можно предоставить другим участникам команды или определенным подписчикам Azure.

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

Пакеты SDK Application Insights доступны для разных типов приложений: веб-служб, размещенных на ваших собственных серверах Java EE или ASP.NET или в Azure, веб-клиентов (то есть кода, выполняемого на веб-странице), классических приложений и служб, а также приложений для устройств (например, Windows Phone, iOS и Android). Все они отправляют телеметрические данные в одну и ту же службу.

Какие данные собираются?

Есть три источника данных:

  • Пакет SDK, который вы интегрируете в свое приложение во время разработки или в среде выполнения. Существуют разные пакеты SDK для различных типов приложений. Также есть пакет SDK для веб-страниц, который загружается в браузер конечного пользователя вместе со страницей.

    • В каждый пакет SDK входит ряд модулей, которые используют различные методики для сбора разных типов телеметрических данных.
    • Если пакет SDK устанавливается на этапе разработки, для отправки собственных телеметрических данных, помимо стандартных модулей, можно использовать API. Такая пользовательские телеметрические данные могут включать все данные, которые требуется отправить.
  • На некоторых веб-серверах также установлены агенты, которые работают вместе с приложениями и отправляют телеметрические данные о ЦП, памяти и загрузке сети. Например, такие агенты могут быть установлены на виртуальных машинах Azure, узлах Docker и серверах Java EE.

  • Тесты доступности — это процессы, выполняемые компанией Майкрософт, которые отправляют запросы к веб-приложению через одинаковые интервалы. Результаты отправляются в службу Application Insights.

Какие типы данных собираются?

Вот основные категории данных.

  • Телеметрия веб-сервера : HTTP-запросы. URI, время обработки запроса, код ответа, IP-адрес клиента. Session id.
  • Веб-страницы : количество страниц, пользователей и сеансов. Время загрузки страницы. Исключения. Вызовы AJAX.
  • Счетчики производительности: загрузка памяти, ЦП, сети, количество операций ввода-вывода.
  • Контекст клиента и сервера: ОС, языковой стандарт, тип устройства, браузер и разрешение экрана.
  • Исключения и сбои: дампы стека, build id, а также тип процессора.
  • Зависимости : вызовы внешних служб, например REST, SQL и AJAX. URI или строка подключения, длительность, успешное выполнение, команда.
  • Тесты доступности : длительность теста и его шагов, ответы.
  • Журналы трассировки и пользовательские данные телеметрии: - все данные, которые программно добавляются в журналы или данные телеметрии.

Дополнительные сведения.

Как проверить, какие именно данные собираются?

Если приложение разрабатывается в Visual Studio, запустите приложение в режиме отладки (F5). Телеметрические данные появятся в окне вывода. Оттуда их можно скопировать, отформатировать как файл JSON и быстро проверить.

Снимок экрана: запуск приложения в Visual Studio в режиме отладки.

В окне диагностики также есть более удобное для чтения представление.

В случае с веб-страницами, откройте окно отладки в браузере.

Нажмите клавишу F12 и откройте вкладку «Сеть».

Можно ли написать код, чтобы отфильтровать телеметрические данные перед отправкой?

Можно написать подключаемый модуль обработчика телеметрических данных.

Как долго хранятся данные?

Необработанные точки данных (то есть элементы, которые можно запросить в Аналитике и проверить с помощью Поиска) хранятся в течение 730 дней. Можно выбрать период хранения 30, 60, 90, 120, 180, 270, 365, 550 или 730 дней. Если требуется хранить данные дольше 730 дней, можно использовать непрерывный экспорт, чтобы копировать их в учетную запись хранения во время приема данных.

За данные, хранящиеся дольше 90 дней, взимается дополнительная плата. Узнайте больше о ценах на Application Insights на странице цен на Azure Monitor.

Статистические данные (то есть счетчики, средние значения и другие статистические данные, которые отображаются в обозревателе метрик) сохраняются со степенью детализации в 1 минуту в течение 90 дней.

Моментальные снимки отладки хранятся в течение 15 дней. Такая политика хранения задается для каждого приложения отдельно. Если нужно изменить этот параметр, вы можете запросить изменения, открыв окно Службы Поддержки на портале Microsoft Azure.

Кто имеет доступ к данным?

Данные видны вам и, если у вас есть учетная запись организации, членам вашей группы.

Вы и члены группы могут их экспортировать и скопировать в другое место, а также передать другим пользователям.

Что корпорация Майкрософт делает с данными, которые мое приложение отправляет службе Application Insights?

Корпорация Майкрософт использует данные только для предоставления вам возможностей службы.

Где хранятся данные?

  • Расположение можно выбрать при создании нового ресурса Application Insights. Дополнительные сведения о доступности Application Insights для каждого региона см. здесь.

Насколько защищены мои данные?

Application Insights — это служба Azure. Политики безопасности описаны в техническом документе Azure о безопасности, конфиденциальности и соответствии требованиям.

Данные хранятся на серверах Microsoft Azure. Ограничения для учетных записей на портале Azure описаны в документе Безопасность, конфиденциальность и соответствие нормативам Azure.

Доступ к данным сотрудников Майкрософт ограничен. Доступ производится только с вашего разрешения и в случае, если это необходимо для поддержки использования вами Application Insights.

Совокупные данные от приложений всех наших клиентов (например, скорость передачи данных и средний размер трассировок) используются для улучшения Application Insights.

Могут ли данные телеметрии другого пользователя повлиять на мои данные Application Insights?

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

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

Шифруются ли данные?

Все данные шифруются при хранении и перемещении между центрами обработки данных.

Данные шифруются при передаче из приложения на серверы Application Insights?

Да, мы используем HTTPS для отправки данных на портал практически из всех пакетов SDK, включая веб-серверы, устройства и веб-страницы HTTPS.

Создает ли пакет SDK временное локальное хранилище?

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

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

Эти сохраненные данные не шифруются локально. Если это представляет собой проблему, проверьте данные и ограничьте коллекцию персональных данных. (Для дополнительной информации см. раздел Как экспортировать и удалять персональные данные.)

Если пользователю нужно настроить каталог с особыми требованиями безопасности, их можно установить для каждой отдельной платформы. Убедитесь, что процесс для запуска приложения имеет доступ к каталогу, а также убедитесь, что каталог защищен от возможности прочтения данных телеметрии нежелательными пользователями.

Java

C:\Users\username\AppData\Local\Temp используется для сохраненных данных. Это расположение не настраивается в каталоге конфигурации, и разрешение на доступ к этой папке ограничено конкретным пользователем с необходимыми полномочиями. (Дополнительные сведения см. в статье об реализации.)

.NET

По умолчанию ServerTelemetryChannel использует локальную папку данных приложения текущего пользователя %localAppData%\Microsoft\ApplicationInsights или временную папку %TMP%. (См. пример реализации здесь.)

С помощью файла конфигурации:

<TelemetryChannel Type="Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel.ServerTelemetryChannel,   Microsoft.AI.ServerTelemetryChannel">
    <StorageFolder>D:\NewTestFolder</StorageFolder>
</TelemetryChannel>

С помощью кода:

  • Удалите ServerTelemetryChannel с файла конфигурации
  • Добавьте этот фрагмент кода в ваш файл конфигурации:
    ServerTelemetryChannel channel = new ServerTelemetryChannel();
    channel.StorageFolder = @"D:\NewTestFolder";
    channel.Initialize(TelemetryConfiguration.Active);
    TelemetryConfiguration.Active.TelemetryChannel = channel;
    

NetCore

По умолчанию ServerTelemetryChannel использует локальную папку данных приложения текущего пользователя %localAppData%\Microsoft\ApplicationInsights или временную папку %TMP%. (См. пример реализации здесь.)

В среде Linux локальное хранилище отключено, если только не указана папка хранилища.

Примечание

После выпуска 2.15.0-beta3 и более поздних версий локальное хранилище автоматически создается для Linux, Mac и Windows. Для систем, отличных от Windows, пакет SDK автоматически создаст папку локального хранилища на основе следующей логики:

  • ${TMPDIR} — если переменная среды ${TMPDIR} использует это расположение.
  • /var/tmp — если предыдущее расположение не существует, будет использоваться /var/tmp.
  • /tmp — если оба предыдущих расположения не существуют, будет использоваться tmp.
  • Если ни одно из этих расположений не существует, локальное хранилище не создается, и по-прежнему требуется настройка вручную. Полные сведения о реализации.

Следующий фрагмент кода демонстрирует как установить ServerTelemetryChannel.StorageFolder в метод ConfigureServices() вашего класса Startup.cs:

services.AddSingleton(typeof(ITelemetryChannel), new ServerTelemetryChannel () {StorageFolder = "/tmp/myfolder"});

(Дополнительную информацию см. в статье Настраиваемая конфигурация AspNetCore.)

Node.js

По умолчанию %TEMP%/appInsights-node{INSTRUMENTATION KEY} используется для сохраненных данных. Разрешение на доступ к этой папке дано только текущему пользователю и администраторам. (См. пример реализации здесь.)

Префикс папки appInsights-node можно перевести в ручной режим, изменив значение времени выполнения статической переменной Sender.TEMPDIR_PREFIX в Sender.ts.

JavaScript (для браузера)

Хранилище сеансов HTML5 используется для хранения данных. Используются два отдельных буфера: AI_buffer и AI_sent_buffer. Данные телеметрии, которые находятся в пакете и ожидают отправки, хранятся в AI_buffer. Данные телеметрии, которые были только что отправлены, помещаются в AI_sent_buffer до тех пор, пока сервер приема данных не сообщит, что они были успешно получены. Когда данные телеметрии успешно получены, они удаляются из всех буферов. В случае временных сбоев (например, если пользователь теряет подключение к сети), данные телеметрии остаются в AI_buffer до тех пор, пока они не будут успешно получены или пока сервер приема не сообщит, что данные телеметрии недопустимы (например, неправильная схема или устаревшие данные телеметрии).

Буферы телеметрии можно отключить, задав для enableSessionStorageBuffer значение false. При отключении хранилища сеанса, в качестве постоянного хранилища используется локальный массив. Поскольку пакет SDK для JavaScript работает на клиентском устройстве, пользователь имеет доступ к этому месту хранения через средства разработчика браузера.

Python для OpenCensus

По умолчанию пакет SDK для OpenCensus Python использует текущую пользовательскую папку %username%/.opencensus/.azure/. Разрешение на доступ к этой папке дано только текущему пользователю и администраторам. (См. статью о реализации здесь.) Папка с сохраненными данными будет названа именем файла Python, который создал данные телеметрии.

Расположение файла хранилища можно изменить, передав параметр storage_path в конструкторе используемого средства экспорта.

AzureLogHandler(
  connection_string='InstrumentationKey=00000000-0000-0000-0000-000000000000',
  storage_path='<your-path-here>',
)

Как отправить данные в Application Insights с помощью TLS 1.2?

Чтобы обеспечить безопасность данных в пути к конечным точкам Application Insights, мы настоятельно рекомендуем клиентам настроить приложение на использование протокола TLS как минимум версии 1.2. Более старые версии протоколов TLS/SSL оказались уязвимы. Хотя они все еще используются для обеспечения обратной совместимости, применять их не рекомендуется, так как представители отрасли стремятся как можно скорее отказаться от их поддержки.

Совет по стандартам безопасности PCI установил крайний срок (30 июня 2018 года) для отказа от старых версий протоколов TLS или SSL и перехода на более безопасные протоколы. Как только Azure прекратит поддержку предыдущих версий, приложения/клиенты, не поддерживающие протокол TLS хотя бы версии 1.2, не смогут отправлять данные в Application Insights. Подход, применяемый для тестирования и проверки поддержки протокола TLS приложением, будет зависеть от операционной системы или платформы, а также языка или инфраструктуры, используемых приложением.

Рекомендуется, по возможности, не настраивать в приложении работу только с протоколом TLS 1.2, поскольку это может нарушить работу функций безопасности на уровне платформы, которые позволяют автоматически обнаруживать и использовать новые более безопасные протоколы по мере их появления, например TLS 1.3. Советуем тщательно проверять код приложения на наличие жестко прописанных версий протокола TLS/SSL.

Руководство по отдельным платформам и языкам

Платформа или язык Поддержка Дополнительные сведения
Службы приложений Azure Поддерживается, может потребоваться настройка. О поддержке объявили в апреле 2018 г. Сведения о конфигурации см. в объявлении о выпуске.
Приложения-функции Azure Поддерживается, может потребоваться настройка. О поддержке объявили в апреле 2018 г. Сведения о конфигурации см. в объявлении о выпуске.
.NET Поддерживается, конфигурация зависит от версии. Подробную информацию о конфигурации для .NET 4.7 и более ранних версий см. в этих инструкциях.
Монитор состояния Поддерживается, требуется настройка Монитор состояния зависит от Конфигурации ОС + Конфигурации .NET для поддержки протокола TLS 1.2.
Node.js Поддерживается, для версии 10.5.0 может потребоваться настройка. Для определения точной конфигурации приложения используйте официальную документацию Node.js по протоколу TLS или SSL.
Java Поддерживается, в JDK поддержка протокола TLS 1.2 добавлена в обновлении 121 для JDK 6 и JDK 7. JDK 8 использует протокол TLS 1.2 по умолчанию.
Linux Как правило, дистрибутивы Linux для поддержки протокола TLS 1.2 используют OpenSSL. Убедитесь, что ваша версия OpenSSL поддерживается, проверив журнал изменений OpenSSL.
Windows 8.0–10 Поддерживается и включена по умолчанию. Убедитесь, что вы все еще используете параметры по умолчанию.
Windows Server 2012–2016 Поддерживается и включена по умолчанию. Убедитесь, что вы все еще используете параметры по умолчанию.
Windows 7 с пакетом обновления 1 и Windows Server 2008 R2 с пакетом обновления 1 Поддерживается, но не включена по умолчанию. Информацию о том, как ее включить, см. на странице Transport Layer Security (TLS) registry settings (Параметры реестра TLS).
Windows Server 2008 с пакетом обновления 2 (SP2) Для поддержки протокола TLS 1.2 требуется обновление. См. статью об обновлении для добавления поддержки TLS 1.2 в Windows Server 2008 с пакетом обновления 2.
Windows Vista Не поддерживается. Недоступно

Проверка версии OpenSSL, используемой дистрибутивом Linux

Чтобы проверить, какая версия OpenSSL установлена, откройте терминал и выполните команду:

openssl version -a

Выполнение тестовой транзакции TLS 1.2 на платформе Linux

Для выполнения предварительной проверки способности системы Linux обмениваться данными по протоколу TLS 1.2, откройте терминал и выполните следующую команду:

openssl s_client -connect bing.com:443 -tls1_2

Персональные данные, хранимые в Application Insights

Этот вопрос подробно рассмотрен в нашей статье о персональных данных в Application Insights.

Могут ли мои пользователи отключить Application Insights?

Не напрямую. Мы не предоставляем параметр, с помощью которого пользователи могут отключить Application Insights.

Однако вы можете реализовать такую возможность в своем приложении. Все пакеты SDK содержат параметр API, который отключает сбор данных телеметрии.

Данные, передаваемые службой Application Insights

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

Классы данных, передаваемых в различных сценариях

Ваше действие Собираемые классы данных (см. следующую таблицу)
Добавление пакета SDK для Application Insights в веб-проект .NET ServerContext
Выводимые
Счетчики производительности
Requests
Исключения
Сеанс
пользователи
Установка монитора состояния на сервере IIS Зависимости
ServerContext
Выводимые
Счетчики производительности
Добавление пакета SDK для Application Insights в веб-приложение Java ServerContext
Выводимые
Запрос
Сеанс
пользователи
Добавление пакета SDK для JavaScript на веб-страницу ClientContext
Выводимые
Страница
ClientPerf
Ajax
Определение свойств по умолчанию Свойства всех стандартных и настраиваемых событий
Вызов TrackMetric Числовые значения
Свойства
Вызов Track* Имя события
Свойства
Вызов TrackException Исключения
Дамп стека
Свойства
Пакету SDK не может собрать данные. Пример:
не удается получить доступ к счетчикам производительности;
порождается исключение в инициализаторе телеметрии.
Диагностика SDK

Сведения о пакетах SDK для других платформ можно получить в соответствующей документации.

Классы собираемых данных

Собираемый класс данных Включает (неисчерпывающий список)
Свойства Все данные — определяется кодом
DeviceContext Id, IP-адрес, языковой стандарт, модель устройства, сеть, тип сети, имя изготовителя оборудования, разрешение экрана, экземпляр роли, имя роли, тип устройства
ClientContext ОС, языковой стандарт, язык, сеть, разрешение окна
Сеанс session id
ServerContext Имя компьютера, языковой стандарт, ОС, устройство, сеанс пользователя, контекст пользователя, операция
Выводимые географическое расположение на основе IP-адреса, отметка времени, ОС, браузер
Метрики Имя и значение метрики
События Имя и значение события
PageViews URL-адрес и имя страницы или имя экрана
Производительность клиента URL-адрес или имя страницы, время загрузки браузера
Ajax Вызовы HTTP от веб-страницы на сервер
Requests URL-адрес, длительность, код ответа
Зависимости Тип (SQL, HTTP,...), строка подключения или URI, синхронный или асинхронный, длительность, успешное завершение, инструкция SQL (с монитором состояния)
Исключения Тип, сообщения, стеки вызовов, исходный файл, номер строки и thread id
Сбои Process id, parent process id, crash thread id, исправление приложения, id, сборка, тип исключения, адрес, причина, скрытые символы и регистры, начальный и конечный двоичный адрес, имя и путь двоичного файла, тип ЦП
Трассировка Сообщение и уровень серьезности
Счетчики производительности Время процессора, объем доступной памяти, частота запросов, скорость исключения, байтов исключительного пользования процесса, скорость ввода-вывода, длительность запроса, длина очереди запросов
Доступность Код ответа веб-теста, длительность каждого шага теста, имя теста, метка времени, успешное завершение, время отклика, расположение теста.
Диагностика SDK Сообщение трассировки или исключение

Вы можете отключить некоторые данные, изменив файл ApplicationInsights.config.

Примечание

IP-адрес клиента используется для определения географического расположения, но сейчас данные об IP-адресах больше не сохраняются по умолчанию, а в соответствующее поле записываются нули. Дополнительные сведения об обработке персональных данных см. в этой статье. Если необходимо сохранить данные IP-адресов, в нашей статье о коллекции IP-адресов можно найти все возможные варианты.

Можно ли изменить или обновить данные после сбора?

Нет, данные доступны только для чтения и могут быть удалены только с помощью функции очистки. Дополнительные сведения см. в руководстве по хранению персональных данных в Log Analytics и Application Insights.

Благодарности

Этот продукт содержит данные GeoLite2, созданные пользователем MaxMind и доступные на веб-сайте https://www.maxmind.com.