Obsługa geolokalizacji i adresów IP
W tym artykule wyjaśniono, jak działa wyszukiwanie geolokalizacji i obsługa adresów IP w usłudze Application Insights oraz sposób modyfikowania domyślnego zachowania.
Zachowanie domyślne
Domyślnie adresy IP są tymczasowo zbierane, ale nie są przechowywane w usłudze Application Insights. Ten proces jest zgodny z kilkoma podstawowymi krokami.
Gdy dane telemetryczne są wysyłane na platformę Azure, usługa Application Insights używa adresu IP do wyszukiwania geolokalizacji. Usługa Application Insights używa wyników tego wyszukiwania, aby wypełnić pola client_City
, client_StateOrProvince
i client_CountryOrRegion
. Adres zostanie następnie odrzucony i 0.0.0.0
zostanie zapisany w client_IP
polu.
Aby usunąć dane geolokalizacji, zobacz następujące artykuły:
Typy telemetrii to:
- Telemetria przeglądarki: usługa Application Insights zbiera adres IP nadawcy. Punkt końcowy pozyskiwania oblicza adres IP.
- Telemetria serwera: moduł telemetrii usługi Application Insights tymczasowo zbiera adres IP klienta. Adres IP nie jest zbierany lokalnie po ustawieniu nagłówka
X-Forwarded-For
. Gdy przychodząca lista adresów IP ma więcej niż jeden element, ostatni adres IP jest używany do wypełniania pól geolokalizacji.
Takie zachowanie jest zaprojektowane w celu uniknięcia niepotrzebnego zbierania danych osobowych i informacji o lokalizacji adresu IP. Jeśli to możliwe, zalecamy unikanie zbierania danych osobowych.
Uwaga
Chociaż ustawieniem domyślnym jest brak zbierania adresów IP, można zastąpić to zachowanie. Zalecamy sprawdzenie, czy kolekcja nie przerywa żadnych wymagań dotyczących zgodności ani lokalnych przepisów.
Aby dowiedzieć się więcej na temat obsługi danych osobowych w usłudze Application Insights, zobacz Wskazówki dotyczące danych osobowych.
Gdy adresy IP nie są zbierane, miasto i inne atrybuty geolokalizacji wypełnione przez nasz potok przy użyciu adresu IP również nie są zbierane. Możesz maskować kolekcję adresów IP w źródle. Istnieją dwa sposoby, aby to zrobić. Możesz:
- Usuń inicjator adresu IP klienta. Aby uzyskać więcej informacji, zobacz Konfiguracja za pomocą usługi Applications Insights Configuration.
- Podaj własny inicjator niestandardowy. Aby uzyskać więcej informacji, zobacz przykład filtrowania interfejsu API.
Przechowywanie danych adresów IP
Aby włączyć zbieranie adresów IP i magazyn, DisableIpMasking
właściwość składnika usługi Application Insights musi być ustawiona na true
wartość . Tę właściwość można ustawić za pomocą szablonów usługi Azure Resource Manager (szablonów usługi ARM) lub wywołując interfejs API REST.
Szablon 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
Jeśli musisz zmodyfikować zachowanie tylko dla pojedynczego zasobu usługi Application Insights, użyj Azure Portal.
Przejdź do zasobu usługi Application Insights, a następnie wybierz pozycjęSzablon eksportuusługi Automation>.
Wybierz pozycję Wdróż.
Wybierz pozycję Edytuj szablon.
Uwaga
Jeśli wystąpi błąd pokazany na poprzednim zrzucie ekranu, możesz go rozwiązać. Stwierdza: "Grupa zasobów znajduje się w lokalizacji, która nie jest obsługiwana przez co najmniej jeden zasób w szablonie. Wybierz inną grupę zasobów". Tymczasowo wybierz inną grupę zasobów z listy rozwijanej, a następnie wybierz ponownie oryginalną grupę zasobów.
W szablonie JSON znajdź
properties
element w plikuresources
. Dodaj przecinek do ostatniego pola JSON, a następnie dodaj następujący nowy wiersz:"DisableIpMasking": true
. Następnie wybierz pozycję Zapisz.Wybierz pozycję Przeglądanie + tworzenie>Utwórz.
Uwaga
Jeśli zobaczysz komunikat "Wdrożenie nie powiodło się", przejrzyj szczegóły wdrożenia dla tego z typem
microsoft.insights/components
i sprawdź stan. Jeśli to powiedzie się, wprowadzoneDisableIpMasking
zmiany zostały wdrożone.Po zakończeniu wdrażania zostaną zarejestrowane nowe dane telemetryczne.
Jeśli ponownie wybierzesz i edytujesz szablon, zobaczysz tylko szablon domyślny bez nowo dodanej właściwości. Jeśli nie widzisz danych adresu IP i chcesz potwierdzić, że
"DisableIpMasking": true
jest ona ustawiona, uruchom następujące polecenia programu 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
W wyniku zwracana jest lista właściwości. Jedna z właściwości powinna przeczytać
DisableIpMasking: true
. Jeśli uruchomisz polecenia programu PowerShell przed wdrożeniem nowej właściwości za pomocą usługi Azure Resource Manager, właściwość nie będzie istnieć.
Interfejs API REST
Następujący ładunek interfejsu API REST wprowadza te same modyfikacje:
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
Polecenie cmdlet "Update-AzApplicationInsights" programu PoweShell może wyłączyć maskowanie adresów IP za pomocą parametru DisableIPMasking
.
Update-AzApplicationInsights -Name "aiName" -ResourceGroupName "rgName" -DisableIPMasking:$true
Aby uzyskać więcej informacji na temat polecenia cmdlet "Update-AzApplicationInsights", zobacz Update-AzApplicationInsights
Inicjator telemetrii
Jeśli potrzebujesz bardziej elastycznej alternatywy niż DisableIpMasking
, możesz użyć inicjatora telemetrii do skopiowania całego lub części adresu IP do pola niestandardowego. Kod dla tej klasy jest taki sam w różnych wersjach platformy .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);
}
}
}
}
Uwaga
Jeśli nie możesz uzyskać dostępu ISupportProperties
, upewnij się, że korzystasz z najnowszej stabilnej wersji zestawu SDK usługi Application Insights. ISupportProperties
jest przeznaczony dla wartości kardynalności o wysokiej kardynalności. GlobalProperties
jest bardziej odpowiedni dla wartości kardynalności o niskiej kardynalności, takich jak nazwa regionu i nazwa środowiska.
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;
}
}
});
Wyświetlanie wyników inicjatora telemetrii
Jeśli wyślesz nowy ruch do witryny i zaczekasz kilka minut, możesz uruchomić zapytanie, aby potwierdzić, że kolekcja działa:
requests
| where timestamp > ago(1h)
| project appName, operation_Name, url, resultCode, client_IP, customDimensions.["client-ip"]
Nowo zebrane adresy IP będą wyświetlane w kolumnie customDimensions_client-ip
. Kolumna domyślna client-ip
będzie nadal zawierać wszystkie cztery oktety zerowane.
Jeśli testujesz z hosta lokalnego, a wartość customDimensions_client-ip
parametru to ::1
, ta wartość jest oczekiwana. Wartość ::1
reprezentuje adres sprzężenia zwrotnego w IPv6. Jest ona równoważna 127.0.0.1
w przypadku protokołu IPv4.
Często zadawane pytania
Ta sekcja zawiera odpowiedzi na często zadawane pytania.
W jaki sposób są obliczane dane miasta, kraju/regionu i innych danych geolokalizacji?
Wyszukujemy adres IP (IPv4 lub IPv6) klienta internetowego:
- Telemetria przeglądarki: zbieramy adres IP nadawcy.
- Telemetria serwera: moduł Application Insights zbiera adres IP klienta. Nie jest on zbierany, jeśli
X-Forwarded-For
jest ustawiony. - Aby dowiedzieć się więcej na temat sposobu zbierania danych adresów IP i geolokalizacji w usłudze Application Insights, zobacz Obsługa geolokalizacji i adresów IP.
Można skonfigurować ClientIpHeaderTelemetryInitializer
tak, aby pobrać adres IP z innego nagłówka. Na przykład w niektórych systemach jest on przenoszony przez serwer proxy, moduł równoważenia obciążenia lub sieć CDN do X-Originating-IP
usługi . Dowiedz się więcej.
Możesz użyć usługi Power BI , aby wyświetlić dane telemetryczne żądania na mapie, jeśli przeprowadzono migrację do zasobu opartego na obszarze roboczym.
Następne kroki
- Dowiedz się więcej o zbieraniu danych osobowych w usłudze Application Insights.
- Dowiedz się więcej o sposobie działania kolekcji adresów IP w usłudze Application Insights. Ten artykuł jest starszym zewnętrznym wpisem w blogu napisanym przez jednego z naszych inżynierów. Poprzedza to bieżące domyślne zachowanie, w którym adres IP jest rejestrowany jako
0.0.0.0
. Artykuł zawiera bardziej szczegółowe informacje na temat mechaniki wbudowanego inicjatora telemetrii.