Обработка геолокации и IP-адресов
В этой статье объясняется, как работает поиск по геолокации и обработка IP-адресов в Application Insights, а также описывается, как изменить поведение по умолчанию.
Поведение по умолчанию
По умолчанию IP-адреса временно собираются, но не хранятся в Application Insights. Этот процесс выполняет некоторые основные шаги.
Когда данные телеметрии отправляются в Azure, Application Insights использует IP-адрес для поиска по географическому расположению. Application Insights использует результаты этого поиска для заполнения полей client_City
, client_StateOrProvince
и client_CountryOrRegion
. Затем адрес удаляется, а 0.0.0.0
записывается в поле client_IP
.
Сведения об удалении данных о географическом расположении см. в следующих статьях:
Типы данных телеметрии
- Телеметрия браузера. Application Insights собирает IP-адрес отправителя. Конечная точка приема вычисляет IP-адрес.
- Телеметрия сервера. Модуль телеметрии Application Insights временно собирает IP-адрес клиента. IP-адрес не определяется локально, если задан заголовок
X-Forwarded-For
. Если список входящих IP-адресов содержит несколько элементов, последний IP-адрес используется для заполнения полей географического расположения.
Это поведение позволяет избежать ненужного сбора персональных данных и сведений о расположении IP-адресов. По возможности рекомендуется избегать сбора персональных данных.
Примечание
Хотя по умолчанию IP-адреса не собираются, это поведение можно переопределить. Рекомендуется убедиться, что сбор этих данных не нарушает требования соответствия или местные нормы.
Дополнительные сведения об обработке персональных данных в Application Insights см. в статье Руководство по персональным данным.
Если IP-адреса не собираются, атрибуты города и других географических расположений, заполняемые конвейером на основе IP-адреса, также не собираются. Вы можете скрыть коллекцию IP-адресов в источнике. Это можно сделать двумя способами. Вы можете:
- Удалите инициализатор IP-адресов клиента. Дополнительные сведения см. в статье Настройка с использованием конфигурации Application Insights.
- Укажите собственный пользовательский инициализатор. Дополнительные сведения см. в примере фильтрации API.
Хранение данных IP-адресов
Чтобы включить сбор и хранение IP-адресов, свойству DisableIpMasking
компонента Application Insights необходимо присвоить значение true
. Это свойство можно задать с помощью шаблонов Azure Resource Manager (шаблоны ARM) или путем вызова REST API.
Шаблон ARM
{
"id": "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>/providers/microsoft.insights/components/<resource-name>",
"name": "<resource-name>",
"type": "microsoft.insights/components",
"location": "westcentralus",
"tags": {
},
"kind": "web",
"properties": {
"Application_Type": "web",
"Flow_Type": "Redfield",
"Request_Source": "IbizaAIExtension",
// ...
"DisableIpMasking": true
}
}
Портал
Если необходимо изменить поведение только для одного ресурса Application Insights, используйте портал Azure.
Перейдите к ресурсу Application Insights и выберите Шаблон экспорта службы автоматизации>.
Выберите Развернуть.
Выберите Изменить шаблон.
Примечание
Если возникла ошибка, показанная на предыдущем снимке экрана, ее можно устранить. В нем говорится: "Группа ресурсов находится в расположении, которое не поддерживается одним или несколькими ресурсами в шаблоне. Выберите другую группу ресурсов", ее можно устранить. В этом случае временно выберите из раскрывающегося списка другую группу ресурсов, а затем повторно выберите исходную группу ресурсов.
В шаблоне JSON найдите
properties
внутриresources
. Добавьте запятую в последнее поле JSON, а затем добавьте следующую новую строку:"DisableIpMasking": true
. Затем нажмите кнопку Save (Сохранить).Выберите команду Просмотреть и создать>Создать.
Примечание
При появлении окна "Сбой развертывания" просмотрите сведения о развертывании, относящиеся к типу
microsoft.insights/components
, и проверьте состояние. Если эта операция выполнена успешно, значит, изменения, внесенные вDisableIpMasking
, были развернуты.После завершения развертывания будут записаны новые данные телеметрии.
Если выбрать и изменить шаблон еще раз, вы увидите только шаблон по умолчанию без добавленного свойства. Если вы не видите данные IP-адреса и хотите убедиться, что свойство
"DisableIpMasking": true
задано, выполните следующие команды PowerShell.# Replace `Fabrikam-dev` with the appropriate resource and resource group name. # If you aren't using Azure Cloud Shell, you need to connect to your Azure account # Connect-AzAccount $AppInsights = Get-AzResource -Name 'Fabrikam-dev' -ResourceType 'microsoft.insights/components' -ResourceGroupName 'Fabrikam-dev' $AppInsights.Properties
В результате будет возвращен список свойств. Одним из свойств должно быть
DisableIpMasking: true
. Если вы выполните команды PowerShell перед развертыванием нового свойства в Azure Resource Manager, свойство не будет существовать.
REST API
Следующие полезные данные REST API внесены в те же изменения:
PATCH https://management.azure.com/subscriptions/<sub-id>/resourceGroups/<rg-name>/providers/microsoft.insights/components/<resource-name>?api-version=2018-05-01-preview HTTP/1.1
Host: management.azure.com
Authorization: AUTH_TOKEN
Content-Type: application/json
Content-Length: 54
{
"location": "<resource location>",
"kind": "web",
"properties": {
"Application_Type": "web",
"DisableIpMasking": true
}
}
PowerShell
Командлет PoweShell Update-AzApplicationInsights может отключить маскирование IP-адресов с DisableIPMasking
помощью параметра .
Update-AzApplicationInsights -Name "aiName" -ResourceGroupName "rgName" -DisableIPMasking:$true
Дополнительные сведения о командлете Update-AzApplicationInsights см. в разделе Update-AzApplicationInsights.
Инициализатор телеметрии
Если вам требуется более гибкая альтернатива DisableIpMasking
, можно использовать инициализатор телеметрии, чтобы скопировать весь IP-адрес или его часть в настраиваемое поле. Код для этого класса одинаков в разных версиях .NET.
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;
namespace MyWebApp
{
public class CloneIPAddress : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
ISupportProperties propTelemetry = telemetry as ISupportProperties;
if (propTelemetry !=null && !propTelemetry.Properties.ContainsKey("client-ip"))
{
string clientIPValue = telemetry.Context.Location.Ip;
propTelemetry.Properties.Add("client-ip", clientIPValue);
}
}
}
}
Примечание
Если вам не удается получить доступ к ISupportProperties
, убедитесь, что вы используете последний стабильный выпуск пакета SDK для Application Insights. Интерфейс ISupportProperties
предназначен для значений более высокой кратности. GlobalProperties
лучше подходит для значений меньшей кратности, таких как имя региона и имя среды.
using Microsoft.ApplicationInsights.Extensibility;
using CustomInitializer.Telemetry;
builder.services.AddSingleton<ITelemetryInitializer, CloneIPAddress>();
Node.js
appInsights.defaultClient.addTelemetryProcessor((envelope) => {
const baseData = envelope.data.baseData;
if (appInsights.Contracts.domainSupportsProperties(baseData)) {
const ipAddress = envelope.tags[appInsights.defaultClient.context.keys.locationIp];
if (ipAddress) {
baseData.properties["client-ip"] = ipAddress;
}
}
});
Просмотр результатов инициализатора телеметрии
Если вы отправляете новый трафик на сайт и ждете несколько минут, можно затем выполнить запрос, чтобы убедиться, что коллекция работает.
requests
| where timestamp > ago(1h)
| project appName, operation_Name, url, resultCode, client_IP, customDimensions.["client-ip"]
Новые собранные IP-адреса отобразятся в столбце customDimensions_client-ip
. По умолчанию в столбце client-ip
по-прежнему будут обнуляться все четыре октета.
Если проверка выполняется с localhost, а значение параметра customDimensions_client-ip
— ::1
, то это ожидаемое поведение. Значение ::1
— это петлевой адрес в формате IPv6. Он эквивалентен 127.0.0.1
в IPv4.
Часто задаваемые вопросы
В этом разделы приводятся ответы на часто задаваемые вопросы.
Как вычисляются данные о городе, стране или регионе и других данных о географическом расположении?
Мы ищем IP-адрес (IPv4 или IPv6) веб-клиента:
- Телеметрия браузера: мы собираем сведения об IP-адресе отправителя.
- Телеметрия сервера: модуль Application Insights собирает сведения об IP-адресе клиента. Он не собирается, если
X-Forwarded-For
задан. - Дополнительные сведения о сборе данных об IP-адресах и геолокации в Application Insights см. в статье Геолокация и обработка IP-адресов.
Вы можете настроить ClientIpHeaderTelemetryInitializer
для получения IP-адреса из другого заголовка. В некоторых системах, например, он перемещается прокси-сервером, подсистемой балансировки нагрузки или CDN в X-Originating-IP
. Подробнее.
Вы можете использовать Power BI для отображения данных телеметрии запроса на карте, если вы перешли на ресурс на основе рабочей области.
Следующие шаги
- Узнайте больше о сборе персональных данных в Application Insights.
- Узнайте больше о том, как работает сбор IP-адресов в Application Insights. Эта статья является более старой внешней записью блога, написанной одним из наших инженеров. Он предшествует текущему поведению по умолчанию, когда IP-адрес записывается как
0.0.0.0
. В статье подробно рассматривается механика встроенного инициализатора телеметрии.