Verwerking van geolocatie en IP-adres

In dit artikel wordt uitgelegd hoe het opzoeken van geolocatie en de verwerking van IP-adressen werken in Application Insights, en hoe u het standaardgedrag kunt wijzigen.

Standaardgedrag

Standaard worden IP-adressen tijdelijk verzameld, maar niet opgeslagen in Application Insights. Dit proces volgt enkele eenvoudige stappen.

Wanneer telemetrie naar Azure wordt verzonden, gebruikt Application Insights het IP-adres om een geolocatiezoekactie uit te voeren. Application Insights gebruikt de resultaten van deze zoekactie om de velden client_City, client_StateOrProvinceen client_CountryOrRegionin te vullen. Het adres wordt vervolgens verwijderd en 0.0.0.0 naar het client_IP veld geschreven.

Als u geolocatiegegevens wilt verwijderen, raadpleegt u de volgende artikelen:

De telemetrietypen zijn:

  • Browsertelemetrie: Application Insights verzamelt het IP-adres van de afzender. Het opname-eindpunt berekent het IP-adres.
  • Servertelemetrie: de Application Insights-telemetriemodule verzamelt tijdelijk het IP-adres van de client. Het IP-adres wordt niet lokaal verzameld wanneer de X-Forwarded-For header is ingesteld. Wanneer de lijst met binnenkomende IP-adressen meer dan één item bevat, wordt het laatste IP-adres gebruikt om geolocatievelden in te vullen.

Dit gedrag is ontworpen om onnodige verzameling van persoonlijke gegevens en locatiegegevens van IP-adressen te voorkomen. Waar mogelijk raden we aan om het verzamelen van persoonsgegevens te vermijden.

Notitie

Hoewel het standaard is om geen IP-adressen te verzamelen, kunt u dit gedrag overschrijven. U wordt aangeraden te controleren of de verzameling geen nalevingsvereisten of lokale voorschriften overbreekt.

Zie Richtlijnen voor persoonsgegevens voor meer informatie over het verwerken van persoonsgegevens in Application Insights.

Wanneer IP-adressen niet worden verzameld, worden plaats en andere geolocatiekenmerken die door onze pijplijn worden gevuld met behulp van het IP-adres ook niet verzameld. U kunt IP-verzameling bij de bron maskeren. Er zijn twee manieren om dit te doen. U kunt:

Opslag van IP-adresgegevens

Als u IP-verzameling en -opslag wilt inschakelen, moet de DisableIpMasking eigenschap van het Application Insights-onderdeel worden ingesteld op true. U kunt deze eigenschap instellen via Azure Resource Manager-sjablonen (ARM-sjablonen) of door de REST API aan te roepen.

ARM-sjabloon

{
       "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

Als u het gedrag voor slechts één Application Insights-resource wilt wijzigen, gebruikt u de Azure Portal.

  1. Ga naar uw Application Insights-resource en selecteer vervolgens Automation>Exportsjabloon.

  2. Selecteer Implementeren.

    Schermopname van de knop Implementeren.

  3. Selecteer Sjabloon bewerken.

    Schermopname van de knop Bewerken, samen met een waarschuwing over de resourcegroep.

    Notitie

    Als de fout in de vorige schermopname wordt weergegeven, kunt u deze oplossen. Er wordt aangegeven: 'De resourcegroep bevindt zich op een locatie die niet wordt ondersteund door een of meer resources in de sjabloon. Kies een andere resourcegroep.' Selecteer tijdelijk een andere resourcegroep in de vervolgkeuzelijst en selecteer vervolgens de oorspronkelijke resourcegroep opnieuw.

  4. Zoek in de JSON-sjabloon in propertiesresources. Voeg een komma toe aan het laatste JSON-veld en voeg vervolgens de volgende nieuwe regel toe: "DisableIpMasking": true. Selecteer vervolgens Opslaan.

    Schermopname van de toevoeging van een komma en een nieuwe regel na de eigenschap voor de aanvraagbron.

  5. Selecteer Beoordelen en maken>Maken.

    Notitie

    Als u 'Uw implementatie is mislukt' ziet, bekijkt u de implementatiedetails voor de implementatie met het type microsoft.insights/components en controleert u de status. Als dat lukt, zijn de aangebrachte wijzigingen geïmplementeerd DisableIpMasking .

  6. Nadat de implementatie is voltooid, worden nieuwe telemetriegegevens vastgelegd.

    Als u de sjabloon opnieuw selecteert en bewerkt, ziet u alleen de standaardsjabloon zonder de zojuist toegevoegde eigenschap. Als u geen IP-adresgegevens ziet en wilt bevestigen dat is "DisableIpMasking": true ingesteld, voert u de volgende PowerShell-opdrachten uit:

    # 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
    

    Als gevolg hiervan wordt een lijst met eigenschappen geretourneerd. Een van de eigenschappen moet worden gelezen DisableIpMasking: true. Als u de PowerShell-opdrachten uitvoert voordat u de nieuwe eigenschap implementeert met Azure Resource Manager, bestaat de eigenschap niet.

REST-API

De volgende REST API-nettolading brengt dezelfde wijzigingen aan:

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

Met de PoweShell-cmdlet Update-AzApplicationInsights kunt u IP-maskering uitschakelen met de DisableIPMasking parameter .

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

Zie Update-AzApplicationInsights voor meer informatie over de cmdlet Update-AzApplicationInsights

Initialisatiefunctie voor telemetrie

Als u een flexibeler alternatief nodig hebt dan DisableIpMasking, kunt u een telemetrie-initialisatiefunctie gebruiken om het ip-adres geheel of gedeeltelijk naar een aangepast veld te kopiëren. De code voor deze klasse is hetzelfde voor alle .NET-versies.

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

Notitie

Als u geen toegang hebt tot ISupportProperties, controleert u of u de nieuwste stabiele release van de Application Insights SDK uitvoert. ISupportProperties is bedoeld voor hoge kardinaliteitswaarden. GlobalProperties is geschikter voor lage kardinaliteitswaarden, zoals regionaam en omgevingsnaam.

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

De resultaten van uw telemetrie-initialisatiefunctie weergeven

Als u nieuw verkeer naar uw site verzendt en een paar minuten wacht, kunt u vervolgens een query uitvoeren om te bevestigen dat de verzameling werkt:

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

Nieuw verzamelde IP-adressen worden weergegeven in de customDimensions_client-ip kolom. In de standaardkolom client-ip worden nog steeds alle vier de octetten uitgeschakeld.

Als u test vanuit localhost en de waarde voor customDimensions_client-ip is, is ::1deze waarde verwacht gedrag. De ::1 waarde vertegenwoordigt het loopback-adres in IPv6. Dit is gelijk aan 127.0.0.1 in IPv4.

Veelgestelde vragen

Deze sectie bevat antwoorden op veelgestelde vragen.

Hoe worden gegevens over plaats, land/regio en andere geolocatie berekend?

We zoeken het IP-adres (IPv4 of IPv6) van de webclient op:

  • Browsertelemetrie: We verzamelen het IP-adres van de afzender.
  • Servertelemetrie: de Application Insights-module verzamelt het IP-adres van de client. Deze wordt niet verzameld als X-Forwarded-For is ingesteld.
  • Zie Verwerking van geolocatie en IP-adressen voor meer informatie over hoe IP-adres- en geolocatiegegevens worden verzameld in Application Insights.

U kunt configureren ClientIpHeaderTelemetryInitializer om het IP-adres uit een andere header te halen. In sommige systemen wordt het bijvoorbeeld verplaatst door een proxy, load balancer of CDN naar X-Originating-IP. Meer informatie.

U kunt Power BI gebruiken om de telemetrie van uw aanvraag op een kaart weer te geven als u bent gemigreerd naar een resource op basis van een werkruimte.

Volgende stappen

  • Meer informatie over het verzamelen van persoonsgegevens vindt u in Application Insights.
  • Meer informatie over hoe het verzamelen van IP-adressen werkt in Application Insights. Dit artikel is een oudere externe blogpost geschreven door een van onze technici. Het dateert van vóór het huidige standaardgedrag waarbij het IP-adres wordt vastgelegd als 0.0.0.0. In het artikel wordt dieper ingegaan op de mechanismen van de ingebouwde telemetrie-initialisatiefunctie.