Odzyskiwanie dzienników z wdrożeń IoT Edge
Dotyczy: IoT Edge 1.5 IoT Edge 1.4
Ważne
Obsługiwana wersja usługi IoT Edge 1.5 LTS. Usługa IoT Edge 1.4 LTS kończy się od 12 listopada 2024 r. Jeśli korzystasz z wcześniejszej wersji, zobacz aktualizację Azure IoT Edge.
Pobieranie dzienników z wdrożeń usługi IoT Edge bez konieczności fizycznego lub SSH dostępu do urządzenia przy użyciu metod bezpośrednich zawartych w module agenta usługi IoT Edge. Metody bezpośrednie są implementowane na urządzeniu, a następnie mogą być wywoływane z chmury. Agent usługi IoT Edge zawiera metody bezpośrednie, które ułatwiają zdalne monitorowanie urządzeń usługi IoT Edge i zarządzanie nimi. Metody bezpośrednie omówione w tym artykule są ogólnie dostępne w wersji 1.0.10.
Aby uzyskać więcej informacji o metodach bezpośrednich, sposobie ich używania i implementowaniu ich we własnych modułach, zobacz Omówienie i wywoływanie metod bezpośrednich z usługi IoT Hub.
Nazwy tych metod bezpośrednich są obsługiwane z uwzględnieniem wielkości liter.
Zalecany format rejestrowania
Chociaż nie jest to wymagane, aby uzyskać najlepszą zgodność z tą funkcją, zalecany format rejestrowania to:
<{Log Level}> {Timestamp} {Message Text}
{Timestamp}
powinien być sformatowany jako yyyy-MM-dd HH:mm:ss.fff zzz
, i {Log Level}
powinien użyć poniższej tabeli, która pochodzi z poziomu jego ważności z kodu ważność w standardzie Syslog.
Wartość | Ważność |
---|---|
0 | Sytuacja kryzysowa |
1 | Alerty |
2 | Krytyczne |
3 | Błąd |
100 | Ostrzeżenie |
5 | Uwaga |
6 | Informacyjny |
7 | Debugowanie |
Klasa Logger w usłudze IoT Edge służy jako implementacja kanoniczna.
Pobieranie dzienników modułów
Użyj metody bezpośredniej GetModuleLogs , aby pobrać dzienniki modułu usługi IoT Edge.
Napiwek
Użyj opcji filtru since
i until
, aby ograniczyć zakres pobranych dzienników. Wywołanie tej metody bezpośredniej bez ograniczeń pobiera wszystkie dzienniki, które mogą być duże, czasochłonne lub kosztowne.
Strona rozwiązywania problemów z usługą IoT Edge w witrynie Azure Portal zapewnia uproszczone środowisko przeglądania dzienników modułów. Aby uzyskać więcej informacji, zobacz Monitorowanie i rozwiązywanie problemów z urządzeniami usługi IoT Edge w witrynie Azure Portal.
Ta metoda akceptuje ładunek JSON z następującym schematem:
{
"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"
}
Nazwisko | Pisz | Opis |
---|---|---|
schemaVersion | string | Ustaw wartość 1.0 |
elementy | Tablica JSON | Tablica z krotkami id i filter . |
identyfikator | string | Wyrażenie regularne, które dostarcza nazwę modułu. Może być zgodny z wieloma modułami na urządzeniu brzegowym. Oczekiwany jest format wyrażeń regularnych platformy .NET. Jeśli istnieje wiele elementów, których identyfikator jest zgodny z tym samym modułem, do tego modułu zastosowano tylko opcje filtru pierwszego zgodnego identyfikatora. |
filtr | Sekcja JSON | Filtry dzienników, które mają być stosowane do modułów pasujących do wyrażenia regularnego id w krotku. |
ogon | integer | Liczba wierszy dziennika w przeszłości do pobrania od najnowszej. FAKULTATYWNY. |
od | string | Zwracaj tylko dzienniki od tego czasu, jako sygnaturę czasową rfc3339, sygnaturę czasową systemu UNIX lub czas trwania (dni (d) godziny (h) minuty (m)). Na przykład czas trwania jednego dnia, 12 godzin i 30 minut można określić jako 1 dzień 12 godzin 30 minut lub 1d 12h 30m. Jeśli określono zarówno wartości, jak tail i since , dzienniki są pobierane przy użyciu since pierwszej wartości. Następnie wartość zostanie zastosowana tail do wyniku, a wynik końcowy zostanie zwrócony. FAKULTATYWNY. |
aż do | string | Zwracaj tylko dzienniki przed określonym czasem, jako sygnatura czasowa rfc3339, znacznik czasu systemu UNIX lub czas trwania (dni (d) godziny (h) minut (m)). Na przykład czas trwania 90 minut można określić jako 90 minut lub 90 m. Jeśli określono zarówno wartości, jak tail i since , dzienniki są pobierane przy użyciu since pierwszej wartości. Następnie wartość zostanie zastosowana tail do wyniku, a wynik końcowy zostanie zwrócony. FAKULTATYWNY. |
loglevel | integer | Filtruj wiersze dziennika równe określonemu poziomowi dziennika. Wiersze dziennika powinny być zgodne z zalecanym formatem rejestrowania i używać standardu poziomu ważności dziennika systemowego. Jeśli musisz filtrować według wielu wartości ważności na poziomie dziennika, a następnie polegać na dopasowywaniu wyrażeń regularnych, pod warunkiem, że moduł jest zgodny z pewnym spójnym formatem podczas rejestrowania różnych poziomów ważności. FAKULTATYWNY. |
regex | string | Filtrowanie wierszy dziennika z zawartością zgodną z określonym wyrażeniem regularnym przy użyciu formatu wyrażeń regularnych platformy .NET. FAKULTATYWNY. |
encoding | string | gzip lub none . Wartość domyślna to none . |
contentType | string | json lub text . Wartość domyślna to text . |
Uwaga
Jeśli zawartość dzienników przekracza limit rozmiaru odpowiedzi metod bezpośrednich, czyli obecnie 128 KB, odpowiedź zwraca błąd.
Pomyślne pobieranie dzienników zwraca wartość "status": 200 , po której następuje ładunek zawierający dzienniki pobrane z modułu, filtrowane według ustawień podanych w żądaniu.
Na przykład:
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"
}
'
W witrynie Azure Portal wywołaj metodę z nazwą GetModuleLogs
metody i następującym ładunkiem JSON:
{
"schemaVersion": "1.0",
"items": [
{
"id": "edgeAgent",
"filter": {
"tail": 10
}
}
],
"encoding": "none",
"contentType": "text"
}
Możesz również przekazać potok danych wyjściowych interfejsu wiersza polecenia do narzędzi systemu Linux, takich jak gzip, aby przetworzyć skompresowaną odpowiedź. Na przykład:
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
Przekazywanie dzienników modułów
Użyj metody bezpośredniej UploadModuleLogs , aby wysłać żądane dzienniki do określonego kontenera usługi Azure Blob Storage.
Uwaga
Użyj opcji filtru since
i until
, aby ograniczyć zakres pobranych dzienników. Wywołanie tej metody bezpośredniej bez ograniczeń pobiera wszystkie dzienniki, które mogą być duże, czasochłonne lub kosztowne.
Jeśli chcesz przekazać dzienniki z urządzenia za urządzeniem bramy, musisz mieć moduły serwera proxy interfejsu API i magazynu obiektów blob skonfigurowane na urządzeniu warstwy górnej. Te moduły kierują dzienniki z urządzenia niższej warstwy za pośrednictwem urządzenia bramy do magazynu w chmurze.
Ta metoda akceptuje ładunek JSON podobny do GetModuleLogs z dodatkiem klucza "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"
}
Nazwisko | Pisz | Opis |
---|---|---|
sasURL | string (URI) | Adres URL sygnatury dostępu współdzielonego z dostępem do zapisu do kontenera usługi Azure Blob Storage. |
Pomyślne żądanie przekazania dzienników zwraca "stan": 200 , po którym następuje ładunek z następującym schematem:
{
"status": "string",
"message": "string",
"correlationId": "GUID"
}
Nazwisko | Pisz | Opis |
---|---|---|
status | string | NotStarted Jeden z , Running , Completed , Failed , lub Unknown . |
wiadomość | string | Komunikat o błędzie, pusty ciąg w przeciwnym razie. |
correlationId | string | Identyfikator zapytania o stan żądania przekazania. |
Na przykład:
Następujące wywołanie przekazuje ostatnie 100 wierszy dziennika ze wszystkich modułów w skompresowanym formacie JSON:
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"
}
'
Następujące wywołanie przekazuje ostatnie 100 wierszy dziennika z edgeAgent i edgeHub z ostatnich 1000 wierszy dziennika z modułu tempSensor w formacie nieskompresowanym tekstu:
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"
}
'
W witrynie Azure Portal wywołaj metodę z nazwą UploadModuleLogs
metody i następującym ładunkiem JSON po wypełnieniu adresu sasURL swoimi informacjami:
{
"schemaVersion": "1.0",
"sasUrl": "<sasUrl>",
"items": [
{
"id": "edgeAgent",
"filter": {
"tail": 10
}
}
],
"encoding": "none",
"contentType": "text"
}
Przekazywanie diagnostyki pakietu pomocy technicznej
Użyj metody bezpośredniej UploadSupportBundle , aby połączyć i przekazać plik zip dzienników modułów usługi IoT Edge do dostępnego kontenera usługi Azure Blob Storage. Ta metoda bezpośrednia iotedge support-bundle
uruchamia polecenie na urządzeniu usługi IoT Edge w celu uzyskania dzienników.
Uwaga
Jeśli chcesz przekazać dzienniki z urządzenia za urządzeniem bramy, musisz mieć moduły serwera proxy interfejsu API i magazynu obiektów blob skonfigurowane na urządzeniu warstwy górnej. Te moduły kierują dzienniki z urządzenia niższej warstwy za pośrednictwem urządzenia bramy do magazynu w chmurze.
Ta metoda akceptuje ładunek JSON z następującym schematem:
{
"schemaVersion": "1.0",
"sasUrl": "Full path to SAS url",
"since": "2d",
"until": "1d",
"edgeRuntimeOnly": false
}
Nazwisko | Pisz | Opis |
---|---|---|
schemaVersion | string | Ustaw wartość 1.0 |
sasURL | string (URI) | Adres URL sygnatury dostępu współdzielonego z dostępem do zapisu do kontenera usługi Azure Blob Storage |
od | string | Zwracaj tylko dzienniki od tego czasu, jako sygnaturę czasową rfc3339, sygnaturę czasową systemu UNIX lub czas trwania (dni (d) godziny (h) minuty (m)). Na przykład czas trwania jednego dnia, 12 godzin i 30 minut można określić jako 1 dzień 12 godzin 30 minut lub 1d 12h 30m. FAKULTATYWNY. |
aż do | string | Zwracaj tylko dzienniki przed określonym czasem, jako sygnatura czasowa rfc3339, znacznik czasu systemu UNIX lub czas trwania (dni (d) godziny (h) minut (m)). Na przykład czas trwania 90 minut można określić jako 90 minut lub 90 m. FAKULTATYWNY. |
edgeRuntimeOnly | boolean | Jeśli wartość true, zwracane są tylko dzienniki z agenta usługi Edge, centrum edge i demona zabezpieczeń usługi Edge. Wartość domyślna: false. FAKULTATYWNY. |
Ważne
Pakiet pomocy technicznej usługi IoT Edge może zawierać dane osobowe.
Pomyślne żądanie przekazania dzienników zwraca wartość "status": 200 , po której następuje ładunek z tym samym schematem co odpowiedź UploadModuleLogs :
{
"status": "string",
"message": "string",
"correlationId": "GUID"
}
Nazwisko | Pisz | Opis |
---|---|---|
status | string | NotStarted Jeden z , Running , Completed , Failed , lub Unknown . |
wiadomość | string | Komunikat o błędzie, pusty ciąg w przeciwnym razie. |
correlationId | string | Identyfikator zapytania o stan żądania przekazania. |
Na przykład:
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
}
'
W witrynie Azure Portal wywołaj metodę z nazwą UploadSupportBundle
metody i następującym ładunkiem JSON po wypełnieniu adresu sasURL swoimi informacjami:
{
"schemaVersion": "1.0",
"sasUrl": "Full path to SAS url",
"since": "2d",
"until": "1d",
"edgeRuntimeOnly": false
}
Uzyskiwanie stanu żądania przekazania
Użyj metody bezpośredniej GetTaskStatus , aby wysłać zapytanie o stan żądania przekazywania dzienników. Ładunek żądania GetTaskStatus używa correlationId
żądania przekazywania dzienników, aby uzyskać stan zadania. Element correlationId
jest zwracany w odpowiedzi na wywołanie metody bezpośredniej UploadModuleLogs .
Ta metoda akceptuje ładunek JSON z następującym schematem:
{
"schemaVersion": "1.0",
"correlationId": "<GUID>"
}
Pomyślne żądanie przekazania dzienników zwraca wartość "status": 200 , po której następuje ładunek z tym samym schematem co odpowiedź UploadModuleLogs :
{
"status": "string",
"message": "string",
"correlationId": "GUID"
}
Nazwisko | Pisz | Opis |
---|---|---|
status | string | NotStarted Jeden z elementów , , Running , Completed , Failed "Anulowane" lub Unknown . |
wiadomość | string | Komunikat o błędzie, pusty ciąg w przeciwnym razie. |
correlationId | string | Identyfikator zapytania o stan żądania przekazania. |
Na przykład:
az iot hub invoke-module-method --method-name 'GetTaskStatus' -n <hub name> -d <device id> -m '$edgeAgent' --method-payload \
'
{
"schemaVersion": "1.0",
"correlationId": "<GUID>"
}
'
W witrynie Azure Portal wywołaj metodę z nazwą GetTaskStatus
metody i następującym ładunkiem JSON po wypełnieniu identyfikatora GUID informacjami:
{
"schemaVersion": "1.0",
"correlationId": "<GUID>"
}
Następne kroki
Właściwości agenta usługi IoT Edge i bliźniaczych reprezentacji modułów usługi IoT Edge