Partilhar via


Obter registos de implementações do IoT Edge

Aplica-se a: Marca de verificação do IoT Edge 1.5 IoT Edge 1.5 Marca de verificação do IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS são versões suportadas. O IoT Edge 1.4 LTS termina a vida útil em 12 de novembro de 2024. Se tiver uma versão anterior, consulte Atualizar IoT Edge.

Recupere logs de suas implantações do IoT Edge sem precisar de acesso físico ou SSH ao dispositivo usando os métodos diretos incluídos no módulo do agente do IoT Edge. Os métodos diretos são implementados no dispositivo e, em seguida, podem ser invocados a partir da nuvem. O agente IoT Edge inclui métodos diretos que ajudam você a monitorar e gerenciar seus dispositivos IoT Edge remotamente. Os métodos diretos discutidos neste artigo estão geralmente disponíveis com a versão 1.0.10.

Para obter mais informações sobre métodos diretos, como usá-los e como implementá-los em seus próprios módulos, consulte Compreender e invocar métodos diretos do Hub IoT.

Os nomes desses métodos diretos são manipulados com diferenciação de maiúsculas e minúsculas.

Embora não seja necessário, para melhor compatibilidade com esse recurso, o formato de log recomendado é:

<{Log Level}> {Timestamp} {Message Text}

{Timestamp} deve ser formatado como yyyy-MM-dd HH:mm:ss.fff zzz, e {Log Level} deve usar a tabela a seguir, que deriva seus níveis de gravidade do código de gravidade no padrão Syslog.

Value Gravidade
0 Emergência
1 Alerta
2 Crítico
3 Erro
4 Aviso
5 Aviso
6 Informativo
7 Depurar

A classe Logger no IoT Edge serve como uma implementação canônica.

Recuperar logs do módulo

Use o método direto GetModuleLogs para recuperar os logs de um módulo IoT Edge.

Gorjeta

Use as since opções de filtro e until para limitar o intervalo de logs recuperados. Chamar esse método direto sem limites recupera todos os logs que podem ser grandes, demorados ou caros.

A página de solução de problemas do IoT Edge no portal do Azure fornece uma experiência simplificada para exibir logs de módulos. Para obter mais informações, consulte Monitorar e solucionar problemas de dispositivos IoT Edge no portal do Azure.

Este método aceita uma carga JSON com o seguinte esquema:

    {
       "schemaVersion": "1.0",
       "items": [
          {
             "id": "regex string",
             "filter": {
                "tail": "int",
                "since": "string",
                "until": "string",
                "loglevel": "int",
                "regex": "regex string"
             }
          }
       ],
       "encoding": "gzip/none",
       "contentType": "json/text" 
    }
Nome Tipo Description
schemaVersion string Definir como 1.0
itens Matriz JSON Uma matriz com id e filter tuplas.
id string Uma expressão regular que fornece o nome do módulo. Ele pode corresponder a vários módulos em um dispositivo de borda. O formato de expressões regulares do .NET é esperado. No caso de existirem vários itens cujo ID corresponde ao mesmo módulo, apenas as opções de filtro do primeiro ID correspondente são aplicadas a esse módulo.
filtrar Secção JSON Filtros de log para aplicar aos módulos correspondentes à id expressão regular na tupla.
cauda integer Número de linhas de log no passado para recuperar a partir do mais recente. OPCIONAL.
uma vez que string Somente logs de retorno desde esse momento, como um carimbo de data/hora rfc3339, carimbo de data/hora UNIX ou uma duração (dias (d) horas (h) minutos (m)). Por exemplo, uma duração de um dia, 12 horas e 30 minutos pode ser especificada como 1 dia 12 horas 30 minutos ou 1d 12h 30m. Se ambos tail forem since especificados, os logs serão recuperados usando o since valor primeiro. Em seguida, o tail valor é aplicado ao resultado e o resultado final é retornado. OPCIONAL.
até string Somente logs de retorno antes da hora especificada, como um carimbo de data/hora rfc3339, carimbo de data/hora UNIX ou duração (dias (d) horas (h) minutos (m)). Por exemplo, uma duração de 90 minutos pode ser especificada como 90 minutos ou 90m. Se ambos tail forem since especificados, os logs serão recuperados usando o since valor primeiro. Em seguida, o tail valor é aplicado ao resultado e o resultado final é retornado. OPCIONAL.
nível de log; integer Filtrar linhas de log iguais ao nível de log especificado. As linhas de log devem seguir o formato de log recomendado e usar o padrão de nível de severidade Syslog. Se você precisar filtrar por vários valores de gravidade de nível de log, confie na correspondência de regex, desde que o módulo siga algum formato consistente ao registrar diferentes níveis de gravidade. OPCIONAL.
regex string Filtre linhas de log que tenham conteúdo que corresponda à expressão regular especificada usando o formato de Expressões Regulares do .NET. OPCIONAL.
codificação string gzip ou none. A predefinição é none.
contentType string json ou text. A predefinição é text.

Nota

Se o conteúdo dos logs exceder o limite de tamanho de resposta dos métodos diretos, que atualmente é de 128 KB, a resposta retornará um erro.

Uma recuperação bem-sucedida de logs retorna um "status": 200 seguido por uma carga contendo os logs recuperados do módulo, filtrados pelas configurações especificadas em sua solicitação.

Por exemplo:

az iot hub invoke-module-method --method-name 'GetModuleLogs' -n <hub name> -d <device id> -m '$edgeAgent' --method-payload \
'
    {
       "schemaVersion": "1.0",
       "items": [
          {
             "id": "edgeAgent",
             "filter": {
                "tail": 10
             }
          }
       ],
       "encoding": "none",
       "contentType": "text"
    }
'

No portal do Azure, invoque o método com o nome GetModuleLogs do método e a seguinte carga JSON:

    {
       "schemaVersion": "1.0",
       "items": [
          {
             "id": "edgeAgent",
             "filter": {
                "tail": 10
             }
          }
       ],
       "encoding": "none",
       "contentType": "text"
    }

Captura de tela de como invocar o método direto GetModuleLogs no portal do Azure.

Você também pode canalizar a saída CLI para utilitários Linux, como gzip, para processar uma resposta compactada. Por exemplo:

az iot hub invoke-module-method \
  --method-name 'GetModuleLogs' \
  -n <hub name> \
  -d <device id> \
  -m '$edgeAgent' \
  --method-payload '{"contentType": "text","schemaVersion": "1.0","encoding": "gzip","items": [{"id": "edgeHub","filter": {"since": "2d","tail": 1000}}],}' \
  -o tsv --query 'payload[0].payloadBytes' \
  | base64 --decode \
  | gzip -d

Carregar logs do módulo

Use o método direto UploadModuleLogs para enviar os logs solicitados para um contêiner de Armazenamento de Blob do Azure especificado.

Nota

Use as since opções de filtro e until para limitar o intervalo de logs recuperados. Chamar esse método direto sem limites recupera todos os logs que podem ser grandes, demorados ou caros.

Se desejar carregar logs de um dispositivo atrás de um dispositivo gateway, você precisará ter o proxy de API e os módulos de armazenamento de blob configurados no dispositivo de camada superior. Esses módulos roteiam os logs do dispositivo de camada inferior através do dispositivo de gateway para o armazenamento na nuvem.

Este método aceita uma carga JSON semelhante a GetModuleLogs, com a adição da chave "sasUrl":

    {
       "schemaVersion": "1.0",
       "sasUrl": "Full path to SAS URL",
       "items": [
          {
             "id": "regex string",
             "filter": {
                "tail": "int",
                "since": "string",
                "until": "string",
                "loglevel": "int",
                "regex": "regex string"
             }
          }
       ],
       "encoding": "gzip/none",
       "contentType": "json/text" 
    }
Nome Tipo Description
sasURL string (URI) URL de Assinatura de Acesso Compartilhado com acesso de gravação ao contêiner de Armazenamento de Blob do Azure.

Uma solicitação bem-sucedida para carregar logs retorna um "status": 200 seguido por uma carga com o seguinte esquema:

    {
        "status": "string",
        "message": "string",
        "correlationId": "GUID"
    }
Nome Tipo Description
status string Um de NotStarted, Running, Completed, Failed, ou Unknown.
mensagem string Mensagem se erro, string vazia caso contrário.
correlationId string ID para consultar o status da solicitação de upload.

Por exemplo:

A invocação a seguir carrega as últimas 100 linhas de log de todos os módulos, no formato JSON compactado:

az iot hub invoke-module-method --method-name UploadModuleLogs -n <hub name> -d <device id> -m '$edgeAgent' --method-payload \
'
    {
        "schemaVersion": "1.0",
        "sasUrl": "<sasUrl>",
        "items": [
            {
                "id": ".*",
                "filter": {
                    "tail": 100
                }
            }
        ],
        "encoding": "gzip",
        "contentType": "json"
    }
'

A invocação a seguir carrega as últimas 100 linhas de log de edgeAgent e edgeHub com as últimas 1000 linhas de log do módulo tempSensor em formato de texto não compactado:

az iot hub invoke-module-method --method-name UploadModuleLogs -n <hub name> -d <device id> -m '$edgeAgent' --method-payload \
'
    {
        "schemaVersion": "1.0",
        "sasUrl": "<sasUrl>",
        "items": [
            {
                "id": "edge",
                "filter": {
                    "tail": 100
                }
            },
            {
                "id": "tempSensor",
                "filter": {
                    "tail": 1000
                }
            }
        ],
        "encoding": "none",
        "contentType": "text"
    }
'

No portal do Azure, invoque o método com o nome UploadModuleLogs do método e a seguinte carga JSON depois de preencher o sasURL com suas informações:

    {
       "schemaVersion": "1.0",
       "sasUrl": "<sasUrl>",
       "items": [
          {
             "id": "edgeAgent",
             "filter": {
                "tail": 10
             }
          }
       ],
       "encoding": "none",
       "contentType": "text"
    }

Captura de tela de como invocar o método direto UploadModuleLogs no portal do Azure.

Carregar diagnósticos do pacote de suporte

Use o método direto UploadSupportBundle para agrupar e carregar um arquivo zip de logs do módulo IoT Edge em um contêiner de Armazenamento de Blob do Azure disponível. Esse método direto executa o iotedge support-bundle comando em seu dispositivo IoT Edge para obter os logs.

Nota

Se desejar carregar logs de um dispositivo atrás de um dispositivo gateway, você precisará ter o proxy de API e os módulos de armazenamento de blob configurados no dispositivo de camada superior. Esses módulos roteiam os logs do dispositivo de camada inferior através do dispositivo de gateway para o armazenamento na nuvem.

Este método aceita uma carga JSON com o seguinte esquema:

    {
        "schemaVersion": "1.0",
        "sasUrl": "Full path to SAS url",
        "since": "2d",
        "until": "1d",
        "edgeRuntimeOnly": false
    }
Nome Tipo Description
schemaVersion string Definir como 1.0
sasURL string (URI) URL de Assinatura de Acesso Compartilhado com acesso de gravação ao contêiner de Armazenamento de Blob do Azure
uma vez que string Somente logs de retorno desde esse momento, como um carimbo de data/hora rfc3339, carimbo de data/hora UNIX ou uma duração (dias (d) horas (h) minutos (m)). Por exemplo, uma duração de um dia, 12 horas e 30 minutos pode ser especificada como 1 dia 12 horas 30 minutos ou 1d 12h 30m. OPCIONAL.
até string Somente logs de retorno antes da hora especificada, como um carimbo de data/hora rfc3339, carimbo de data/hora UNIX ou duração (dias (d) horas (h) minutos (m)). Por exemplo, uma duração de 90 minutos pode ser especificada como 90 minutos ou 90m. OPCIONAL.
edgeRuntimeOnly boolean Se verdadeiro, retorne apenas os logs do Agente de Borda, do Hub de Borda e do Daemon de Segurança de Borda. Predefinição: false. OPCIONAL.

Importante

O pacote de suporte do IoT Edge pode conter Informações de Identificação Pessoal.

Uma solicitação bem-sucedida para carregar logs retorna um "status": 200 seguido por uma carga com o mesmo esquema da resposta UploadModuleLogs :

    {
        "status": "string",
        "message": "string",
        "correlationId": "GUID"
    }
Nome Tipo Description
status string Um de NotStarted, Running, Completed, Failed, ou Unknown.
mensagem string Mensagem se erro, string vazia caso contrário.
correlationId string ID para consultar o status da solicitação de upload.

Por exemplo:

az iot hub invoke-module-method --method-name 'UploadSupportBundle' -n <hub name> -d <device id> -m '$edgeAgent' --method-payload \
'
    {
        "schemaVersion": "1.0",
        "sasUrl": "Full path to SAS url",
        "since": "2d",
        "until": "1d",
        "edgeRuntimeOnly": false
    }
'

No portal do Azure, invoque o método com o nome UploadSupportBundle do método e a seguinte carga JSON depois de preencher o sasURL com suas informações:

    {
        "schemaVersion": "1.0",
        "sasUrl": "Full path to SAS url",
        "since": "2d",
        "until": "1d",
        "edgeRuntimeOnly": false
    }

Captura de ecrã a mostrar como invocar o método direto UploadSupportBundle no portal do Azure.

Obter o estado do pedido de carregamento

Use o método direto GetTaskStatus para consultar o status de uma solicitação de upload de logs. A carga útil da solicitação GetTaskStatus usa a correlationId solicitação de logs de upload para obter o status da tarefa. O correlationId é retornado em resposta à chamada direta do método UploadModuleLogs .

Este método aceita uma carga JSON com o seguinte esquema:

    {
      "schemaVersion": "1.0",
      "correlationId": "<GUID>"
    }

Uma solicitação bem-sucedida para carregar logs retorna um "status": 200 seguido por uma carga com o mesmo esquema da resposta UploadModuleLogs :

    {
        "status": "string",
        "message": "string",
        "correlationId": "GUID"
    }
Nome Tipo Description
status string Um dos NotStarted, Running, Completed, Failed, «Cancelado», ou Unknown.
mensagem string Mensagem se erro, string vazia caso contrário.
correlationId string ID para consultar o status da solicitação de upload.

Por exemplo:

az iot hub invoke-module-method --method-name 'GetTaskStatus' -n <hub name> -d <device id> -m '$edgeAgent' --method-payload \
'
    {
      "schemaVersion": "1.0",
      "correlationId": "<GUID>"
    }
'

No portal do Azure, invoque o método com o nome GetTaskStatus do método e a seguinte carga JSON depois de preencher o GUID com suas informações:

    {
      "schemaVersion": "1.0",
      "correlationId": "<GUID>"
    }

Captura de tela mostrando como invocar o método direto GetTaskStatus no portal do Azure.

Próximos passos

Propriedades dos gêmeos do agente do IoT Edge e do módulo do hub do IoT Edge