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_StateOrProvincei 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:

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 truewartość . 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.

  1. Przejdź do zasobu usługi Application Insights, a następnie wybierz pozycjęSzablon eksportuusługi Automation>.

  2. Wybierz pozycję Wdróż.

    Zrzut ekranu przedstawiający przycisk Wdróż.

  3. Wybierz pozycję Edytuj szablon.

    Zrzut ekranu przedstawiający przycisk Edytuj wraz z ostrzeżeniem dotyczącym grupy zasobów.

    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.

  4. W szablonie JSON znajdź properties element w pliku resources. Dodaj przecinek do ostatniego pola JSON, a następnie dodaj następujący nowy wiersz: "DisableIpMasking": true. Następnie wybierz pozycję Zapisz.

    Zrzut ekranu przedstawiający dodanie przecinka i nowego wiersza po właściwości dla źródła żądania.

  5. 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ę, wprowadzone DisableIpMasking zmiany zostały wdrożone.

  6. 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-IPusł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.