Geolocation und Verarbeitung von IP-AdressenGeolocation and IP address handling

In diesem Artikel wird erläutert, wie die Geolocationsuche und die Verarbeitung von IP-Adressen in Application Insights funktionieren. Außerdem erfahren Sie, wie Sie das Standardverhalten ändern können.This article explains how geolocation lookup and IP address handling work in Application Insights along with how to modify the default behavior.

StandardverhaltenDefault behavior

IP-Adressen werden standardmäßig temporär gesammelt, aber nicht in Application Insights gespeichert.By default IP addresses are temporarily collected, but not stored in Application Insights. Der Standardprozess verläuft wie folgt:The basic process is as follows:

Wenn Telemetriedaten an Azure gesendet werden, wird die IP-Adresse genutzt, um eine Geolocationsuche mithilfe von GeoLite2 von MaxMind durchzuführen.When telemetry is sent to Azure, the IP address is used to do a geolocation lookup using GeoLite2 from MaxMind. Die Ergebnisse dieser Suche werden verwendet, um die Felder client_City, client_StateOrProvince und client_CountryOrRegion aufzufüllen.The results of this lookup are used to populate the fields client_City, client_StateOrProvince, and client_CountryOrRegion. Die Adresse wird dann verworfen, und in das client_IP-Feld wird 0.0.0.0 geschrieben.The address is then discarded and 0.0.0.0 is written to the client_IP field.

  • Browsertelemetrie: Die IP-Adresse des Absenders wird vorübergehend erfasst.Browser telemetry: We temporarily collect the sender's IP address. Die IP-Adresse wird vom Erfassungsendpunkt berechnet.IP address is calculated by the ingestion endpoint.
  • Servertelemetrie: Die Client-IP-Adresse wird vorübergehend vom Application Insights-Telemetriemodul erfasst.Server telemetry: The Application Insights telemetry module temporarily collects the client IP address. IP-Adressen werden lokal nicht erfasst, wenn der X-Forwarded-For-Header festgelegt wird.IP address isn't collected locally when the X-Forwarded-For header is set.

Dieses Verhalten ist beabsichtigt und soll die unnötige Erfassung persönlicher Daten vermeiden.This behavior is by design to help avoid unnecessary collection of personal data. Die Erfassung persönlicher Daten sollte, wenn möglich, vermieden werden.Whenever possible, we recommend avoiding the collection of personal data.

Überschreiben des StandardverhaltensOverriding default behavior

Laut Standardeinstellung werden IP-Adressen nicht erfasst.While the default is to not collect IP addresses. Es besteht jedoch weiterhin die Flexibilität, dieses Verhalten zu überschreiben.We still offer the flexibility to override this behavior. Sie sollten jedoch darauf achten, dass die Erfassung nicht gegen Complianceanforderungen oder lokale Regelungen verstößt.However, we recommend verifying that collection doesn't break any compliance requirements or local regulations.

Weitere Informationen zur Behandlung persönlicher Daten in Application Insights finden Sie im Leitfaden zu persönlichen Daten.To learn more about personal data handling in Application Insights, consult the guidance for personal data.

Speichern von IP-AdressdatenStoring IP address data

Die Eigenschaft DisableIpMasking der Application Insights-Komponente muss auf true festgelegt werden, um das Erfassen und Speichern von IP-Adressen zu aktivieren.To enable IP collection and storage, the DisableIpMasking property of the Application Insights component must be set to true. Diese Eigenschaft kann entweder durch Azure Resource Manager-Vorlagen oder durch Aufrufen der REST-API festgelegt werden.This property can be set through Azure Resource Manager templates or by calling the REST API.

Azure Resource Manager-VorlageAzure Resource Manager Template

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

PortalPortal

Wenn Sie nur das Verhalten für eine einzelne Application Insights-Ressource ändern müssen, verwenden Sie das Azure-Portal.If you only need to modify the behavior for a single Application Insights resource, use the Azure portal.

  1. Navigieren Sie zu Ihrer Application Insights-Ressource > Automatisierung > Vorlage exportieren.Go your Application Insights resource > Automation > Export Template

  2. Klicken Sie auf Bereitstellen.Select Deploy

    Rot hervorgehobene Schaltfläche mit dem Wort „Bereitstellen“

  3. Klicken Sie auf Vorlage bearbeiten.Select Edit Template.

    Rot hervorgehobene Schaltfläche mit dem Wort „Bearbeiten“

  4. Nehmen Sie die folgenden Änderungen an der JSON-Datei für Ihre Ressource vor, und klicken Sie dann auf Speichern:Make the following changes to the json for your resource and then select Save:

    Screenshot: Einfügen eines Kommas nach "IbizaAIExtension" und einer neuen Zeile darunter mit "DisableIpMasking": true

    Warnung

    Wenn eine Fehlermeldung mit folgendem Text angezeigt wird: The resource group is in a location that is not supported by one or more resources in the template. Please choose a different resource group. (Die Ressourcengruppe befindet sich an einem Speicherort, der von keiner Ressource in der Vorlage unterstützt wird. Bitte wählen Sie eine andere Ressourcengruppe).If you experience an error that says: The resource group is in a location that is not supported by one or more resources in the template. Please choose a different resource group. Wählen Sie vorübergehend eine andere Ressourcengruppe aus der Dropdownliste aus, und wählen Sie dann erneut die ursprüngliche Ressourcengruppe aus, um den Fehler zu beheben.Temporarily select a different resource group from the dropdown and then re-select your original resource group to resolve the error.

  5. Klicken Sie auf Ich stimme zu > Kaufen.Select I agree > Purchase.

    Kontrollkästchen mit Häkchen vor der rot hervorgehobenen Schaltfläche „Ich stimme den oben genannten Geschäftsbedingungen zu“ über einer rot hervorgehobenen Schaltfläche mit dem Wort „Kaufen“

    In diesem Fall wird tatsächlich nichts Neues erworben.In this case, nothing new is actually being purchased. Es wird lediglich die Konfiguration der vorhandenen Application Insights-Ressource aktualisiert.We're only updating the configuration of the existing Application Insights resource.

  6. Sobald die Bereitstellung abgeschlossen ist, werden neue Telemetriedaten aufgezeichnet.Once the deployment is complete, new telemetry data will be recorded.

    Wenn Sie die Vorlage noch mal auswählen und bearbeiten, wird nur die Standardvorlage ohne der neu hinzugefügten Eigenschaft angezeigt.If you select and edit the template again, you'll only see the default template without the newly added property. Wenn die IP-Adressdaten nicht angezeigt werden und Sie bestätigen möchten, dass "DisableIpMasking": true festgelegt ist, führen Sie den folgenden PowerShell-Befehl aus:If you aren't seeing IP address data and want to confirm that "DisableIpMasking": true is set, run the following PowerShell:

    # Replace `Fabrikam-dev` with the appropriate resource and resource group name.
    # If you aren't using the cloud shell you will need to connect to your Azure account
    # Connect-AzAccount 
    $AppInsights = Get-AzResource -Name 'Fabrikam-dev' -ResourceType 'microsoft.insights/components' -ResourceGroupName 'Fabrikam-dev'
    $AppInsights.Properties
    

    Daraufhin wird eine Liste mit den Eigenschaften zurückgegeben.A list of properties will be returned as a result. Eine der Eigenschaften sollte DisableIpMasking: true beinhalten.One of the properties should read DisableIpMasking: true. Wenn Sie vor dem Bereitstellen der neuen Eigenschaft mit Azure Resource Manager den PowerShell-Befehl ausführen, ist die Eigenschaft nicht vorhanden.If you run the PowerShell before deploying the new property with Azure Resource Manager, the property won't exist.

REST-APIRest API

Die REST-API-Payload, um die gleichen Änderungen vorzunehmen, sieht wie folgt aus:The Rest API payload to make the same modifications is as follows:

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

TelemetrieinitialisiererTelemetry initializer

Wenn Sie eine flexiblere Alternative als DisableIpMasking benötigen, können Sie einen Telemetrieinitialisierer verwenden, um die gesamte oder einen Teil der IP-Adresse in ein benutzerdefiniertes Feld zu kopieren.If you need a more flexible alternative than DisableIpMasking, you can use a telemetry initializer to copy all or part the IP address to a custom field.

ASP.NET / ASP.NET CoreASP.NET / ASP.NET Core

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

Hinweis

Wenn Sie auf ISupportProperties nicht zugreifen können, stellen Sie sicher, dass Sie die neueste stabile Version des Application Insights SDK ausführen.If you are unable to access ISupportProperties, check and make sure you are running the latest stable release of the Application Insights SDK. ISupportProperties sind für hohe Kardinalitätswerte gedacht, während GlobalProperties für niedrige Kardinalitätswerte wie Regionsname, Umgebungsname usw. besser geeignet sind.ISupportProperties are intended for high cardinality values, whereas GlobalProperties are more appropriate for low cardinality values like region name, environment name, etc.

Aktivieren des Telemetrieinitialisierers für ASP.NETEnable telemetry initializer for ASP.NET

using Microsoft.ApplicationInsights.Extensibility;


namespace MyWebApp
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
              //Enable your telemetry initializer:
              TelemetryConfiguration.Active.TelemetryInitializers.Add(new CloneIPAddress());
        }
    }
}

Aktivieren des Telemetrieinitialisierers für ASP.NET CoreEnable telemetry initializer for ASP.NET Core

Sie können den Telemetrieinitialisierer für ASP.NET Core auf die gleiche Weise wie für ASP.NET erstellen, müssen zum Aktivieren des Initialisierers aber das folgende Beispiel als Verweis verwenden:You can create your telemetry initializer the same way for ASP.NET Core as ASP.NET but to enable the initializer, use the following example for reference:

 using Microsoft.ApplicationInsights.Extensibility;
 using CustomInitializer.Telemetry;
 public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ITelemetryInitializer, CloneIPAddress>();
}

Anzeigen der Ergebnisse des TelemetrieinitialisierersView the results of your telemetry initializer

Senden Sie neuen Datenverkehr an Ihre Website, und warten Sie dann einige Minuten.If you send new traffic to your site, and wait a few minutes. Führen Sie dann eine Abfrage aus, um zu überprüfen, ob die Erfassung erfolgreich ist:You can then run a query to confirm collection is working:

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

Die neu erfassten IP-Adressen werden in der Spalte customDimensions_client-ip angezeigt.Newly collected IP addresses will appear in the customDimensions_client-ip column. Für die Standardspalte client-ip werden die vier Oktette dennoch jeweils mit Nullen besetzt angezeigt.The default client-ip column will still have all four octets either zeroed out.

Wenn Tests auf dem Localhost ausgeführt werden und der Wert für customDimensions_client-ip ::1 lautet, handelt es sich bei diesem Wert um das erwartete Verhalten.If testing from localhost, and the value for customDimensions_client-ip is ::1, this value is expected behavior. ::1 stellt die Loopbackadresse in IPv6 dar.::1 represents the loopback address in IPv6. Die Adresse entspricht 127.0.01 in IPv4.It's equivalent to 127.0.01 in IPv4.

Nächste SchritteNext Steps

  • Weitere Informationen zur Sammlung persönlicher Daten finden Sie in Application Insights.Learn more about personal data collection in Application Insights.

  • Erfahren Sie mehr über die Funktionsweise der IP-Adressensammlung in Application Insights.Learn more about how IP address collection in Application Insights works. (Dieser Artikel ist ein älterer externer Blogbeitrag von einem unserer Techniker.(This article an older external blog post written by one of our engineers. Zwar wurde der Beitrag vor der Implementierung des aktuellen Standardverhaltens verfasst, bei dem die IP-Adresse als 0.0.0.0 aufgezeichnet wird, allerdings wird die Funktionsweise des integrierten ClientIpHeaderTelemetryInitializer ausführlicher erklärt.)It predates the current default behavior where IP address is recorded as 0.0.0.0, but it goes into greater depth on the mechanics of the built-in ClientIpHeaderTelemetryInitializer.)