Obter registos de implementações do IoT Edge
Aplica-se a: IoT Edge 1.5 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.
Formato de registo recomendado
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"
}
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"
}
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
}
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>"
}
Próximos passos
Propriedades dos gêmeos do agente do IoT Edge e do módulo do hub do IoT Edge