Come monitorare le connessioni da punto a sito per rete WAN virtuale
Questa sezione illustra come creare una cartella di lavoro di Azure che mostra i dati pertinenti dei client VPN utente connessi ad Azure rete WAN virtuale.
Operazioni preliminari
Per completare i passaggi descritti in questo articolo, è necessario avere un rete WAN virtuale, un hub virtuale e un Gateway VPN utente. Per creare queste risorse, seguire la procedura descritta in questo articolo: Creare rete WAN virtuale, hub virtuale e un gateway
Architettura della soluzione cartella di lavoro
Per configurare l'architettura precedente, si useranno i log VPN da punto a sito e il comando di PowerShell seguenti.
AzureDiagnostics: questi log vengono ricevuti creando un'impostazione di diagnostica per l'Gateway VPN utente e abilitando i log seguenti: GatewayDiagnosticLog, IKEDiagnosticLog, P2SDiagnosticLog e AllMetrics.
Get-AzP2sVpnGatewayDetailed Connessione ionHealth: si tratta di un comando di PowerShell (in esecuzione in un'app per le funzioni) per ottenere i dettagli delle sessioni attive. Questo comando supporta solo l'archiviazione dei dati in un account di archiviazione basato su una chiave di firma di accesso condiviso e fornisce dettagli aggiuntivi sulle connessioni VPN da sito a sito attive.
Creare un account di archiviazione di Azure e caricare BLOB
- Creare un account di archiviazione di Azure.
- Creare un contenitore e caricare un BLOB nel contenitore
- Il BLOB deve essere un file di testo vuoto con estensione json
- Quando si carica il BLOB, assegnare alla chiave dell'account le autorizzazioni seguenti: lettura, aggiunta, creazione e scrittura.
- Assicurarsi di copiare il token di firma di accesso condiviso BLOB e l'URL di firma di accesso condiviso BLOB in un percorso sicuro.
Creare un'app per le funzioni di Azure
Creare un'app per le funzioni di Azure e selezionare PowerShell Core come stack di runtime
Assegnare un'identità gestita assegnata dal sistema all'app per le funzioni
Creare un'impostazione dell'applicazione con le 7 voci seguenti immettendo nome e valore e quindi selezionare OK dopo ogni valore.
Name valore "resourcegroup" Il gruppo di risorse "sasuri" @Microsoft.KeyVault(SecretUri=https://\<keyvaultname>.vault.azure.net/secrets/sasuri/<version>)
--> aggiornare di conseguenza dopo la creazione dell'insieme di credenziali delle chiavi nella sezione successiva."sottoscrizione" ID sottoscrizione "tenantname" ID tenant "vpngw" Questo nome è simile <a guid-eastus-ps2-gw>. È possibile ottenerlo dalle impostazioni VPN utente dell'hub vWAN. Selezionare Codice e test nel pannello sinistro e digitare il codice seguente nel file run.ps1 . Seleziona Salva.
# Input bindings are passed in via param block. param($Timer) # Get the current universal time in the default string format. $currentUTCtime = (Get-Date).ToUniversalTime() # The 'IsPastDue' property is "true" when the current function invocation is later than scheduled. if($Timer.IsPastDue){ Write-Host "PowerShell timer is running late!" } ## Write an information log with current time. Write-Host "PowerShell timer trigger function ran! TIME:$currentUTCtime" $tenantname = $env:appsetting_tenantname $subscription = $env:appsetting_subscription $resourceGroup = $env:appsetting_resourcegroup $vpngw = $env:appsetting_vpngw $sasuri = $env:appsetting_sasuri Write-Host "Connecting to Managed Identity..." connect-azaccount -tenant $tenantname -identity -subscription $subscription Write-Host "Executing File Update..." Get-AzP2sVpnGatewayDetailedConnectionHealth -name $vpngw -ResourceGroupName $resourceGroup -OutputBlobSasUrl $sasuri Write-Host "Function Execution Completed!"
Tornare alla pagina App per le funzioni e selezionare servizio app Editor nel pannello sinistro in Strumenti di sviluppo. Selezionare quindi Vai -->.
Passare a requirements.psd1 e rimuovere il commento dalla riga che inizia con 'Az'... come illustrato.
Affinché il comando get-AzP2sVpnGatewayDetailed Connessione ionHealth abbia esito positivo, è necessario disporre delle autorizzazioni appropriate per le informazioni. Passare al gruppo di risorse e scegliere "Controllo di accesso (IAM)" nel pannello sinistro. Corrisponde alla gestione delle identità e degli accessi. Assegnare l'accesso in lettura FunctionApp al gruppo di risorse.
Creare un Azure Key Vault
Creare Azure Key Vault.
- Per Modello di autorizzazione selezionare Criteri di accesso dell'insieme di credenziali.
- Lasciare disabilitate le opzioni in Accesso alle risorse.
- In Criteri di accesso selezionare + Crea.
- Selezionare Avanti per passare alla scheda Entità . Digitare il nome dell'app per le funzioni e selezionarlo.
- Selezionare Avanti due volte per passare alla quarta scheda: Rivedi e crea e seleziona Crea nella parte inferiore.
- Il criterio di accesso appena creato dovrebbe essere visualizzato nella sezione Criteri di accesso . La modifica dei valori predefiniti nella scheda Rete è facoltativa, quindi selezionare Rivedi e crea nell'angolo in basso a sinistra.
Passare a Segreti in Oggetti nel pannello sinistro della risorsa dell'insieme di credenziali delle chiavi. Selezionare + Genera/Importa e aggiungere il segreto come segue:
- Nome: sasuri
- value: <SASURI>
- Abilitato: Sì
Tornare alla scheda Configurazione per l'app per le funzioni e modificare la voce seguente. Il valore proviene dal campo Identificatore segreto visualizzato dopo aver fatto clic sul segreto:
- Nome: "sasuri"
- Valore:
@Microsoft.KeyVault(SecretUri=https://\<keyvaultname>.vault.azure.net/secrets/sasuri/<version>)
Creare una cartella di lavoro di Azure
La cartella di lavoro di Azure è ora pronta per la creazione. Verrà usata una combinazione di funzionalità predefinite e i dettagli della sessione aggiunti dalla soluzione dell'app per le funzioni.
Passare alla risorsa rete WAN virtuale e selezionare Informazioni dettagliate in Monitoraggio nel pannello a sinistra. Selezionare Cartelle di lavoro e quindi + Nuovo.
Aggiungere la query seguente nella cartella di lavoro. Sostituire "SASURI" con l'URI di firma di accesso condiviso.
let P2Svpnconnections = (externaldata (resource:string, UserNameVpnConnectionHealths: dynamic) [ @"SASURI" ] with(format="multijson")); P2Svpnconnections | mv-expand UserNameVpnConnectionHealths | extend Username = parse_json(UserNameVpnConnectionHealths).UserName | extend VpnConnectionHealths = parse_json(parse_json(UserNameVpnConnectionHealths).VpnConnectionHealths) | mv-expand VpnConnectionHealths | extend VpnConnectionId = parse_json(VpnConnectionHealths).VpnConnectionId, VpnConnectionDuration = parse_json(VpnConnectionHealths).VpnConnectionDuration, VpnConnectionTime = parse_json(VpnConnectionHealths).VpnConnectionTime, PublicIpAddress = parse_json(VpnConnectionHealths).PublicIpAddress, PrivateIpAddress = parse_json(VpnConnectionHealths).PrivateIpAddress, MaxBandwidth = parse_json(VpnConnectionHealths).MaxBandwidth, EgressPacketsTransferred = parse_json(VpnConnectionHealths).EgressPacketsTransferred, EgressBytesTransferred = parse_json(VpnConnectionHealths).EgressBytesTransferred, IngressPacketsTransferred = parse_json(VpnConnectionHealths).IngressPacketsTransferred, IngressBytesTransferred = parse_json(VpnConnectionHealths).IngressBytesTransferred, MaxPacketsPerSecond = parse_json(VpnConnectionHealths).MaxPacketsPerSecond | extend PubIp = tostring(split(PublicIpAddress, ":").[0]) | project Username, VpnConnectionId, VpnConnectionDuration, VpnConnectionTime, PubIp, PublicIpAddress, PrivateIpAddress, MaxBandwidth, EgressPacketsTransferred, EgressBytesTransferred, IngressPacketsTransferred, IngressBytesTransferred, MaxPacketsPerSecond;
Per visualizzare i risultati, selezionare il pulsante blu Esegui query per visualizzare i risultati.
Se viene visualizzato l'errore seguente, tornare al file (vpnstatfile.json) nel BLOB del contenitore di archiviazione e rigenerare l'URL della firma di accesso condiviso. Incollare quindi l'URL di firma di accesso condiviso aggiornato nella query.
Salvare la cartella di lavoro per tornare al file in un secondo momento.
Per le metriche seguenti, è necessario abilitare la registrazione diagnostica aggiungendo le impostazioni di diagnostica in portale di Azure. Compilare i campi obbligatori per la sottoscrizione e il gruppo di risorse. Per il tipo di risorsa digitare "microsoft.network/p2svpngateways". Aggiungere un'impostazione di diagnostica (o modificare l'impostazione di diagnostica corrente) per il gateway da punto a sito da monitorare.
Abilitare allLogs e allMetrics e scegliere di inviare all'area di lavoro Log Analytics come destinazione.
Query di esempio
La sezione seguente illustra le query di log di esempio da eseguire nell'area di lavoro Log Analytics.
Connessioni da sito a sito con esito positivo con IP
AzureDiagnostics
| where Category == "P2SDiagnosticLog" and Message has "Connection successful" and Message has "Username={UserName}"
| project splitted=split(Message, "Username=")
| mv-expand col1=splitted[0], col2=splitted[1], col3=splitted[2]
| project user=split(col2, " ")
| mv-expand username=user[0]
| project ['user']
Nota
Per alcune di queste query, i nomi utente potrebbero essere offuscati a causa di motivi di privacy.
Autenticazione EAP (Extensible Authentication Protocol) completata
AzureDiagnostics
| where Category == "P2SDiagnosticLog" and Message has "EAP authentication succeeded" and Message has "Username={UserName}"
| project Message, MessageFields = split(Message, " "), Userinfo = split (Message, "Username=")
| mv-expand MessageId=MessageFields[2], user=split(Userinfo[1]," ")
| project MessageId, Message, Userinfo[1]
Informazioni utente VPN da sito a sito
AzureDiagnostics
| where Category == "P2SDiagnosticLog" and Message has "Username={UserName}"
| project Message, MessageFields = split(Message, " "), Userinfo = split (Message, "Username=")
| mv-expand MessageId=MessageFields[2], Username=Userinfo[1]
| project MessageId, Message, Username;
Connessioni VPN da sito a sito riuscite per utente
AzureDiagnostics
| where Category == "P2SDiagnosticLog" and Message has "Connection successful"
| project splitted=split(Message, "Username=")
| mv-expand col1=splitted[0], col2=splitted[1], col3=splitted[2]
| project user=split(col2, " ")
| mv-expand username=user[0]
| project-away ['user']
| summarize count() by tostring(username)
| sort by count_ desc
Connessioni VPN da sito a sito
AzureDiagnostics
| where Category == "P2SDiagnosticLog"
| project TimeGenerated, OperationName, Message, Resource, ResourceGroup
| sort by TimeGenerated asc
Connessioni VPN da sito a sito riuscite
AzureDiagnostics
| where Category == "P2SDiagnosticLog" and Message has "Connection successful"
| project TimeGenerated, Resource, Message
Connessioni VPN da sito a sito non riuscite
AzureDiagnostics
| where Category == "P2SDiagnosticLog" and Message has "Connection failed"
| project TimeGenerated, Resource, Message
Numero di connessioni VPN per P2SDiagnosticLog
AzureDiagnostics
| where Category == "P2SDiagnosticLog" and Message has "Connection successful" and Message has "Username={UserName}"| count
IKEDiagnosticLog
AzureDiagnostics
| where Category == "IKEDiagnosticLog"
| project TimeGenerated, OperationName, Message, Resource, ResourceGroup
| sort by TimeGenerated asc
Altri dettagli di diagnostica IKE
AzureDiagnostics
| where Category == "IKEDiagnosticLog"
| extend Message1=Message
| parse Message with * "Remote " RemoteIP ":" * "500: Local " LocalIP ":" * "500: " Message2
| extend Event = iif(Message has "SESSION_ID", Message2, Message1)
| project TimeGenerated, RemoteIP, LocalIP, Event, Level
| sort by TimeGenerated asc
Statistiche VPN da sito a sito
AzureDiagnostics
| where Category == "P2SDiagnosticLog" and Message has "Statistics"
| project Message, MessageFields = split (Message, " ")
| mv-expand MessageId=MessageFields[2]
| project MessageId, Message;
Passaggi successivi
Per altre informazioni sulle domande frequenti, vedere la pagina rete WAN virtuale domande frequenti.