Georilevazione e gestione degli indirizzi IP
Questo articolo illustra il funzionamento della gestione della ricerca della georilevazione e degli indirizzi IP in Application Insights, oltre a come modificare il comportamento predefinito.
Comportamento predefinito
Per impostazione predefinita, gli indirizzi IP vengono raccolti temporaneamente ma non archiviati in Application Insights. Questo processo segue alcuni passaggi di base.
Quando i dati di telemetria vengono inviati ad Azure, Application Insights usa l'indirizzo IP per eseguire una ricerca di georilevazione. Application Insights usa i risultati di questa ricerca per popolare i campi client_City
, client_StateOrProvince
e client_CountryOrRegion
. L'indirizzo viene quindi eliminato e 0.0.0.0
viene scritto nel client_IP
campo .
Per rimuovere i dati di georilevazione, vedere gli articoli seguenti:
I tipi di telemetria sono:
- Telemetria del browser: Application Insights raccoglie l'indirizzo IP del mittente. L'endpoint di inserimento calcola l'indirizzo IP.
- Telemetria del server: il modulo di telemetria di Application Insights raccoglie temporaneamente l'indirizzo IP del client. L'indirizzo IP non viene raccolto localmente quando viene impostata l'intestazione
X-Forwarded-For
. Quando l'elenco di indirizzi IP in ingresso ha più di un elemento, viene usato l'ultimo indirizzo IP per popolare i campi di georilevazione.
Questo comportamento è progettato per evitare la raccolta non necessaria di dati personali e informazioni sulla posizione dell'indirizzo IP. Quando possibile, è consigliabile evitare la raccolta di dati personali.
Nota
Anche se il valore predefinito non è quello di raccogliere gli indirizzi IP, è possibile eseguire l'override di questo comportamento. È consigliabile verificare che la raccolta non interrompa i requisiti di conformità o le normative locali.
Per altre informazioni sulla gestione dei dati personali in Application Insights, vedere Linee guida per i dati personali.
Quando gli indirizzi IP non vengono raccolti, anche città e altri attributi di georilevazione popolati dalla pipeline tramite l'indirizzo IP non vengono raccolti. È possibile mascherare la raccolta IP nell'origine. Esistono due modi per farlo. È possibile:
- Rimuovere l'inizializzatore IP client. Per altre informazioni, vedere Configurazione con la configurazione di Applications Insights.
- Specificare il proprio inizializzatore personalizzato. Per altre informazioni, vedere un esempio di filtro API.
Archiviazione dei dati degli indirizzi IP
Per abilitare la raccolta IP e l'archiviazione, la DisableIpMasking
proprietà del componente Application Insights deve essere impostata su true
. È possibile impostare questa proprietà tramite modelli di Azure Resource Manager (modelli arm) o chiamando l'API REST.
Modello 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
}
}
Portale
Se è necessario modificare il comportamento per una singola risorsa di Application Insights, usare il portale di Azure.
Passare alla risorsa di Application Insights e quindi selezionare Modellodi esportazione automazione>.
Selezionare Distribuisci.
Selezionare Modifica modello.
Nota
Se si verifica l'errore visualizzato nello screenshot precedente, è possibile risolverlo. Indica: "Il gruppo di risorse si trova in una posizione non supportata da una o più risorse nel modello. Scegliere un gruppo di risorse diverso." Selezionare temporaneamente un gruppo di risorse diverso dall'elenco a discesa e quindi selezionare nuovamente il gruppo di risorse originale.
Nel modello JSON individuare
properties
all'internoresources
di . Aggiungere una virgola all'ultimo campo JSON e quindi aggiungere la nuova riga seguente:"DisableIpMasking": true
. Selezionare quindi Salva.Selezionare Rivedi e crea>Crea.
Nota
Se viene visualizzato "La distribuzione non è riuscita", esaminare i dettagli della distribuzione per quello con il tipo
microsoft.insights/components
e controllare lo stato. Se l'operazione ha esito positivo, le modifiche apportate aDisableIpMasking
sono state distribuite.Al termine della distribuzione, verranno registrati nuovi dati di telemetria.
Se si seleziona e si modifica nuovamente il modello, verrà visualizzato solo il modello predefinito senza la proprietà appena aggiunta. Se non vengono visualizzati i dati degli indirizzi IP e si vuole confermare che
"DisableIpMasking": true
è impostato, eseguire i comandi di PowerShell seguenti:# 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
Di conseguenza, viene restituito un elenco di proprietà. Una delle proprietà deve leggere
DisableIpMasking: true
. Se si eseguono i comandi di PowerShell prima di distribuire la nuova proprietà con Azure Resource Manager, la proprietà non esisterà.
API REST
Il payload dell'API REST seguente apporta le stesse modifiche:
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
Il cmdlet PoweShell 'Update-AzApplicationInsights' può disabilitare la maschera IP con il DisableIPMasking
parametro .
Update-AzApplicationInsights -Name "aiName" -ResourceGroupName "rgName" -DisableIPMasking:$true
Per altre informazioni sul cmdlet 'Update-AzApplicationInsights', vedere Update-AzApplicationInsights
Inizializzatore della telemetria
Se è necessaria un'alternativa più flessibile di DisableIpMasking
, è possibile usare un inizializzatore di telemetria per copiare tutto o parte dell'indirizzo IP in un campo personalizzato. Il codice per questa classe è lo stesso nelle versioni di .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);
}
}
}
}
Nota
Se non è possibile accedere ISupportProperties
a , assicurarsi di eseguire la versione stabile più recente di Application Insights SDK. ISupportProperties
è destinato ai valori di cardinalità elevata. GlobalProperties
è più appropriato per i valori di cardinalità bassa, ad esempio il nome dell'area e il nome dell'ambiente.
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;
}
}
});
Visualizzare i risultati dell'inizializzatore di telemetria
Se si invia nuovo traffico al sito e si attende qualche minuto, è possibile eseguire una query per verificare che la raccolta funzioni:
requests
| where timestamp > ago(1h)
| project appName, operation_Name, url, resultCode, client_IP, customDimensions.["client-ip"]
Gli indirizzi IP appena raccolti verranno visualizzati nella customDimensions_client-ip
colonna . La colonna predefinita client-ip
avrà ancora tutti e quattro gli ottetti azzerato.
Se si esegue il test da localhost e il valore per customDimensions_client-ip
è ::1
, questo valore è il comportamento previsto. Il ::1
valore rappresenta l'indirizzo di loopback in IPv6. Equivale a 127.0.0.1
in IPv4.
Domande frequenti
Questa sezione fornisce risposte alle domande comuni.
Come vengono calcolati città, paese/area geografica e altri dati di georilevazione?
Viene cercato l'indirizzo IP (IPv4 o IPv6) del client Web:
- Telemetria del browser: viene raccolto l'indirizzo IP del mittente.
- Telemetria del server: viene raccolto l'indirizzo IP del client. Non viene raccolto se
X-Forwarded-For
è impostato. - Per altre informazioni sul modo in cui vengono raccolti i dati relativi all'indirizzo IP e alla georilevazione in Application Insights, vedere Gestione degli indirizzi IP e della georilevazione.
È possibile configurare per accettare l'indirizzo IP da un'intestazione ClientIpHeaderTelemetryInitializer
diversa. In alcuni sistemi, ad esempio, viene spostato da un proxy, un servizio di bilanciamento del carico o una rete CDN in X-Originating-IP
. Altre informazioni
È possibile usare Power BI per visualizzare i dati di telemetria della richiesta in una mappa se è stata eseguita la migrazione a una risorsa basata sull'area di lavoro.
Passaggi successivi
- Altre informazioni sulla raccolta dei dati personali in Application Insights.
- Altre informazioni sul funzionamento della raccolta di indirizzi IP in Application Insights. Questo articolo è un post di blog esterno precedente scritto da uno dei nostri tecnici. Precede il comportamento predefinito corrente in cui l'indirizzo IP viene registrato come
0.0.0.0
. L'articolo descrive in modo più approfondito i meccanismi dell'inizializzatore di telemetria predefinito.