IoT Edge dağıtımlarından günlükleri alma

Şunlar için geçerlidir:IoT Edge 1.4 checkmark IoT Edge 1.4

Önemli

IoT Edge 1.4 desteklenen sürümdür. Önceki bir sürümdeyseniz bkz. IoT Edge’i güncelleştirme.

IoT Edge aracı modülünde yer alan doğrudan yöntemleri kullanarak cihaza fiziksel veya SSH erişimine gerek kalmadan IoT Edge dağıtımlarınızdan günlükleri alın. Doğrudan yöntemler cihazda uygulanır ve ardından buluttan çağrılabilir. IoT Edge aracısı, IoT Edge cihazlarınızı uzaktan izlemenize ve yönetmenize yardımcı olan doğrudan yöntemler içerir. Bu makalede açıklanan doğrudan yöntemler genel olarak 1.0.10 sürümüyle kullanılabilir.

Doğrudan yöntemler, bunları kullanma ve bunları kendi modüllerinizde uygulama hakkında daha fazla bilgi için bkz . IoT Hub'dan doğrudan yöntemleri anlama ve çağırma.

Bu doğrudan yöntemlerin adları büyük/küçük harfe duyarlı olarak işlenir.

Gerekli olmasa da, bu özellikle en iyi uyumluluk için önerilen günlüğe kaydetme biçimi şu şekildedir:

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

{Timestamp}olarak yyyy-MM-dd HH:mm:ss.fff zzzbiçimlendirilmeli ve aşağıdaki tabloyu izlemelidir. {Log Level} Bu tablo, önem düzeylerini Syslog standardındaki Önem Derecesi kodundan türetmelidir.

Değer Önem
0 Acil
Kategori 1 Uyarı
2 Kritik
3 Hata
4 Uyarı
5 Not
6 Bilgi
7 Hata Ayıklama

IoT Edge'deki Logger sınıfı kurallı bir uygulama işlevi görür.

Modül günlüklerini alma

IoT Edge modülünün günlüklerini almak için GetModuleLogs doğrudan yöntemini kullanın.

Bahşiş

since Alınan günlük aralığını sınırlamak için ve until filtre seçeneklerini kullanın. Bu doğrudan yöntemi sınır olmadan çağırmak, büyük, zaman alan veya maliyetli olabilecek tüm günlükleri alır.

Azure portalındaki IoT Edge sorun giderme sayfası, modül günlüklerini görüntülemek için basitleştirilmiş bir deneyim sağlar. Daha fazla bilgi için bkz . Azure portalından IoT Edge cihazlarını izleme ve sorunlarını giderme.

Bu yöntem aşağıdaki şemaya sahip bir JSON yükünü kabul eder:

    {
       "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" 
    }
Ad Tür Tanım
schemaVersion Dize Olarak ayarla 1.0
öğeler JSON dizisi ve filter demetleri olan id bir dizi.
kimlik dize Modül adını sağlayan normal ifade. Bir uç cihazdaki birden çok modülle eşleşebilir. .NET Normal İfadeler biçimi beklenir. Kimliği aynı modülle eşleşen birden çok öğe olması durumunda, bu modüle yalnızca eşleşen ilk kimliğin filtre seçenekleri uygulanır.
filtrele JSON bölümü Tanımlama grubundaki normal ifadeyle id eşleşen modüllere uygulanacak günlük filtreleri.
Kuyruk integer En son sürümden başlayarak alınacak geçmişteki günlük satırlarının sayısı. ISTEĞE BAĞLI.
Beri Dize Yalnızca bu zamandan bu yana günlükleri rfc3339 zaman damgası, UNIX zaman damgası veya süre (gün (d) saat (h) dakika (m)olarak döndürür. Örneğin, bir gün, 12 saat ve 30 dakika için bir süre 1 gün 12 saat 30 dakika veya 1d 12h 30m olarak belirtilebilir. Hem hem since de tail belirtilirse, günlükler önce değeri kullanılarak since alınır. Daha sonra sonuç tail için değer uygulanır ve nihai sonuç döndürülür. ISTEĞE BAĞLI.
Kadar Dize Günlükleri yalnızca belirtilen süreden önce rfc3339 zaman damgası, UNIX zaman damgası veya süre (gün (d) saat (h) dakika (m)olarak döndürür. Örneğin, süre 90 dakika 90 dakika veya 90 dk olarak belirtilebilir. Hem hem since de tail belirtilirse, günlükler önce değeri kullanılarak since alınır. Daha sonra sonuç tail için değer uygulanır ve nihai sonuç döndürülür. ISTEĞE BAĞLI.
Loglevel integer Belirtilen günlük düzeyine eşit günlük satırlarını filtreleyin. Günlük satırları önerilen günlük biçimine uygun olmalı ve Syslog önem düzeyi standardını kullanmalıdır. Birden çok günlük düzeyi önem derecesi değerine göre filtrelemeniz gerekiyorsa, modülün farklı önem düzeylerini günlüğe kaydederken tutarlı bir biçim izlemesi koşuluyla, regex eşleştirmesine güvenmeniz gerekir. ISTEĞE BAĞLI.
Regex Dize .NET Normal İfadeler biçimini kullanarak belirtilen normal ifadeyle eşleşen içeriğe sahip günlük satırlarını filtreleyin . ISTEĞE BAĞLI.
encoding Dize gzip veya none. Varsayılan none değeridir.
Contenttype Dize json veya text. Varsayılan text değeridir.

Dekont

Günlük içeriği şu anda 128 KB olan doğrudan yöntemlerin yanıt boyutu sınırını aşarsa yanıt bir hata döndürür.

Günlüklerin başarıyla alınması bir "durum" döndürür: 200 ve ardından modülden alınan günlükleri içeren yük isteğinizde belirttiğiniz ayarlara göre filtrelenir.

Örnek:

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

Azure portalında yöntemini yöntem adı GetModuleLogs ve aşağıdaki JSON yüküyle çağırın:

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

Screenshot of how to invoke direct method GetModuleLogs in the Azure portal.

Sıkıştırılmış bir yanıtı işlemek için CLI çıkışını gzip gibi Linux yardımcı programlarına da yöneltebilirsiniz. Örnek:

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

Modül günlüklerini karşıya yükleme

İstenen günlükleri belirtilen Azure Blob Depolama kapsayıcısına göndermek için UploadModuleLogs doğrudan yöntemini kullanın.

Dekont

since Alınan günlük aralığını sınırlamak için ve until filtre seçeneklerini kullanın. Bu doğrudan yöntemi sınır olmadan çağırmak, büyük, zaman alan veya maliyetli olabilecek tüm günlükleri alır.

Ağ geçidi cihazının arkasındaki bir cihazdan günlükleri karşıya yüklemek istiyorsanız, üst katman cihazda API ara sunucusu ve blob depolama modüllerinin yapılandırılmış olması gerekir. Bu modüller, alt katman cihazınızdaki günlükleri ağ geçidi cihazınız üzerinden buluttaki depolama alanınıza yönlendirir.

Bu yöntem, "sasUrl" anahtarının eklenmesiyle GetModuleLogs'a benzer bir JSON yükünü kabul eder:

    {
       "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" 
    }
Ad Tür Tanım
sasURL dize (URI) Azure Blob Depolama kapsayıcısına yazma erişimi olan Paylaşılan Erişim İmzası URL'si.

Günlükleri karşıya yükleme isteği başarılı bir "durum" döndürür: 200 ve ardından aşağıdaki şemaya sahip bir yük:

    {
        "status": "string",
        "message": "string",
        "correlationId": "GUID"
    }
Ad Tür Tanım
status Dize NotStarted, , Running, CompletedFailedveya Unknown.
ileti Dize Hata durumunda ileti, aksi takdirde boş dize.
correlationId Dize Karşıya yükleme isteğinin durumunu sorgulamak için kimlik.

Örnek:

Aşağıdaki çağrı, tüm modüllerden son 100 günlük satırı sıkıştırılmış JSON biçiminde karşıya yükler:

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şağıdaki çağrı, tempSensor modülündeki son 1000 günlük satırıyla edgeAgent ve edgeHub'dan son 100 günlük satırı sıkıştırılmamış metin biçiminde karşıya yükler:

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

Azure portalında sasURL'yi bilgilerinizle doldurup yöntem adı UploadModuleLogs ve aşağıdaki JSON yüküyle yöntemini çağırın:

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

Screenshot of how to invoke direct method UploadModuleLogs in the Azure portal.

Destek paketi tanılamalarını karşıya yükleme

IoT Edge modül günlüklerinin zip dosyasını paketleyip kullanılabilir bir Azure Blob Depolama kapsayıcısına yüklemek için UploadSupportBundle doğrudan yöntemini kullanın. Bu doğrudan yöntem, günlükleri almak için IoT Edge cihazınızda komutunu çalıştırır iotedge support-bundle .

Dekont

Ağ geçidi cihazının arkasındaki bir cihazdan günlükleri karşıya yüklemek istiyorsanız, üst katman cihazda API ara sunucusu ve blob depolama modüllerinin yapılandırılmış olması gerekir. Bu modüller, alt katman cihazınızdaki günlükleri ağ geçidi cihazınız üzerinden buluttaki depolama alanınıza yönlendirir.

Bu yöntem aşağıdaki şemaya sahip bir JSON yükünü kabul eder:

    {
        "schemaVersion": "1.0",
        "sasUrl": "Full path to SAS url",
        "since": "2d",
        "until": "1d",
        "edgeRuntimeOnly": false
    }
Ad Tür Tanım
schemaVersion Dize Olarak ayarla 1.0
sasURL dize (URI) Azure Blob Depolama kapsayıcısına yazma erişimi olan Paylaşılan Erişim İmzası URL'si
Beri Dize Yalnızca bu zamandan bu yana günlükleri rfc3339 zaman damgası, UNIX zaman damgası veya süre (gün (d) saat (h) dakika (m)olarak döndürür. Örneğin, bir gün, 12 saat ve 30 dakika için bir süre 1 gün 12 saat 30 dakika veya 1d 12h 30m olarak belirtilebilir. ISTEĞE BAĞLI.
Kadar Dize Günlükleri yalnızca belirtilen süreden önce rfc3339 zaman damgası, UNIX zaman damgası veya süre (gün (d) saat (h) dakika (m)olarak döndürür. Örneğin, süre 90 dakika 90 dakika veya 90 dk olarak belirtilebilir. ISTEĞE BAĞLI.
edgeRuntimeOnly boolean Doğruysa yalnızca Edge Aracısı, Edge Hub ve Edge Güvenlik Daemon'ından günlükleri döndürebilirsiniz. Varsayılan: false. ISTEĞE BAĞLI.

Önemli

IoT Edge destek paketi Kişisel Bilgiler içerebilir.

Günlükleri karşıya yükleme isteği başarılı bir "durum" döndürür: 200 ve ardından UploadModuleLogs yanıtıyla aynı şemaya sahip bir yük gelir:

    {
        "status": "string",
        "message": "string",
        "correlationId": "GUID"
    }
Ad Tür Tanım
status Dize NotStarted, , Running, CompletedFailedveya Unknown.
ileti Dize Hata durumunda ileti, aksi takdirde boş dize.
correlationId Dize Karşıya yükleme isteğinin durumunu sorgulamak için kimlik.

Örnek:

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

Azure portalında sasURL'yi bilgilerinizle doldurup yöntem adı UploadSupportBundle ve aşağıdaki JSON yüküyle yöntemini çağırın:

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

Screenshot showing how to invoke direct method UploadSupportBundle in the Azure portal.

Karşıya yükleme isteği durumunu alma

Karşıya yükleme günlükleri isteğinin durumunu sorgulamak için GetTaskStatus doğrudan yöntemini kullanın. GetTaskStatus istek yükü, görevin durumunu almak için karşıya yükleme günlükleri isteğini kullanırcorrelationId. correlationId, UploadModuleLogs doğrudan yöntem çağrısına yanıt olarak döndürülür.

Bu yöntem aşağıdaki şemaya sahip bir JSON yükünü kabul eder:

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

Günlükleri karşıya yükleme isteği başarılı bir "durum" döndürür: 200 ve ardından UploadModuleLogs yanıtıyla aynı şemaya sahip bir yük gelir:

    {
        "status": "string",
        "message": "string",
        "correlationId": "GUID"
    }
Ad Tür Tanım
status Dize NotStarted, , Running, Completed, Failed, 'İptal Edildi' veya Unknown.
ileti Dize Hata durumunda ileti, aksi takdirde boş dize.
correlationId Dize Karşıya yükleme isteğinin durumunu sorgulamak için kimlik.

Örnek:

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

Azure portalında, GUID'yi bilgilerinizle doldurup yöntem adı GetTaskStatus ve aşağıdaki JSON yüküyle yöntemini çağırın:

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

Screenshot showing how to invoke direct method GetTaskStatus in Azure portal .

Sonraki adımlar

IoT Edge aracısının ve IoT Edge hub modül ikizlerinin özellikleri