Hämta loggar från IoT Edge-distributioner
Gäller för: IoT Edge 1.5 IoT Edge 1.4
Viktigt!
IoT Edge 1.5 LTS är den version som stöds. IoT Edge 1.4 LTS upphör från och med 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.
Rekommenderat loggningsformat
Ä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 använda följande tabell, 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 Portal ger en förenklad upplevelse för att visa modulloggar. Mer information finns i Övervaka och felsöka IoT Edge-enheter från Azure Portal.
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 Portal anropar du metoden med metodnamnet GetModuleLogs
och följande JSON-nyttolast:
{
"schemaVersion": "1.0",
"items": [
{
"id": "edgeAgent",
"filter": {
"tail": 10
}
}
],
"encoding": "none",
"contentType": "text"
}
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 , Failed 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:
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 Portal 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"
}
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 , Failed 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 '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 Portal 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
}
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 Portal 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>"
}
Nästa steg
Egenskaper för IoT Edge-agenten och IoT Edge-hubbmodultvillingar