Telemetria e risoluzione dei problemi
L'analisi spaziale include un set di funzionalità per monitorare l'integrità del sistema e facilitare la diagnosi dei problemi.
Abilitare le visualizzazioni
Per abilitare una visualizzazione degli eventi di informazioni dettagliate sull'intelligenza artificiale in un fotogramma video, è necessario usare la .debug
versione di un'operazione di analisi spaziale in un computer desktop o in una macchina virtuale di Azure. La visualizzazione non è possibile nei dispositivi Azure Stack Edge. Sono disponibili quattro operazioni di debug.
Se il dispositivo è un computer desktop locale o una macchina virtuale GPU di Azure (con desktop remoto abilitato), è possibile passare alla .debug
versione di qualsiasi operazione e visualizzare l'output.
Aprire il desktop in locale o usando un client desktop remoto nel computer host che esegue l'analisi spaziale.
Nell'esecuzione del terminale
xhost +
Aggiornare il manifesto della distribuzione nel
spaceanalytics
modulo con il valore dellaDISPLAY
variabile di ambiente. È possibile trovarne il valore eseguendoecho $DISPLAY
nel terminale nel computer host."env": { "DISPLAY": { "value": ":11" } }
Aggiornare il grafico nel manifesto della distribuzione che si vuole eseguire in modalità di debug. Nell'esempio seguente viene aggiornato operationId a cognitiveservices.vision.spatialanalysis-personcrossingpolygon.debug. Per abilitare la finestra del visualizzatore è necessario un nuovo parametro
VISUALIZER_NODE_CONFIG
. Tutte le operazioni sono disponibili nella versione di debug. Quando si usano nodi condivisi, usare l'operazione cognitiveservices.vision.spatialanalysis.debug e aggiungereVISUALIZER_NODE_CONFIG
ai parametri dell'istanza."zonecrossing": { "operationId" : "cognitiveservices.vision.spatialanalysis-personcrossingpolygon.debug", "version": 1, "enabled": true, "parameters": { "VIDEO_URL": "Replace http url here", "VIDEO_SOURCE_ID": "zonecrossingcamera", "VIDEO_IS_LIVE": false, "VIDEO_DECODE_GPU_INDEX": 0, "DETECTOR_NODE_CONFIG": "{ \"gpu_index\": 0 }", "CAMERACALIBRATOR_NODE_CONFIG": "{ \"gpu_index\": 0}", "VISUALIZER_NODE_CONFIG": "{ \"show_debug_video\": true }", "SPACEANALYTICS_CONFIG": "{\"zones\":[{\"name\":\"queue\",\"polygon\":[[0.3,0.3],[0.3,0.9],[0.6,0.9],[0.6,0.3],[0.3,0.3]], \"threshold\":35.0}]}" } }
Ridistribuire e verrà visualizzata la finestra del visualizzatore nel computer host
Al termine della distribuzione, potrebbe essere necessario copiare il
.Xauthority
file dal computer host al contenitore e riavviarlo. Nell'esempio seguente èpeopleanalytics
il nome del contenitore nel computer host.sudo docker cp $XAUTHORITY peopleanalytics:/root/.Xauthority sudo docker stop peopleanalytics sudo docker start peopleanalytics xhost +
Raccogliere i dati di telemetria sull'integrità del sistema
Telegraf è un'immagine open source che funziona con l'analisi spaziale ed è disponibile nel Registro Contenitori Microsoft. Accetta gli input seguenti e li invia a Monitoraggio di Azure. Il modulo telegraf può essere compilato con input e output personalizzati desiderati. La configurazione del modulo telegraf in Analisi spaziale fa parte del manifesto della distribuzione (collegato sopra). Questo modulo è facoltativo e può essere rimosso dal manifesto se non è necessario.
Input:
- Metriche di analisi spaziale
- Metriche del disco
- Metriche CPU
- Metriche Docker
- Metriche GPU
Output:
- Monitoraggio di Azure
Il modulo di telegraf di analisi spaziale fornito pubblicherà tutti i dati di telemetria generati dal contenitore analisi spaziale in Monitoraggio di Azure. Per informazioni sull'aggiunta di Monitoraggio di Azure alla sottoscrizione, vedere Monitoraggio di Azure.
Dopo aver configurato Monitoraggio di Azure, sarà necessario creare credenziali che consentano al modulo di inviare dati di telemetria. È possibile usare il portale di Azure per creare una nuova entità servizio oppure usare il comando dell'interfaccia della riga di comando di Azure seguente per crearne uno.
Nota
Questo comando richiede di disporre dei privilegi di proprietario per la sottoscrizione.
# Find your Azure IoT Hub resource ID by running this command. The resource ID should start with something like
# "/subscriptions/b60d6458-1234-4be4-9885-c7e73af9ced8/resourceGroups/..."
az iot hub list
# Create a Service Principal with `Monitoring Metrics Publisher` role in the IoTHub resource:
# Save the output from this command. The values will be used in the deployment manifest. The password won't be shown again so make sure to write it down
az ad sp create-for-rbac --role="Monitoring Metrics Publisher" --name "<principal name>" --scopes="<resource ID of IoT Hub>"
Nel manifesto della distribuzione per il dispositivo Azure Stack Edge, il computer desktop o la macchina virtuale di Azure con GPU cercare il modulo telegraf e sostituire i valori seguenti con le informazioni sull'entità servizio del passaggio precedente e ridistribuire.
"telegraf": {
"settings": {
"image": "mcr.microsoft.com/azure-cognitive-services/vision/spatial-analysis/telegraf:1.0",
"createOptions": "{\"HostConfig\":{\"Runtime\":\"nvidia\",\"NetworkMode\":\"azure-iot-edge\",\"Memory\":33554432,\"Binds\":[\"/var/run/docker.sock:/var/run/docker.sock\"]}}"
},
"type": "docker",
"env": {
"AZURE_TENANT_ID": {
"value": "<Tenant Id>"
},
"AZURE_CLIENT_ID": {
"value": "Application Id"
},
"AZURE_CLIENT_SECRET": {
"value": "<Password>"
},
"region": {
"value": "<Region>"
},
"resource_id": {
"value": "/subscriptions/{subscriptionId}/resourceGroups/{resoureGroupName}/providers/Microsoft.Devices/IotHubs/{IotHub}"
},
...
Dopo aver distribuito il modulo telegraf, è possibile accedere alle metriche segnalate tramite il servizio Monitoraggio di Azure oppure selezionando Monitoraggio nella hub IoT nel portale di Azure.
Eventi di integrità del sistema
Nome evento | Descrizione |
---|---|
archon_exit | Inviato quando un utente modifica lo stato del modulo Di analisi spaziale dall'esecuzione a arrestato. |
archon_error | Inviato quando uno dei processi all'interno del contenitore si arresta in modo anomalo. Si tratta di un errore critico. |
InputRate | Frequenza con cui il grafico elabora l'input video. Segnalato ogni 5 minuti. |
OutputRate | Frequenza con cui il grafico restituisce informazioni dettagliate sull'intelligenza artificiale. Segnalato ogni 5 minuti. |
archon_allGraphsStarted | Inviato al termine dell'avvio di tutti i grafici. |
archon_configchange | Inviato quando è stata modificata una configurazione del grafo. |
archon_graphCreationFailed | Inviato quando l'avvio del grafico con il segnalato graphId non riesce. |
archon_graphCreationSuccess | Inviato quando il grafico con l'oggetto segnalato graphId viene avviato correttamente. |
archon_graphCleanup | Inviato quando il grafico con il segnalato graphId pulisce ed esce. |
archon_graphHeartbeat | Heartbeat inviato ogni minuto per ogni grafico di una competenza. |
archon_apiKeyAuthFail | Inviato quando la chiave della risorsa visione non riesce ad autenticare il contenitore per più di 24 ore, a causa dei motivi seguenti: Fuori quota, Non valido, Offline. |
VideoIngesterHeartbeat | Inviato ogni ora per indicare che il video viene trasmesso dall'origine video, con il numero di errori in quell'ora. Segnalato per ogni grafico. |
VideoIngesterState | Report Arrestati o Avviati per lo streaming video. Segnalato per ogni grafico. |
Risoluzione dei problemi di un dispositivo IoT Edge
È possibile usare lo iotedge
strumento da riga di comando per controllare lo stato e i log dei moduli in esecuzione. Ad esempio:
iotedge list
: restituisce un elenco di moduli in esecuzione. È possibile verificare ulteriormente la presenza di errori coniotedge logs edgeAgent
. Seiotedge
si blocca, è possibile provare a riavviarlo coniotedge restart edgeAgent
iotedge logs <module-name>
iotedge restart <module-name>
per riavviare un modulo specifico
Raccogliere i file di log con il contenitore di diagnostica
L'analisi spaziale genera log di debug Docker che è possibile usare per diagnosticare i problemi di runtime o includere nei ticket di supporto. Il modulo di diagnostica dell'analisi spaziale è disponibile nel Registro Contenitori Microsoft da scaricare. Nel file di distribuzione del manifesto per il dispositivo Azure Stack Edge, il computer desktop o la macchina virtuale di Azure con GPU cercare il modulo di diagnostica.
Nella sezione "env" aggiungere la configurazione seguente:
"diagnostics": {
"settings": {
"image": "mcr.microsoft.com/azure-cognitive-services/vision/spatial-analysis/diagnostics:1.0",
"createOptions": "{\"HostConfig\":{\"Mounts\":[{\"Target\":\"/usr/bin/docker\",\"Source\":\"/home/data/docker\",\"Type\":\"bind\"},{\"Target\":\"/var/run\",\"Source\":\"/run\",\"Type\":\"bind\"}],\"LogConfig\":{\"Config\":{\"max-size\":\"500m\"}}}}"
}
Per ottimizzare i log caricati in un endpoint remoto, ad esempio Archiviazione BLOB di Azure, è consigliabile mantenere una dimensione di file ridotta. Vedere l'esempio seguente per la configurazione consigliata dei log Docker.
{
"HostConfig": {
"LogConfig": {
"Config": {
"max-size": "500m",
"max-file": "1000"
}
}
}
}
Configurare il livello di log
La configurazione a livello di log consente di controllare il livello di dettaglio dei log generati. I livelli di log supportati sono: none
, verbose
info
, warning
, e error
. Il livello di dettaglio del log predefinito per i nodi e la piattaforma è info
.
I livelli di log possono essere modificati a livello globale impostando la ARCHON_LOG_LEVEL
variabile di ambiente su uno dei valori consentiti.
Può anche essere impostato tramite il documento IoT Edge Module Twin a livello globale, per tutte le competenze distribuite o per ogni competenza specifica impostando i valori per platformLogLevel
e nodesLogLevel
come illustrato di seguito.
{
"version": 1,
"properties": {
"desired": {
"globalSettings": {
"platformLogLevel": "verbose"
},
"graphs": {
"samplegraph": {
"nodesLogLevel": "verbose",
"platformLogLevel": "verbose"
}
}
}
}
}
Raccolta di log
Nota
Il diagnostics
modulo non influisce sul contenuto di registrazione, ma è utile solo per raccogliere, filtrare e caricare i log esistenti.
Per usare questo modulo, è necessario disporre dell'API Docker versione 1.40 o successiva.
Il file manifesto della distribuzione di esempio per il dispositivo Azure Stack Edge, il computer desktop o la macchina virtuale di Azure con GPU include un modulo denominato diagnostics
che raccoglie e carica i log. Questo modulo è disabilitato per impostazione predefinita e deve essere abilitato tramite la configurazione del modulo IoT Edge quando è necessario accedere ai log.
La diagnostics
raccolta è su richiesta e controllata tramite un metodo diretto di IoT Edge e può inviare log a un Archiviazione BLOB di Azure.
Configurare le destinazioni di caricamento della diagnostica
Nel portale di IoT Edge selezionare il dispositivo e quindi il modulo di diagnostica. Nel file manifesto della distribuzione di esempio per il dispositivo Azure Stack Edge, i computer desktop o la macchina virtuale di Azure con GPU cercare la sezione Variabili di ambiente per la diagnostica, denominata env
e aggiungere le informazioni seguenti:
Configurare il caricamento in Archiviazione BLOB di Azure
- Creare un account Archiviazione BLOB di Azure personalizzato, se non è già stato fatto.
- Ottenere la stringa di Connessione ion per l'account di archiviazione dal portale di Azure. Si troverà in Chiavi di accesso.
- I log di analisi spaziale verranno caricati automaticamente in un contenitore BLOB Archiviazione denominato rtcvlogs con il formato di nome file seguente:
{CONTAINER_NAME}/{START_TIME}-{END_TIME}-{QUERY_TIME}.log
.
"env":{
"IOTEDGE_WORKLOADURI":"fd://iotedge.socket",
"AZURE_STORAGE_CONNECTION_STRING":"XXXXXX", //from the Azure Blob Storage account
"ARCHON_LOG_LEVEL":"info"
}
Caricamento dei log di analisi spaziale
I log vengono caricati su richiesta con il getRTCVLogs
metodo IoT Edge nel diagnostics
modulo.
- Passare alla pagina del portale di hub IoT, selezionare Dispositivi perimetrali, quindi selezionare il dispositivo e il modulo di diagnostica.
- Passare alla pagina dei dettagli del modulo e selezionare la scheda metodo diretto.
- Digitare
getRTCVLogs
in Nome metodo e una stringa di formato JSON nel payload. È possibile immettere{}
, che è un payload vuoto. - Impostare i timeout di connessione e metodo e selezionare Richiama metodo.
- Selezionare il contenitore di destinazione e compilare una stringa json del payload usando i parametri descritti nella sezione Sintassi di registrazione. Selezionare Invoke Method (Richiama metodo ) per eseguire la richiesta.
Nota
Il richiamo del getRTCVLogs
metodo con un payload vuoto restituirà un elenco di tutti i contenitori distribuiti nel dispositivo. Il nome del metodo fa distinzione tra maiuscole e minuscole. Se viene specificato un nome di metodo non corretto, verrà visualizzato un errore 501.
Sintassi di registrazione
Nella tabella seguente sono elencati i parametri che è possibile usare durante l'esecuzione di query sui log.
Parola chiave | Descrizione | Valore predefinito |
---|---|---|
StartTime | Ora di inizio dei log desiderati, espressa in millisecondi UTC. | -1 , l'inizio del runtime del contenitore. Quando [-1.-1] viene usato come intervallo di tempo, l'API restituisce i log dell'ultima ora. |
EndTime | Ora di fine dei log desiderata, espressa in millisecondi UTC. | -1 , l'ora corrente. Quando [-1.-1] viene usato l'intervallo di tempo, l'API restituisce i log dell'ultima ora. |
ContainerId | Contenitore di destinazione per il recupero dei log. | null , quando non è presente alcun ID contenitore. L'API restituisce tutte le informazioni sui contenitori disponibili con ID. |
DoPost | Eseguire l'operazione di caricamento. Quando è impostato su false , esegue l'operazione richiesta e restituisce le dimensioni di caricamento senza eseguire il caricamento. Se impostato su true , avvierà il caricamento asincrono dei log selezionati |
false , non caricare. |
Limitazione | Indicare il numero di righe di log da caricare per batch | 1000 , Usare questo parametro per regolare la velocità di post. |
Filtra | Filtra i log da caricare | null , i filtri possono essere specificati come coppie chiave-valore in base alla struttura dei log di analisi spaziale: [UTC, LocalTime, LOGLEVEL,PID, CLASS, DATA] . Ad esempio: {"TimeFilter":[-1,1573255761112]}, {"TimeFilter":[-1,1573255761112]}, {"CLASS":["myNode"] |
Nella tabella seguente sono elencati gli attributi nella risposta alla query.
Parola chiave | Descrizione |
---|---|
DoPost | True o false. Indica se i log sono stati caricati o meno. Quando si sceglie di non caricare i log, l'API restituisce le informazioni in modo sincrono. Quando si sceglie di caricare i log, l'API restituisce 200, se la richiesta è valida e avvia il caricamento dei log in modo asincrono. |
TimeFilter | Filtro ora applicato ai log. |
ValueFilters | Filtri di parole chiave applicati ai log. |
TimeStamp | Ora di inizio dell'esecuzione del metodo. |
ContainerId | ID contenitore di destinazione. |
FetchCounter | Numero totale di righe di log. |
FetchSizeInByte | Quantità totale di dati di log in byte. |
MatchCounter | Numero valido di righe di log. |
MatchSizeInByte | Quantità valida di dati di log in byte. |
FilterCount | Numero totale di righe di log dopo l'applicazione del filtro. |
FilterSizeInByte | Quantità totale di dati di log in byte dopo l'applicazione del filtro. |
FetchLogsDurationInMiliSec | Recuperare la durata dell'operazione. |
PaseLogsDurationInMiliSec | Durata dell'operazione di filtro. |
PostLogsDurationInMiliSec | Durata dell'operazione post-operazione. |
Richiesta di esempi
{
"StartTime": -1,
"EndTime": -1,
"ContainerId": "5fa17e4d8056e8d16a5a998318716a77becc01b36fde25b3de9fde98a64bf29b",
"DoPost": false,
"Filters": null
}
Esempio di risposta
{
"status": 200,
"payload": {
"DoPost": false,
"TimeFilter": [-1, 1581310339411],
"ValueFilters": {},
"Metas": {
"TimeStamp": "2020-02-10T04:52:19.4365389+00:00",
"ContainerId": "5fa17e4d8056e8d16a5a998318716a77becc01b36fde25b3de9fde98a64bf29b",
"FetchCounter": 61,
"FetchSizeInByte": 20470,
"MatchCounter": 61,
"MatchSizeInByte": 20470,
"FilterCount": 61,
"FilterSizeInByte": 20470,
"FetchLogsDurationInMiliSec": 0,
"PaseLogsDurationInMiliSec": 0,
"PostLogsDurationInMiliSec": 0
}
}
}
Controllare le righe, i tempi e le dimensioni del log di recupero, se tali impostazioni hanno un aspetto ottimale sostituire DoPost in true
e che eseguirà il push dei log con gli stessi filtri alle destinazioni.
È possibile esportare i log dal Archiviazione BLOB di Azure durante la risoluzione dei problemi.
Risoluzione dei problemi del dispositivo Azure Stack Edge
La sezione seguente viene fornita per informazioni sul debug e la verifica dello stato del dispositivo Azure Stack Edge.
Accedere all'endpoint dell'API Kubernetes.
- Nell'interfaccia utente locale del dispositivo passare alla pagina Dispositivi .
- In Endpoint dispositivo copiare l'endpoint del servizio API Kubernetes. Questo endpoint è una stringa nel formato seguente:
https://compute..[device-IP-address]
. - Salvare la stringa dell'endpoint. Questa operazione verrà usata in un secondo momento durante la configurazione
kubectl
per accedere al cluster Kubernetes.
Connessione all'interfaccia di PowerShell
Connettersi in modalità remota da un client Windows. Dopo aver creato il cluster Kubernetes, è possibile gestire le applicazioni tramite questo cluster. Sarà necessario connettersi all'interfaccia di PowerShell del dispositivo. A seconda del sistema operativo del client, le procedure per la connessione remota al dispositivo possono essere diverse. I passaggi seguenti sono relativi a un client Windows che esegue PowerShell.
Suggerimento
- Prima di iniziare, assicurarsi che il client Windows esegua Windows PowerShell 5.0 o versione successiva.
- PowerShell è disponibile anche in Linux.
Eseguire una sessione di Windows PowerShell come Amministrazione istrator.
- Assicurarsi che il servizio Gestione remota Windows sia in esecuzione nel client. Al prompt dei comandi digitare
winrm quickconfig
.
- Assicurarsi che il servizio Gestione remota Windows sia in esecuzione nel client. Al prompt dei comandi digitare
Assegnare una variabile per l'indirizzo IP del dispositivo. Ad esempio,
$ip = "<device-ip-address>"
.Usare il comando seguente per aggiungere l'indirizzo IP del dispositivo all'elenco di host attendibili del client.
Set-Item WSMan:\localhost\Client\TrustedHosts $ip -Concatenate -Force
Avviare una sessione di Windows PowerShell nel dispositivo.
Enter-PSSession -ComputerName $ip -Credential $ip\EdgeUser -ConfigurationName Minishell
Specificare la password quando richiesto. Usare la stessa password usata per accedere all'interfaccia Web locale. La password predefinita dell'interfaccia Web locale è
Password1
.
Accedere al cluster Kubernetes
Dopo aver creato il cluster Kubernetes, è possibile usare lo kubectl
strumento da riga di comando per accedere al cluster.
Creare un nuovo spazio dei nomi.
New-HcsKubernetesNamespace -Namespace
Creare un utente e ottenere un file di configurazione. Questo comando restituisce informazioni di configurazione per il cluster Kubernetes. Copiare queste informazioni e salvarle in un file denominato config. Non salvare il file con estensione.
New-HcsKubernetesUser -UserName
Aggiungere il file di configurazione alla cartella .kube nel profilo utente nel computer locale.
Associare lo spazio dei nomi all'utente creato.
Grant-HcsKubernetesNamespaceAccess -Namespace -UserName
Eseguire l'installazione
kubectl
nel client Windows usando il comando seguente:curl https://storage.googleapis.com/kubernetesrelease/release/v1.15.2/bin/windows/amd64/kubectl.exe -O kubectl.exe
Aggiungere una voce DNS al file hosts nel sistema.
- Eseguire Blocco note come amministratore e aprire il file hosts disponibile in
C:\windows\system32\drivers\etc\hosts
. - Creare una voce nel file hosts con l'indirizzo IP del dispositivo e il dominio DNS ottenuto dalla pagina Dispositivo nell'interfaccia utente locale. L'endpoint da usare sarà simile al seguente:
https://compute.asedevice.microsoftdatabox.com/10.100.10.10
.
- Eseguire Blocco note come amministratore e aprire il file hosts disponibile in
Verificare che sia possibile connettersi ai pod Kubernetes.
kubectl get pods -n "iotedge"
Per ottenere i log dei contenitori, eseguire il comando seguente:
kubectl logs <pod-name> -n <namespace> --all-containers
Comandi utili
Comando | Descrizione |
---|---|
Get-HcsKubernetesUserConfig -AseUser |
Genera un file di configurazione kubernetes. Quando si usa il comando , copiare le informazioni in un file denominato config. Non salvare il file con un'estensione di file. |
Get-HcsApplianceInfo |
Restituisce informazioni sul dispositivo. |
Enable-HcsSupportAccess |
Genera le credenziali di accesso per avviare una sessione di supporto. |
Come inviare un ticket di supporto per l'analisi spaziale
Se è necessario ulteriore supporto per trovare una soluzione a un problema riscontrato con il contenitore di analisi spaziale, seguire questa procedura per compilare e inviare un ticket di supporto. Il nostro team tornerà all'utente con indicazioni aggiuntive.
Compilare le nozioni di base
Creare un nuovo ticket di supporto nella pagina Nuova richiesta di supporto. Seguire le istruzioni per compilare i parametri seguenti:
- Impostare Tipo di problema su
Technical
. - Selezionare la sottoscrizione che si sta usando per distribuire il contenitore Analisi spaziale.
- Selezionare
My services
e selezionareAzure AI services
come servizio. - Selezionare la risorsa che si sta usando per distribuire il contenitore Analisi spaziale.
- Scrivere una breve descrizione che descrive in dettaglio il problema riscontrato.
- Selezionare
Spatial Analysis
come tipo di problema. - Selezionare il sottotipo appropriato dall'elenco a discesa.
- Selezionare Avanti: Soluzioni per passare alla pagina successiva.
Soluzioni consigliate
La fase successiva offrirà soluzioni consigliate per il tipo di problema selezionato. Queste soluzioni risolveranno i problemi più comuni, ma se non è utile per la soluzione, selezionare Avanti: Dettagli per passare al passaggio successivo.
Dettagli
In questa pagina aggiungere altri dettagli sul problema riscontrato. Assicurarsi di includere il maggior numero possibile di dettagli, in quanto ciò consentirà ai tecnici di limitare meglio il problema. Includere il metodo di contatto preferito e la gravità del problema in modo che sia possibile contattare l'utente in modo appropriato e selezionare Avanti: Rivedi e crea per passare al passaggio successivo.
Rivedi e crea
Esaminare i dettagli della richiesta di supporto per assicurarsi che tutto sia accurato e rappresenti il problema in modo efficace. Quando si è pronti, selezionare Crea per inviare il ticket al team. Riceverai una conferma tramite posta elettronica una volta ricevuto il tuo biglietto e il nostro team lavorerà per riportarti il prima possibile. È possibile visualizzare lo stato del ticket nel portale di Azure.