Administración de la ubicación geográfica y la dirección IP

En este artículo se explica cómo funcionan la búsqueda de geolocalización y el control de direcciones IP en Application Insights, además de cómo se modifica el comportamiento predeterminado.

Comportamiento predeterminado

De forma predeterminada, las direcciones IP se recopilan temporalmente en Application Insights, pero no se almacenan. Este proceso sigue algunos pasos básicos.

Cuando los datos de telemetría se envían a Azure, Application Insights usa la dirección IP para realizar una búsqueda de geolocalización. Application Insights usa los resultados de esta búsqueda para rellenar los campos client_City, client_StateOrProvince y client_CountryOrRegion. Luego, la dirección se descarta y 0.0.0.0 se escribe en el campo client_IP.

Para quitar datos de geolocalización, consulte los artículos siguientes:

Estos son los tipos de telemetría:

  • Telemetría del explorador: Application Insights recopila la dirección IP del emisor. El punto de conexión de ingesta calcula la dirección IP.
  • Telemetría del servidor: el módulo de telemetría de Application Insights recopila temporalmente la dirección IP del cliente. La dirección IP no se recopila localmente cuando se establece el encabezado X-Forwarded-For. Cuando la lista entrante de direcciones IP tiene más de un elemento, se usa la última para rellenar los campos de geolocalización.

Este comportamiento es así por naturaleza y tiene como fin ayudar a evitar la recopilación innecesaria de datos personales e información de ubicación de dirección IP. Siempre que sea posible, se recomienda evitar la recopilación de datos personales.

Nota

Aunque el valor predeterminado es no recopilar direcciones IP, este comportamiento se puede invalidar. Se recomienda comprobar que la recopilación no infringe ningún requisito de cumplimiento ni normativa local.

Para más información sobre cómo manejar los datos personales en Application Insights, consulte la guía de datos personales.

Cuando las direcciones IP no se recopilan, tampoco se recopilan los atributos city ni otros atributos de geolocalización que rellena nuestra canalización mediante la dirección IP. Puede enmascarar la recopilación de IP en el origen. Hay dos formas de hacerlo. Puede:

Almacenamiento de datos de dirección IP

Para habilitar la recopilación y el almacenamiento de direcciones IP, la propiedad DisableIpMasking del componente de Application Insights debe establecerse en true. Esta propiedad se puede establecer mediante las plantillas de Azure Resource Manager (plantillas de ARM) o llamando a la API REST.

Plantilla 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
       }
}

Portal

Si solo necesita modificar el comportamiento de un recurso de Application Insights, use Azure Portal.

  1. Vaya al recurso de Application Insights y seleccione Automation>Exportar plantilla.

  2. Seleccione Implementar.

    Captura de pantalla que muestra el botón de implementación.

  3. Seleccione Editar plantilla.

    Captura de pantalla en la que se muestra el botón Editar junto con una advertencia sobre el grupo de recursos.

    Nota

    Si experimenta el error que se muestra en la captura de pantalla anterior, puede resolverlo. Indica lo siguiente: "El grupo de recursos está en una ubicación que no es compatible con uno o más recursos de la plantilla. Elija un grupo de recursos diferente. Seleccione temporalmente otro grupo de recursos en la lista desplegable y, a continuación, vuelva a seleccionar el grupo de recursos original.

  4. En la plantilla JSON, busque properties dentro de resources. Agregue una coma al último campo JSON y la siguiente línea nueva: "DisableIpMasking": true. Después, seleccione Guardar.

    Captura de pantalla que muestra la incorporación de una coma y una nueva línea después de la propiedad en el origen de la solicitud.

  5. Seleccione Revisar y crear>Crear.

    Nota

    Si ve "Error en la implementación", busque en los detalles de implementación el que tenga el tipo microsoft.insights/components y compruebe el estado. Si se ejecuta correctamente, significa que se han implementado los cambios realizados en DisableIpMasking.

  6. Una vez finalizada la implementación, se registrarán nuevos datos de telemetría.

    Si vuelve a seleccionar y editar la plantilla, solo verá la plantilla predeterminada sin la propiedad recién agregada. Si no ve los datos de la dirección IP y quiere confirmar que "DisableIpMasking": true está establecido, ejecute los siguientes comandos de 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
    

    Como resultado, se devuelve una lista de propiedades. Una de las propiedades debe ser DisableIpMasking: true. Si ejecuta los comandos de PowerShell antes de implementar la nueva propiedad con Azure Resource Manager, la propiedad no existirá.

API DE REST

La siguiente carga de la API REST realiza las mismas modificaciones:

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

El cmdlet "Update-AzApplicationInsights" de PowerShell puede deshabilitar el enmascaramiento IP con el parámetro DisableIPMasking.

Update-AzApplicationInsights -Name "aiName" -ResourceGroupName "rgName" -DisableIPMasking:$true

Para más información sobre el cmdlet "Update-AzApplicationInsights", consulte Update-AzApplicationInsights

Inicializador de telemetría

Si necesita una alternativa más flexible que DisableIpMasking, puede usar un inicializador de telemetría para copiar toda la dirección IP, o una parte de ella, en un campo personalizado. El código de esta clase es el mismo en todas las versiones de .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);
            }
        }
    } 
}

Nota

Si no puede acceder a ISupportProperties, asegúrese de que ejecuta la versión estable más reciente del SDK de Application Insights. ISupportProperties está pensado para valores de cardinalidad alta. GlobalProperties es más adecuado para los valores de cardinalidad baja, como el nombre de la región y el nombre del entorno.

 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;
        }
    }
});

Ver los resultados del inicializador de telemetría

Si envía el tráfico nuevo al sitio y espera unos minutos, puede ejecutar una consulta para confirmar que la colección funciona:

requests
| where timestamp > ago(1h) 
| project appName, operation_Name, url, resultCode, client_IP, customDimensions.["client-ip"]

Las direcciones IP recién recopiladas aparecerán en la columna customDimensions_client-ip. La columna client-ip predeterminada seguirá teniendo los cuatro octetos establecidos en cero.

Si realiza la prueba desde localhost y el valor de customDimensions_client-ip es ::1, este valor es el comportamiento esperado. El valor ::1 representa la dirección de bucle invertido en IPv6. Es equivalente a 127.0.0.1 en IPv4.

Preguntas más frecuentes

Esta sección proporciona respuestas a preguntas comunes.

¿Cómo se calcula la ciudad, país o región y el resto de información de ubicación geográfica?

Buscamos la dirección IP (IPv4 o IPv6) del cliente web mediante:

  • Telemetría del explorador: recopilamos la dirección IP del remitente.
  • Telemetría del servidor: el módulo de Application Insights recopila la dirección IP del cliente. No se recopila si X-Forwarded-For está establecido.
  • Para más información acerca de cómo se recopilan los datos de la dirección IP y la ubicación geográfica en Application Insights, consulte Administración de la ubicación geográfica y la dirección IP.

Puede configurar ClientIpHeaderTelemetryInitializer para tomar la dirección IP de un encabezado distinto. En algunos sistemas, por ejemplo, se mueve mediante un servidor proxy, un equilibrador de carga o la red CDN X-Originating-IP. Más información.

Puede usar Power BI para mostrar la telemetría de la solicitud en un mapa si ha migrado a un recurso basado en el área de trabajo.

Pasos siguientes

  • Obtenga más información sobre la recopilación de datos personales en Application Insights.
  • Más información sobre cómo funciona la recopilación de direcciones IP en Application Insights. Este artículo es una entrada de blog externa antigua que escribió uno de nuestros ingenieros. Precede al comportamiento predeterminado actual, con el cual la dirección IP se registra como 0.0.0.0. El artículo profundiza en la mecánica del inicializador de telemetría integrado.