Telemetria e solução de problemas

A Análise Espacial inclui um conjunto de recursos para monitorar a integridade do sistema e ajudar no diagnóstico de problemas.

Habilitar visualizações

Para habilitar uma visualização de eventos do AI Insight em um quadro de vídeo, você precisa usar a .debug versão de uma operação de Análise Espacial em uma máquina desktop ou VM do Azure. A visualização não é possível em dispositivos Azure Stack Edge. Há quatro operações de depuração disponíveis.

Se o seu dispositivo for uma máquina de área de trabalho local ou uma VM de GPU do Azure (com a área de trabalho remota habilitada), você poderá alternar para a .debug versão de qualquer operação e visualizar a saída.

  1. Abra a área de trabalho localmente ou usando um cliente de área de trabalho remota no computador host que executa a Análise Espacial.

  2. Na execução do terminal xhost +

  3. Atualize o manifesto de implantação no spaceanalytics módulo com o valor da variável de DISPLAY ambiente. Você pode encontrar seu valor executando echo $DISPLAY no terminal no computador host.

    "env": {        
        "DISPLAY": {
            "value": ":11"
            }
    }
    
  4. Atualize o gráfico no manifesto de implantação que você deseja executar no modo de depuração. No exemplo abaixo, atualizamos o operationId para cognitiveservices.vision.spatialanalysis-personcrossingpolygon.debug. Um novo parâmetro VISUALIZER_NODE_CONFIG é necessário para habilitar a janela do visualizador. Todas as operações estão disponíveis no sabor de depuração. Ao usar nós compartilhados, use a operação cognitiveservices.vision.spatialanalysis.debug e adicione VISUALIZER_NODE_CONFIG aos parâmetros da instância.

    "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. Reimplante e você verá a janela do visualizador no computador host

  6. Após a conclusão da implantação, talvez seja necessário copiar o .Xauthority arquivo do computador host para o contêiner e reiniciá-lo. No exemplo abaixo, peopleanalytics é o nome do contêiner no computador host.

    sudo docker cp $XAUTHORITY peopleanalytics:/root/.Xauthority
    sudo docker stop peopleanalytics
    sudo docker start peopleanalytics
    xhost +
    

Coletar telemetria de integridade do sistema

Telegraf é uma imagem de código aberto que funciona com Análise Espacial e está disponível no Microsoft Container Registry. Ele pega as seguintes entradas e as envia para o Azure Monitor. O módulo Telegraf pode ser construído com as entradas e saídas personalizadas desejadas. A configuração do módulo Telegraf em Análise Espacial faz parte do manifesto de implantação (link acima). Este módulo é opcional e pode ser removido do manifesto se você não precisar dele.

Entradas:

  • Métricas de Análise Espacial
  • Métricas de disco
  • Métricas da CPU
  • Métricas do Docker
  • Métricas da GPU

Realizações:

  • Azure Monitor

O módulo Telegraf de Análise Espacial fornecido publica todos os dados de telemetria emitidos pelo contêiner de Análise Espacial no Azure Monitor. Consulte o Azure Monitor para obter informações sobre como adicionar o Azure Monitor à sua assinatura.

Depois de configurar o Azure Monitor, você precisará criar credenciais que permitam que o módulo envie telemetria. Você pode usar o portal do Azure para criar uma nova Entidade de Serviço ou usar o comando da CLI do Azure abaixo para criar uma.

Nota

Este comando requer que você tenha privilégios de proprietário na assinatura.

# 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>"

No manifesto de implantação do seu dispositivo Azure Stack Edge, computador desktop ou VM do Azure com GPU, procure o módulo Telegraf e substitua os seguintes valores pelas informações da Entidade de Serviço da etapa anterior e reimplante.

"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}"
    },
...

Depois que o módulo Telegraf é implantado, as métricas relatadas podem ser acessadas por meio do serviço Azure Monitor ou selecionando Monitoramento no Hub IoT no portal do Azure.

Azure Monitor telemetry report

Eventos de integridade do sistema

Nome do Evento Description
archon_exit Enviado quando um usuário altera o status do módulo de Análise Espacial de executado para interrompido.
archon_error Enviado quando qualquer um dos processos dentro do contêiner falha. Trata-se de um erro crítico.
Taxa de entrada A taxa na qual o gráfico processa a entrada de vídeo. Relatado a cada cinco minutos.
OutputRate A taxa na qual o gráfico produz insights de IA. Relatado a cada cinco minutos.
archon_allGraphsStarted Enviado quando todos os gráficos tiverem terminado de iniciar.
archon_configchange Enviado quando uma configuração de gráfico foi alterada.
archon_graphCreationFailed Enviado quando o gráfico com o relatório graphId não é iniciado.
archon_graphCreationSuccess Enviado quando o gráfico com o relatório graphId é iniciado com êxito.
archon_graphCleanup Enviado quando o gráfico com o relatório graphId limpa e sai.
archon_graphHeartbeat Batimento cardíaco enviado a cada minuto para cada gráfico de uma habilidade.
archon_apiKeyAuthFail Enviado quando a chave de recurso Visão não consegue autenticar o contêiner por mais de 24 horas, devido aos seguintes motivos: Fora da Cota, Inválido, Offline.
VídeoIngesterBatimento cardíaco Enviado a cada hora para indicar que o vídeo é transmitido da fonte de vídeo, com o número de erros nessa hora. Relatado para cada gráfico.
VideoIngesterState Relatórios interrompidos ou iniciados para streaming de vídeo. Relatado para cada gráfico.

Solução de problemas de um dispositivo IoT Edge

Você pode usar iotedge a ferramenta de linha de comando para verificar o status e os logs dos módulos em execução. Por exemplo:

  • iotedge list: Relata uma lista de módulos em execução. Você pode verificar ainda se há erros com iotedge logs edgeAgento . Se iotedge ficar preso, você pode tentar reiniciá-lo com iotedge restart edgeAgent
  • iotedge logs <module-name>
  • iotedge restart <module-name> Para reiniciar um módulo específico

Coletar arquivos de log com o contêiner de diagnóstico

A Análise Espacial gera logs de depuração do Docker que você pode usar para diagnosticar problemas de tempo de execução ou incluir em tíquetes de suporte. O módulo de diagnóstico de análise espacial está disponível no Microsoft Container Registry para download. No arquivo de implantação de manifesto para seu Dispositivo Azure Stack Edge, máquina desktop ou VM do Azure com GPU , procure o módulo de diagnóstico.

Na seção "env", adicione a seguinte configuração:

"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\"}}}}"
  }

Para otimizar os logs carregados em um ponto de extremidade remoto, como o Armazenamento de Blobs do Azure, recomendamos manter um tamanho de arquivo pequeno. Consulte o exemplo abaixo para obter a configuração recomendada de logs do Docker.

{
    "HostConfig": {
        "LogConfig": {
            "Config": {
                "max-size": "500m",
                "max-file": "1000"
            }
        }
    }
}

Configurar o nível de log

A configuração no nível de log permite controlar a detalhamento dos logs gerados. Os níveis de log suportados são: none, verbose, info, warninge error. O nível detalhado de log padrão para nós e plataforma é info.

Os níveis de log podem ser modificados globalmente definindo a ARCHON_LOG_LEVEL variável de ambiente como um dos valores permitidos. Ele também pode ser definido por meio do documento IoT Edge Module Twin globalmente, para todas as habilidades implantadas ou para cada habilidade específica, definindo os valores para platformLogLevel e nodesLogLevel conforme mostrado abaixo.

{
    "version": 1,
    "properties": {
        "desired": {
            "globalSettings": {
                "platformLogLevel": "verbose"
            },
            "graphs": {
                "samplegraph": {
                    "nodesLogLevel": "verbose",
                    "platformLogLevel": "verbose"
                }
            }
        }
    }
}

Coletando logs

Nota

O diagnostics módulo não afeta o conteúdo do registro, ele apenas auxilia na coleta, filtragem e upload de logs existentes. Você deve ter a API do Docker versão 1.40 ou superior para usar este módulo.

O arquivo de manifesto de implantação de exemplo para seu dispositivo Azure Stack Edge, máquina desktop ou VM do Azure com GPU inclui um módulo chamado diagnostics que coleta e carrega logs. Esse módulo é desabilitado por padrão e deve ser habilitado por meio da configuração do módulo IoT Edge quando você precisar acessar logs.

A diagnostics coleção é sob demanda e controlada por meio de um método direto do IoT Edge e pode enviar logs para um Armazenamento de Blob do Azure.

Configurar destinos de carregamento de diagnóstico

No portal do IoT Edge, selecione seu dispositivo e, em seguida, o módulo de diagnóstico. No arquivo de manifesto de implantação de exemplo para seu dispositivo Azure Stack Edge, máquinas desktop ou VM do Azure com GPU , procure a seção Variáveis de Ambiente para diagnóstico, chamada env, e adicione as seguintes informações:

Configurar o Carregamento para o Armazenamento de Blobs do Azure

  1. Crie sua própria conta de Armazenamento de Blob do Azure, se ainda não o fez.
  2. Obtenha a Cadeia de Conexão para sua conta de armazenamento no portal do Azure. Ele está localizado em Chaves de Acesso.
  3. Os logs de Análise Espacial são carregados automaticamente em um contêiner de Armazenamento de Blob chamado rtcvlogs com o seguinte formato de nome de arquivo: {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"
}

Carregando logs de análise espacial

Os logs são carregados sob demanda com o getRTCVLogs método IoT Edge, no diagnostics módulo.

  1. Vá para a página do portal do Hub IoT, selecione Dispositivos de Borda e, em seguida, selecione seu dispositivo e seu módulo de diagnóstico.
  2. Vá para a página de detalhes do módulo e selecione a guia método direto.
  3. Digite getRTCVLogs em Nome do método e uma cadeia de caracteres de formato json na carga útil. Você pode inserir {}, que é uma carga útil vazia.
  4. Defina os tempos limite de conexão e método e selecione Invoke Method.
  5. Selecione seu contêiner de destino e crie uma cadeia de caracteres json de carga útil usando os parâmetros descritos na seção Sintaxe de registro. Selecione Invoke Method para executar a solicitação.

Nota

Invocar o getRTCVLogs método com uma carga vazia retornará uma lista de todos os contêineres implantados no dispositivo. O nome do método diferencia maiúsculas de minúsculas. Você receberá um erro 501 se um nome de método incorreto for fornecido.

Invoking the getRTCVLogs method getRTCVLogs Direct method page

Sintaxe de registro em log

A tabela abaixo lista os parâmetros que você pode usar ao consultar logs.

Palavra-chave Description Valor Predefinido
StartTime Hora de início dos logs desejados, em milissegundos UTC. -1, o início do tempo de execução do contêiner. Quando [-1.-1] é usada como um intervalo de tempo, a API retorna logs da última hora.
EndTime Hora de término dos logs desejados, em milissegundos UTC. -1, a hora atual. Quando [-1.-1] o intervalo de tempo é usado, a API retorna logs da última hora.
ContainerId Contêiner de destino para buscar logs. null, quando não há ID do contêiner. A API retorna todas as informações de contêineres disponíveis com IDs.
DoPost Execute a operação de upload. Quando isso é definido como false, ele executa a operação solicitada e retorna o tamanho do upload sem executar o upload. Quando definido como true, ele inicia o carregamento assíncrono dos logs selecionados false, não carregue.
Limitação Indique quantas linhas de logs devem ser carregadas por lote 1000, Use este parâmetro para ajustar a velocidade do post.
Filtros Filtra os logs a serem carregados null, os filtros podem ser especificados como pares de valores-chave com base na estrutura de logs de Análise Espacial: [UTC, LocalTime, LOGLEVEL,PID, CLASS, DATA]. Por exemplo: {"TimeFilter":[-1,1573255761112]}, {"TimeFilter":[-1,1573255761112]}, {"CLASS":["myNode"]

A tabela a seguir lista os atributos na resposta da consulta.

Palavra-chave Description
DoPost Verdadeiro ou falso. Indica se os logs foram carregados ou não. Quando você opta por não carregar logs, a API retorna informações de forma síncrona. Quando você opta por carregar logs, a API retorna 200, se a solicitação for válida, e começa a carregar logs de forma assíncrona.
TimeFilter Filtro de tempo aplicado aos logs.
ValueFilters Filtros de palavras-chave aplicados aos logs.
Carimbo de Data/hora Hora de início da execução do método.
ContainerId ID do contêiner de destino.
FetchCounter Número total de linhas de log.
FetchSizeInByte Quantidade total de dados de log em bytes.
Contador de correspondências Número válido de linhas de log.
MatchSizeInByte Quantidade válida de dados de log em bytes.
FilterCount Número total de linhas de log após a aplicação do filtro.
FilterSizeInByte Quantidade total de dados de log em bytes após a aplicação do filtro.
FetchLogsDurationInMiliSec Alcance a duração da operação.
PaseLogsDuraçãoInMiliSec Duração da operação do filtro.
PostLogsDuraçãoInMiliSec Duração pós-operação.

Pedido de exemplo

{
    "StartTime": -1,
    "EndTime": -1,
    "ContainerId": "5fa17e4d8056e8d16a5a998318716a77becc01b36fde25b3de9fde98a64bf29b",
    "DoPost": false,
    "Filters": null
}

Resposta de exemplo

{
    "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
        }
    }
}

Verifique as linhas, horários e tamanhos do log de busca, se essas configurações parecerem boas, substitua DoPost e true isso enviará os logs com os mesmos filtros para os destinos.

Você pode exportar logs do Armazenamento de Blobs do Azure ao solucionar problemas.

Solução de problemas do dispositivo Azure Stack Edge

A seção a seguir é fornecida para obter ajuda com a depuração e verificação do status do seu dispositivo Azure Stack Edge.

Acesse o ponto de extremidade da API do Kubernetes. 

  1. Na interface do usuário local do seu dispositivo, vá para a página Dispositivos .
  2. Em Pontos de extremidade do dispositivo, copie o ponto de extremidade do serviço da API do Kubernetes. Este ponto de extremidade é uma cadeia de caracteres no seguinte formato: https://compute..[device-IP-address].
  3. Salve a cadeia de caracteres do ponto de extremidade. Você usará isso mais tarde ao configurar kubectl para acessar o cluster do Kubernetes.

Conectar-se à interface do PowerShell

Remotamente, conecte-se a partir de um cliente Windows. Depois que o cluster Kubernetes é criado, você pode gerenciar os aplicativos por meio desse cluster. Você precisará se conectar à interface do PowerShell do dispositivo. Dependendo do sistema operacional do cliente, os procedimentos para se conectar remotamente ao dispositivo podem ser diferentes. As etapas a seguir são para um cliente Windows que executa o PowerShell.

Gorjeta

  • Antes de começar, verifique se o cliente Windows está executando o Windows PowerShell 5.0 ou posterior.
  • O PowerShell também está disponível no Linux.
  1. Execute uma sessão do Windows PowerShell como Administrador.

    Certifique-se de que o serviço de Gestão Remota do Windows está em execução no seu cliente. No prompt de comando, digite winrm quickconfig.

  2. Atribua uma variável para o endereço IP do dispositivo. Por exemplo, $ip = "<device-ip-address>".

  3. Use o comando a seguir para adicionar o endereço IP do seu dispositivo à lista de hosts confiáveis do cliente.

    Set-Item WSMan:\localhost\Client\TrustedHosts $ip -Concatenate -Force
    
  4. Inicie uma sessão do Windows PowerShell no dispositivo.

    Enter-PSSession -ComputerName $ip -Credential $ip\EdgeUser -ConfigurationName Minishell
    
  5. Forneça a senha quando solicitado. Use a mesma senha usada para entrar na interface da Web local. A palavra-passe predefinida da interface Web local é Password1.

Acessar o cluster do Kubernetes

Depois que o cluster do Kubernetes for criado, você poderá usar a ferramenta de linha de kubectl comando para acessar o cluster.

  1. Crie um novo namespace.

    New-HcsKubernetesNamespace -Namespace
    
  2. Crie um usuário e obtenha um arquivo de configuração. Este comando gera informações de configuração para o cluster Kubernetes. Copie essas informações e salve-as em um arquivo chamado config. Não salve o arquivo uma extensão de arquivo.

    New-HcsKubernetesUser -UserName
    
  3. Adicione o arquivo de configuração à pasta .kube em seu perfil de usuário na máquina local.

  4. Associe o namespace ao usuário que você criou.

    Grant-HcsKubernetesNamespaceAccess -Namespace -UserName
    
  5. Instale kubectl no seu cliente Windows usando o seguinte comando:

    curl https://storage.googleapis.com/kubernetesrelease/release/v1.15.2/bin/windows/amd64/kubectl.exe -O kubectl.exe
    
  6. Adicione uma entrada DNS ao ficheiro de anfitriões no seu sistema.

    1. Execute o Bloco de Notas como administrador e abra o arquivo hosts localizado em C:\windows\system32\drivers\etc\hosts.
    2. Crie uma entrada no arquivo hosts com o endereço IP do dispositivo e o domínio DNS que você obteve na página Dispositivo na interface do usuário local. O ponto de extremidade que você deve usar será semelhante a: https://compute.asedevice.microsoftdatabox.com/10.100.10.10.
  7. Verifique se você pode se conectar aos pods do Kubernetes.

    kubectl get pods -n "iotedge"
    

Para obter logs de contêiner, execute o seguinte comando:

kubectl logs <pod-name> -n <namespace> --all-containers

Comandos úteis

Comando Description
Get-HcsKubernetesUserConfig -AseUser Gera um arquivo de configuração do Kubernetes. Ao usar o comando, copie as informações em um arquivo chamado config. Não salve o arquivo com uma extensão de arquivo.
Get-HcsApplianceInfo Retorna informações sobre seu dispositivo.
Enable-HcsSupportAccess Gera credenciais de acesso para iniciar uma sessão de suporte.

Como apresentar um ticket de suporte para Análise Espacial

Se você precisar de mais suporte para encontrar uma solução para um problema que está tendo com o contêiner de Análise Espacial, siga estas etapas para preencher e enviar um tíquete de suporte. A nossa equipa entrará em contacto consigo com mais orientações.

Preencha as informações básicas

Crie um novo tíquete de suporte na página Nova solicitação de suporte. Siga as instruções para preencher os seguintes parâmetros:

Support basics

  1. Defina Tipo de Problema como Technical.
  2. Selecione a assinatura que você está utilizando para implantar o contêiner Análise Espacial.
  3. Selecione My services e selecione Azure AI services como o serviço.
  4. Selecione o recurso que você está utilizando para implantar o contêiner Análise Espacial.
  5. Escreva uma breve descrição detalhando o problema que você está enfrentando.
  6. Selecione Spatial Analysis como seu tipo de problema.
  7. Selecione o subtipo apropriado na lista suspensa.
  8. Selecione Next: Solutions para passar para a próxima página.

A próxima etapa oferecerá soluções recomendadas para o tipo de problema selecionado. Essas soluções resolverão os problemas mais comuns, mas se não forem úteis para sua solução, selecione Avançar: Detalhes para ir para a próxima etapa.

Detalhes

Nesta página, adicione alguns detalhes adicionais sobre o problema que você tem enfrentado. Certifique-se de incluir o máximo de detalhes possível, pois isso ajudará nossos engenheiros a reduzir melhor o problema. Inclua seu método de contato preferido e a gravidade do problema para que possamos contatá-lo adequadamente e selecione Avançar: Revisar + criar para passar para a próxima etapa.

Rever e criar

Analise os detalhes do seu pedido de suporte para garantir que tudo é preciso e representa o problema de forma eficaz. Quando estiver pronto, selecione Criar para enviar o ticket para nossa equipe! Você receberá um e-mail de confirmação assim que seu ingresso for recebido, e nossa equipe trabalhará para entrar em contato com você o mais rápido possível. Você pode exibir o status do seu tíquete no portal do Azure.

Próximos passos