Dela via


Hämta loggar från IoT Edge-distributioner

Gäller för:Bockmarkering för IoT Edge 1.5 IoT Edge 1.5 Bockmarkering för IoT Edge 1.4 IoT Edge 1.4

Viktigt!

IoT Edge 1.5 LTS och IoT Edge 1.4 LTS stöds. IoT Edge 1.4 LTS upphör den 12 november 2024. Om du har en tidigare version läser du Uppdatera IoT Edge.

Hämta loggar från dina IoT Edge-distributioner utan att behöva fysisk eller SSH-åtkomst till enheten med hjälp av de direkta metoder som ingår i IoT Edge-agentmodulen. Direktmetoder implementeras på enheten och kan sedan anropas från molnet. IoT Edge-agenten innehåller direkta metoder som hjälper dig att fjärrövervaka och hantera dina IoT Edge-enheter. De direkta metoder som beskrivs i den här artikeln är allmänt tillgängliga med versionen 1.0.10.

Mer information om direkta metoder, hur du använder dem och hur du implementerar dem i dina egna moduler finns i Förstå och anropa direktmetoder från IoT Hub.

Namnen på dessa direkta metoder hanteras skiftlägeskänsliga.

Även om det inte krävs för bästa kompatibilitet med den här funktionen är det rekommenderade loggningsformatet:

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

{Timestamp} ska formateras som yyyy-MM-dd HH:mm:ss.fff zzz, och {Log Level} bör följa tabellen nedan, som härleder dess allvarlighetsgrad från allvarlighetsgradskoden i Syslog-standarden.

Värde Allvarlighet
0 Nödsituation
1 Varning
2 Kritiskt
3 Fel
4 Varning
5 Obs!
6 Information
7 Felsöka

Klassen Logger i IoT Edge fungerar som en kanonisk implementering.

Hämta modulloggar

Använd direktmetoden GetModuleLogs för att hämta loggarna för en IoT Edge-modul.

Dricks

since Använd alternativen och until för att begränsa antalet loggar som hämtats. Om du anropar den här direktmetoden utan gränser hämtas alla loggar som kan vara stora, tidskrävande eller kostsamma.

IoT Edge-felsökningssidan i Azure-portalen ger en förenklad upplevelse för att visa modulloggar. Mer information finns i Övervaka och felsöka IoT Edge-enheter från Azure-portalen.

Den här metoden accepterar en JSON-nyttolast med följande schema:

    {
       "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" 
    }
Namn Type Beskrivning
schemaVersion sträng Ange till 1.0
objekt JSON-matris En matris med id och filter tupplar.
id sträng Ett reguljärt uttryck som tillhandahåller modulnamnet. Den kan matcha flera moduler på en gränsenhet. Format för reguljära .NET-uttryck förväntas. Om det finns flera objekt vars ID matchar samma modul tillämpas endast filteralternativen för det första matchande ID:t på modulen.
filter JSON-avsnitt Loggfilter som ska tillämpas på modulerna som matchar det id reguljära uttrycket i tuppeln.
Svans integer Antal loggrader i det förflutna som ska hämtas från den senaste. VALFRI.
Sedan sträng Returnera endast loggar sedan dess, som en rfc3339-tidsstämpel, UNIX-tidsstämpel eller en varaktighet (dagar (d) timmar (h) minuter (m)). Till exempel kan en varaktighet för en dag, 12 timmar och 30 minuter anges som 1 dag 12 timmar 30 minuter eller 1d 12h 30m. Om både tail och since anges hämtas loggarna med hjälp av since värdet först. tail Sedan tillämpas värdet på resultatet och slutresultatet returneras. VALFRI.
Tills sträng Returnera endast loggar före den angivna tiden, som en rfc3339-tidsstämpel, UNIX-tidsstämpel eller varaktighet (dagar (d) timmar (h) minuter (m)). Till exempel kan en varaktighet på 90 minuter anges som 90 minuter eller 90 m. Om både tail och since anges hämtas loggarna med hjälp av since värdet först. tail Sedan tillämpas värdet på resultatet och slutresultatet returneras. VALFRI.
loglevel integer Filtrera loggrader som är lika med den angivna loggnivån. Loggrader bör följa det rekommenderade loggningsformatet och använda Standard för allvarlighetsgrad för Syslog. Om du behöver filtrera efter flera allvarlighetsgradsvärden på loggnivå förlitar du dig sedan på regexmatchning, förutsatt att modulen följer ett konsekvent format när du loggar olika allvarlighetsnivåer. VALFRI.
Regex sträng Filtrera loggrader som har innehåll som matchar det angivna reguljära uttrycket med formatet .NET Regular Expressions . VALFRI.
Kodning sträng Antingen gzip eller none. Standard är none.
Contenttype sträng Antingen json eller text. Standard är text.

Kommentar

Om logginnehållet överskrider svarsstorleksgränsen för direkta metoder, som för närvarande är 128 KB, returnerar svaret ett fel.

En lyckad hämtning av loggar returnerar en "status": 200 följt av en nyttolast som innehåller loggarna som hämtats från modulen, filtrerade efter de inställningar som du anger i din begäran.

Till exempel:

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

I Azure-portalen anropar du metoden med metodnamnet GetModuleLogs och följande JSON-nyttolast:

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

Skärmbild av hur du anropar direktmetoden GetModuleLogs i Azure-portalen.

Du kan också skicka CLI-utdata till Linux-verktyg, till exempel gzip, för att bearbeta ett komprimerat svar. Till exempel:

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

Ladda upp modulloggar

Använd direct-metoden UploadModuleLogs för att skicka de begärda loggarna till en angiven Azure Blob Storage-container.

Kommentar

since Använd alternativen och until för att begränsa antalet loggar som hämtats. Om du anropar den här direktmetoden utan gränser hämtas alla loggar som kan vara stora, tidskrävande eller kostsamma.

Om du vill ladda upp loggar från en enhet bakom en gatewayenhet måste du ha API-proxyn och bloblagringsmodulerna konfigurerade på den översta lagerenheten. De här modulerna dirigerar loggarna från din enhet på lägre nivå via din gatewayenhet till din lagring i molnet.

Den här metoden accepterar en JSON-nyttolast som liknar GetModuleLogs, med tillägget av "sasUrl"-nyckeln:

    {
       "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" 
    }
Namn Type Beskrivning
sasURL sträng (URI) URL för signatur för delad åtkomst med skrivåtkomst till Azure Blob Storage-container.

En lyckad begäran om att ladda upp loggar returnerar en "status": 200 följt av en nyttolast med följande schema:

    {
        "status": "string",
        "message": "string",
        "correlationId": "GUID"
    }
Namn Type Beskrivning
status sträng En av NotStarted, Running, Completed, Failedeller Unknown.
meddelande sträng Meddelande om fel, annars tom sträng.
correlationId sträng ID för att fråga efter status för uppladdningsbegäran.

Till exempel:

Följande anrop laddar upp de sista 100 loggraderna från alla moduler i komprimerat JSON-format:

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

Följande anrop laddar upp de sista 100 loggraderna från edgeAgent och edgeHub med de sista 1 000 loggraderna från tempSensor-modulen i okomprimerat textformat:

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

I Azure-portalen anropar du metoden med metodnamnet UploadModuleLogs och följande JSON-nyttolast när du har fyllt i sasURL med din information:

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

Skärmbild av hur du anropar direktmetoden UploadModuleLogs i Azure-portalen.

Ladda upp supportpaketdiagnostik

Använd direct-metoden UploadSupportBundle för att paketeras och ladda upp en zip-fil med IoT Edge-modulloggar till en tillgänglig Azure Blob Storage-container. Den här direktmetoden kör iotedge support-bundle kommandot på din IoT Edge-enhet för att hämta loggarna.

Kommentar

Om du vill ladda upp loggar från en enhet bakom en gatewayenhet måste du ha API-proxyn och bloblagringsmodulerna konfigurerade på den översta lagerenheten. De här modulerna dirigerar loggarna från din enhet på lägre nivå via din gatewayenhet till din lagring i molnet.

Den här metoden accepterar en JSON-nyttolast med följande schema:

    {
        "schemaVersion": "1.0",
        "sasUrl": "Full path to SAS url",
        "since": "2d",
        "until": "1d",
        "edgeRuntimeOnly": false
    }
Namn Type Beskrivning
schemaVersion sträng Ange till 1.0
sasURL sträng (URI) URL för signatur för delad åtkomst med skrivåtkomst till Azure Blob Storage-container
Sedan sträng Returnera endast loggar sedan dess, som en rfc3339-tidsstämpel, UNIX-tidsstämpel eller en varaktighet (dagar (d) timmar (h) minuter (m)). Till exempel kan en varaktighet för en dag, 12 timmar och 30 minuter anges som 1 dag 12 timmar 30 minuter eller 1d 12h 30m. VALFRI.
Tills sträng Returnera endast loggar före den angivna tiden, som en rfc3339-tidsstämpel, UNIX-tidsstämpel eller varaktighet (dagar (d) timmar (h) minuter (m)). Till exempel kan en varaktighet på 90 minuter anges som 90 minuter eller 90 m. VALFRI.
edgeRuntimeOnly boolean Om det är sant returnerar du bara loggar från Edge Agent, Edge Hub och Edge Security Daemon. Standard: falskt. VALFRI.

Viktigt!

IoT Edge-supportpaketet kan innehålla personligt identifierbar information.

En lyckad begäran om att ladda upp loggar returnerar en "status": 200 följt av en nyttolast med samma schema som UploadModuleLogs-svaret :

    {
        "status": "string",
        "message": "string",
        "correlationId": "GUID"
    }
Namn Type Beskrivning
status sträng En av NotStarted, Running, Completed, Failedeller Unknown.
meddelande sträng Meddelande om fel, annars tom sträng.
correlationId sträng ID för att fråga efter status för uppladdningsbegäran.

Till exempel:

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
    }
'

I Azure-portalen anropar du metoden med metodnamnet UploadSupportBundle och följande JSON-nyttolast när du har fyllt i sasURL med din information:

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

Skärmbild som visar hur du anropar direktmetoden UploadSupportBundle i Azure-portalen.

Hämta status för överföringsbegäran

Använd direktmetoden GetTaskStatus för att fråga efter status för en begäran om uppladdningsloggar. GetTaskStatus-begärandenyttolasten använder correlationId begäran om uppladdningsloggar för att hämta aktivitetens status. correlationId returneras som svar på direct method-anropet UploadModuleLogs.

Den här metoden accepterar en JSON-nyttolast med följande schema:

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

En lyckad begäran om att ladda upp loggar returnerar en "status": 200 följt av en nyttolast med samma schema som UploadModuleLogs-svaret :

    {
        "status": "string",
        "message": "string",
        "correlationId": "GUID"
    }
Namn Type Beskrivning
status sträng En av NotStarted, Running, Completed, Failed, "Avbröt" eller Unknown.
meddelande sträng Meddelande om fel, annars tom sträng.
correlationId sträng ID för att fråga efter status för uppladdningsbegäran.

Till exempel:

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

I Azure-portalen anropar du metoden med metodnamnet GetTaskStatus och följande JSON-nyttolast när du har fyllt i GUID med din information:

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

Skärmbild som visar hur du anropar direktmetoden GetTaskStatus i Azure-portalen .

Nästa steg

Egenskaper för IoT Edge-agenten och IoT Edge-hubbmodultvillingar