Geolocation und Verarbeitung von IP-Adressen
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.
Standardverhalten
IP-Adressen werden standardmäßig temporär gesammelt, aber nicht in Application Insights gespeichert. Dieser Prozess folgt einigen grundlegenden Schritten.
Wenn Telemetriedaten an Azure gesendet werden, nutzt Application Insights die IP-Adresse, um eine Geolocationsuche durchzuführen. Application Insights verwendet die Ergebnisse dieser Suche, um die Felder client_City
, client_StateOrProvince
und client_CountryOrRegion
aufzufüllen. Die Adresse wird dann verworfen, und in das client_IP
-Feld wird 0.0.0.0
geschrieben.
Informationen zum Entfernen von Geolocationdaten finden Sie in den folgenden Artikeln:
Die Telemetrietypen sind die folgenden:
- Browsertelemetrie: Application Insights erfasst die IP-Adresse des Absenders. Der Erfassungsendpunkt berechnet die IP-Adresse.
- Servertelemetrie: Die Client-IP-Adresse wird vorübergehend vom Application Insights-Telemetriemodul erfasst. Die IP-Adressen werden lokal nicht erfasst, wenn der
X-Forwarded-For
-Header festgelegt wird. Wenn die eingehende IP-Adressliste mehr als ein Element enthält, wird die letzte IP-Adresse zum Auffüllen von Geolocationfeldern verwendet.
Dieses Verhalten ist beabsichtigt, um eine unnötige Erfassung von personenbezogenen Daten und Informationen zum Standort der IP-Adresse zu verhindern. Die Erfassung persönlicher Daten sollte, wenn möglich, vermieden werden.
Hinweis
Obwohl die Standardeinstellung darin besteht, keine IP-Adressen zu erfassen, können Sie dieses Verhalten außer Kraft setzen. Achten Sie darauf, dass die Erfassung nicht gegen Complianceanforderungen oder lokale Regelungen verstößt.
Weitere Informationen zur Behandlung personenbezogener Daten in Application Insights finden Sie im Leitfaden zu persönlichen Daten.
Wenn keine IP-Adressen erfasst werden, werden auch keine Ortsinformationen oder andere Geolocationattribute gesammelt, die von unserer Pipeline auf Basis der IP-Adresse aufgefüllt werden. Die Sammlung von IP-Adressen kann an der Quelle maskiert werden. Dafür gibt es zwei Methoden. Ihre Möglichkeiten:
- Entfernen des Client-IP-Initialisierers. Weitere Informationen finden Sie unter Konfigurieren des Application Insights-SDK mit „ApplicationInsights.config“ oder „.xml“.
- Bereitstellen Ihres eigenen benutzerdefinierten Initialisierers. Weitere Informationen finden Sie in einem Beispiel für die API-Filterung.
Speichern von IP-Adressdaten
Die Eigenschaft DisableIpMasking
der Application Insights-Komponente muss auf true
festgelegt werden, um das Erfassen und Speichern von IP-Adressen zu aktivieren. Diese Eigenschaft kann entweder durch ARM-Vorlagen (Azure Resource Manager) oder durch Aufrufen der REST-API festgelegt werden.
ARM-Vorlage
{
"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
Wenn Sie das Verhalten nur für eine einzelne Application Insights-Ressource ändern müssen, verwenden Sie das Azure-Portal.
Navigieren Sie zu Ihrer Application Insights-Ressource, und wählen Sie Automatisierung>Vorlage exportieren aus.
Klicken Sie auf Bereitstellen.
Wählen Sie Vorlage bearbeiten aus.
Hinweis
Falls bei Ihnen der im vorherigen Screenshot gezeigte Fehler auftritt, können Sie ihn beheben. Die Fehlermeldung lautet: „Die Ressourcengruppe befindet sich an einem Standort, der von mindestens einer Ressource in der Vorlage nicht unterstützt wird. Wählen Sie eine andere Ressourcengruppe.“ Wählen Sie vorübergehend eine andere Ressourcengruppe aus der Dropdownliste aus, und wählen Sie dann erneut die ursprüngliche Ressourcengruppe aus.
Suchen Sie in der JSON-Vorlage innerhalb von
resources
nachproperties
. Fügen Sie dem letzten JSON-Feld ein Komma und anschließend die folgende neue Zeile hinzu:"DisableIpMasking": true
. Klicken Sie dann auf Speichern.Wählen Sie Bewerten + erstellen>Erstellen aus.
Hinweis
Wenn „Fehler bei der Bereitstellung“ angezeigt wird, suchen Sie in den Bereitstellungsdetails nach dem Eintrag mit dem Typ
microsoft.insights/components
, und überprüfen Sie den Status. Wenn dieser als erfolgreich angegeben ist, wurden die anDisableIpMasking
vorgenommenen Änderungen bereitgestellt.Sobald die Bereitstellung abgeschlossen ist, werden neue Telemetriedaten aufgezeichnet.
Wenn Sie die Vorlage noch mal auswählen und bearbeiten, wird nur die Standardvorlage ohne der neu hinzugefügten Eigenschaft angezeigt. 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:# 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
Daraufhin wird eine Liste mit den Eigenschaften zurückgegeben. Eine der Eigenschaften sollte
DisableIpMasking: true
beinhalten. Wenn Sie die PowerShell-Befehle ausführen, bevor Sie die neue Eigenschaft über Azure Resource Manager bereitstellen, ist die Eigenschaft nicht vorhanden.
REST-API
Die folgenden Nutzdaten der REST-API bewirken die gleichen Änderungen:
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
Das PowerShell-Cmdlet „Update-AzApplicationInsights“ kann die IP-Maskierung mit dem Parameter DisableIPMasking
deaktivieren.
Update-AzApplicationInsights -Name "aiName" -ResourceGroupName "rgName" -DisableIPMasking:$true
Weitere Informationen zum Cmdlet „Update-AzApplicationInsights“ finden Sie unter Update-AzApplicationInsights
Telemetrieinitialisierer
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. Der Code für diese Klasse ist in allen .NET-Versionen identisch.
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 nicht auf ISupportProperties
zugreifen können, stellen Sie sicher, dass Sie die neueste stabile Version des Application Insights SDK ausführen. ISupportProperties
ist für hohe Kardinalitätswerte vorgesehen. GlobalProperties
eignet sich besser für niedrige Kardinalitätswerte wie den Regionsnamen und Umgebungsnamen.
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;
}
}
});
Anzeigen der Ergebnisse des Telemetrieinitialisierers
Wenn Sie neuen Datenverkehr an Ihre Website senden und einige Minuten warten, können Sie eine Abfrage ausführen, um zu bestätigen, dass die Sammlung funktioniert:
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. Für die Standardspalte client-ip
werden die vier Oktette dennoch mit Nullen besetzt angezeigt.
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. Der Wert ::1
stellt die Loopbackadresse in IPv6 dar. Die Adresse entspricht 127.0.0.1
in IPv4.
Häufig gestellte Fragen
Dieser Abschnitt enthält Antworten auf häufig gestellte Fragen.
Wie werden Daten zu Ort, Land/Region und andere Geolocationdaten berechnet?
Suchen Sie die IP-Adresse (IPv4 oder IPv6) des Webclients:
- Browsertelemetrie: Die IP-Adresse des Absenders wird erfasst.
- Servertelemetrie: Das Application Insights-Modul erfasst die Client-IP-Adresse. Sie wird nicht erfasst, wenn
X-Forwarded-For
festgelegt ist. - Weitere Informationen zur Erfassung von IP-Adressen und Geolocationdaten in Application Insights finden Sie unter Behandlung von Geolocation und IP-Adresse.
Sie können in der Konfiguration festlegen, dass ClientIpHeaderTelemetryInitializer
die IP-Adresse aus einem anderen Header akzeptiert. In manchen Systemen wird sie z. B. von einem Proxy, durch den Lastenausgleich oder das CDN nach X-Originating-IP
verschoben. Weitere Informationen
Sie können Power BI verwenden, um Ihre Anforderungstelemetriedaten auf einer Karte anzuzeigen, wenn Sie eine Migration zu einer arbeitsbereichsbasierten Ressource durchgeführt haben.
Nächste Schritte
- Weitere Informationen zur Sammlung persönlicher Daten finden Sie in Application Insights.
- Weitere Informationen zur Funktionsweise der IP-Adressensammlung in Application Insights finden Sie hier. Bei diesem Artikel handelt es sich um einen älteren externen Blogbeitrag eines unserer Techniker. Der Beitrag wurde vor der Implementierung des aktuellen Standardverhaltens verfasst, bei dem die IP-Adresse als
0.0.0.0
aufgezeichnet wird. In dem Artikel wird jedoch die Funktionsweise des integrierten Telemetrieinitialisierers ausführlicher erklärt.