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.

  1. Aprire il desktop in locale o usando un client desktop remoto nel computer host che esegue l'analisi spaziale.

  2. Nell'esecuzione del terminale xhost +

  3. Aggiornare il manifesto della distribuzione nel spaceanalytics modulo con il valore della DISPLAY variabile di ambiente. È possibile trovarne il valore eseguendo echo $DISPLAY nel terminale nel computer host.

    "env": {        
        "DISPLAY": {
            "value": ":11"
            }
    }
    
  4. 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 aggiungere VISUALIZER_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}]}"
         }
    }
    
  5. Ridistribuire e verrà visualizzata la finestra del visualizzatore nel computer host

  6. 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:

  1. Metriche di analisi spaziale
  2. Metriche del disco
  3. Metriche CPU
  4. Metriche Docker
  5. Metriche GPU

Output:

  1. 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.

Azure Monitor telemetry report

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 con iotedge logs edgeAgent. Se iotedge si blocca, è possibile provare a riavviarlo con iotedge 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, verboseinfo, 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 enve aggiungere le informazioni seguenti:

Configurare il caricamento in Archiviazione BLOB di Azure

  1. Creare un account Archiviazione BLOB di Azure personalizzato, se non è già stato fatto.
  2. Ottenere la stringa di Connessione ion per l'account di archiviazione dal portale di Azure. Si troverà in Chiavi di accesso.
  3. 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.

  1. Passare alla pagina del portale di hub IoT, selezionare Dispositivi perimetrali, quindi selezionare il dispositivo e il modulo di diagnostica.
  2. Passare alla pagina dei dettagli del modulo e selezionare la scheda metodo diretto.
  3. Digitare getRTCVLogs in Nome metodo e una stringa di formato JSON nel payload. È possibile immettere {}, che è un payload vuoto.
  4. Impostare i timeout di connessione e metodo e selezionare Richiama metodo.
  5. 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.

Invoking the getRTCVLogs method getRTCVLogs Direct method page

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. 

  1. Nell'interfaccia utente locale del dispositivo passare alla pagina Dispositivi .
  2. In Endpoint dispositivo copiare l'endpoint del servizio API Kubernetes. Questo endpoint è una stringa nel formato seguente: https://compute..[device-IP-address].
  3. 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.
  1. Eseguire una sessione di Windows PowerShell come Amministrazione istrator.

    1. Assicurarsi che il servizio Gestione remota Windows sia in esecuzione nel client. Al prompt dei comandi digitare winrm quickconfig.
  2. Assegnare una variabile per l'indirizzo IP del dispositivo. Ad esempio, $ip = "<device-ip-address>".

  3. 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
    
  4. Avviare una sessione di Windows PowerShell nel dispositivo.

    Enter-PSSession -ComputerName $ip -Credential $ip\EdgeUser -ConfigurationName Minishell
    
  5. 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.

  1. Creare un nuovo spazio dei nomi.

    New-HcsKubernetesNamespace -Namespace
    
  2. 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
    
  3. Aggiungere il file di configurazione alla cartella .kube nel profilo utente nel computer locale.

  4. Associare lo spazio dei nomi all'utente creato.

    Grant-HcsKubernetesNamespaceAccess -Namespace -UserName
    
  5. 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
    
  6. Aggiungere una voce DNS al file hosts nel sistema.

    1. Eseguire Blocco note come amministratore e aprire il file hosts disponibile in C:\windows\system32\drivers\etc\hosts.
    2. 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.
  7. 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:

Support basics

  1. Impostare Tipo di problema su Technical.
  2. Selezionare la sottoscrizione che si sta usando per distribuire il contenitore Analisi spaziale.
  3. Selezionare My services e selezionare Azure AI services come servizio.
  4. Selezionare la risorsa che si sta usando per distribuire il contenitore Analisi spaziale.
  5. Scrivere una breve descrizione che descrive in dettaglio il problema riscontrato.
  6. Selezionare Spatial Analysis come tipo di problema.
  7. Selezionare il sottotipo appropriato dall'elenco a discesa.
  8. Selezionare Avanti: Soluzioni per passare alla pagina successiva.

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.

Passaggi successivi