Odzyskiwanie dzienników z wdrożeń IoT Edge

Dotyczy:Znacznik wyboru usługi IoT Edge 1.5 IoT Edge 1.5 Znacznik wyboru usługi IoT Edge 1.4 IoT Edge 1.4

Ważne

Obsługiwane są wersje usługi IoT Edge 1.5 LTS i IoT Edge 1.4 LTS. Usługa IoT Edge 1.4 LTS kończy się 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.

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 postępować zgodnie z poniższą tabelą, która pochodzi z poziomu poziomu ważności z kodu ważności 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 zostaną zastosowane 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. OPCJONALNE.
Od string Zwracaj tylko dzienniki od tego czasu, jako znacznik czasu rfc3339, system UNIX znacznik czasu lub czas trwania (dni (d) godziny (h) minut (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. OPCJONALNE.
Do string Zwracaj tylko dzienniki przed określonym czasem, jako sygnaturę czasową rfc3339, system UNIX sygnaturę czasową 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. OPCJONALNE.
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. OPCJONALNE.
Regex string Filtrowanie wierszy dziennika z zawartością zgodną z określonym wyrażeniem regularnym przy użyciu formatu wyrażeń regularnych platformy .NET. OPCJONALNE.
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"
    }

Zrzut ekranu przedstawiający sposób wywoływania metody bezpośredniej GetModuleLogs w witrynie Azure Portal.

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

Zrzut ekranu przedstawiający sposób wywoływania metody bezpośredniej UploadModuleLogs w witrynie Azure Portal.

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 znacznik czasu rfc3339, system UNIX znacznik czasu lub czas trwania (dni (d) godziny (h) minut (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. OPCJONALNE.
Do string Zwracaj tylko dzienniki przed określonym czasem, jako sygnaturę czasową rfc3339, system UNIX sygnaturę czasową 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. OPCJONALNE.
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. OPCJONALNE.

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

Zrzut ekranu przedstawiający sposób wywoływania metody bezpośredniej UploadSupportBundle w witrynie Azure Portal.

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

Zrzut ekranu przedstawiający sposób wywoływania metody bezpośredniej GetTaskStatus w witrynie Azure Portal.

Następne kroki

Właściwości agenta usługi IoT Edge i bliźniaczych reprezentacji modułów usługi IoT Edge