次の方法で共有


IoT Edge の展開からログを取得する

適用対象:IoT Edge 1.5 のチェックマーク IoT Edge 1.5

重要

IoT Edge 1.5 LTS は、サポートされているリリースです。 IoT Edge 1.4 LTS は、2024 年 11 月 12 日をもってサポートが終了しています。 以前のリリースの場合は、「IoT Edge を更新する」を参照してください。

IoT Edge エージェント モジュールのダイレクト メソッドを使用して、物理的または SSH アクセスなしで IoT Edge デプロイからログを取得します。 ダイレクト メソッドはデバイス上で実行され、クラウドから呼び出すことができます。 IoT Edge エージェントには、IoT Edge デバイスをリモートで監視および管理するのに役立つダイレクト メソッドがあります。 この記事のダイレクト メソッドは、バージョン 1.0.10 以降で使用できます。

ダイレクト メソッド、ダイレクト メソッドの使用方法、および独自のモジュールに追加する方法の詳細については、「 IoT Hub からダイレクト メソッドを理解して呼び出す」を参照してください。

これらのダイレクト メソッドの名前では、大文字と小文字が区別されます。

この機能との最適な互換性を確保するには、次のログ形式を使用します。

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

{Timestamp}yyyy-MM-dd HH:mm:ss.fff zzzとして書式設定します。 {Log Level}に基づいて、次の表の値を使用します。

価値 重要度
0 緊急
1 アラート:
2 危うい
3 エラー
4 警告
5 通知
6 情報提供用
7 デバッグ

IoT Edge の Logger クラスは正規の実装です。

モジュール ログを取得する

GetModuleLogs ダイレクト メソッドを使用して、IoT Edge モジュールのログを取得します。

ヒント

取得するログの範囲を制限するには、since および until フィルター オプションを使用します。 このダイレクトメソッドを境界なしで呼び出すと、すべてのログが取得されますが、これらのログは大きかったり、時間がかかったり、コストがかかったりする可能性があります。

Azure portal の IoT Edge のトラブルシューティング ページでは、モジュール ログを簡単に表示できます。 詳細については、「Azure portal から IoT Edge デバイスを監視およびトラブルシューティングする」を参照してください。

このメソッドは、次のスキーマを持つ JSON ペイロードを受け取ります。

    {
       "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" 
    }
名前 種類 説明
スキーマバージョン ひも 1.0 に設定
アイテム JSON 配列 id および filter の組を含む配列。
身分証明書 ひも モジュール名を指定する正規表現。 エッジ デバイス上の複数のモジュールと一致させることができます。 .NET の正規表現の形式が必要です。 同じモジュールに一致する ID を持つ複数の項目がある場合、最初に一致する ID のフィルター オプションのみがそのモジュールに適用されます。
フィルター JSON セクション 組になった id 正規表現と一致するモジュールに適用されるログ フィルター。
整数 (integer) 取得する過去のログ行数 (最新の行から数える)。 省略可能。
次の日時以降 ひも rfc3339 タイムスタンプ、UNIX タイムスタンプ、または期間 (日 (d)、時間 (h)、分 (m)) として、この時点以降のログのみを返します。 たとえば、1 日、12 時間、30 分の期間は、1 day 12 hours 30 minutes または 1d 12h 30m と指定できます。 tailsinceの両方を指定した場合、ログは最初にsince値を使用してフィルター処理され、結果にtail値が適用されます。 省略可能。
ひも 指定した時刻より前のログのみを、rfc3339 タイムスタンプ、UNIX タイムスタンプ、または期間 (日 (d)、時間 (h)、分 (m)) として返します。 たとえば、90 分の期間は 90 分 または 90 m として指定できます。 tailsinceの両方を指定した場合、ログは最初にsince値を使用してフィルター処理され、結果にtail値が適用されます。 省略可能。
loglevel 整数 (integer) 指定したログ レベルと等しいログ行をフィルター処理します。 ログ行は推奨されるログ形式に従い、 Syslog 重大度レベル の標準を使用する必要があります。 複数のログ レベルの重大度値でフィルター処理する必要がある場合は、モジュールが異なる重大度レベルに一貫性のある形式を使用している場合は、正規表現の照合を使用します。 省略可能。
正規表現 (regex) ひも .NET 正規表現形式を使用して、指定した正規表現に一致するログ行をフィルター処理します。 省略可能。
エンコーディング ひも gzip または none のいずれかです。 既定値は none です。
コンテンツタイプ ひも json または text のいずれかです。 既定値は text です。

ログの内容がダイレクト メソッドの応答サイズ制限 (現在 128 KB) を超えた場合、応答はエラーを返します。

ログの取得が成功すると 、"status" が返されます。200 の 後に、モジュールのログを含むペイロードが、要求で指定した設定でフィルター処理されます。

次に例を示します。

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 で、メソッド GetModuleLogs と次の JSON ペイロードを呼び出します。

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

Azure portal でダイレクト メソッド GetModuleLogs を呼び出す方法のスクリーンショット。

また、CLI 出力を gzip のような Linux ユーティリティにパイプして、圧縮された応答を処理することもできます。 次に例を示します。

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

モジュール ログをアップロードする

UploadModuleLogs ダイレクト メソッドを使用して、要求されたログを特定の Azure Blob Storage コンテナーに送信します。

取得するログの範囲を制限するには、since および until フィルター オプションを使用します。 境界なしでこのダイレクト メソッドを呼び出すと、すべてのログが取得されます。ログは、大きい、時間がかかる、またはコストがかかる可能性があります。

ゲートウェイ デバイスの背後にあるデバイスからログをアップロードするには、 API プロキシと BLOB ストレージ モジュール が最上位レイヤー デバイスで構成されていることを確認します。 これらのモジュールは、下位レイヤー デバイスからゲートウェイ デバイスを介してクラウド内のストレージにログをルーティングします。

このメソッドは、追加された "sasUrl" キーを使用して、 GetModuleLogs のような JSON ペイロードを受け入れます。

    {
       "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" 
    }
名前 種類 説明
sasURL string (URI) Azure Blob Storage コンテナーへの書き込みアクセスを含む共有アクセス署名 URL

ログのアップロード要求が成功すると、 "status":200 が返され、次のスキーマを持つペイロードが後に続きます。

    {
        "status": "string",
        "message": "string",
        "correlationId": "GUID"
    }
名前 種類 説明
ステータス ひも NotStartedRunningCompletedFailed、または Unknownの 1 つ。
メッセージ ひも エラーがある場合はメッセージ、それ以外の場合は空の文字列。
相関ID ひも アップロード要求の状態を確認する ID。

たとえば、次の呼び出しでは、圧縮された JSON 形式ですべてのモジュールから最後の 100 行のログ行がアップロードされます。

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

次の呼び出しでは、edgeAgent と edgeHub から最後の 100 行のログ行と、tempSensor モジュールの最後の 1,000 行が非圧縮テキスト形式でアップロードされます。

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 で、sasUrl を自分の情報に置き換えた後、メソッド名 UploadModuleLogs と次の JSON ペイロードを使用してメソッドを呼び出します。

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

Azure portal で UploadModuleLogs ダイレクト メソッドを呼び出すスクリーンショット。

サポート バンドル診断をアップロードする

UploadSupportBundle ダイレクト メソッドを使用して、IoT Edge モジュール ログの zip ファイルをバンドルし、使用可能な Azure Blob Storage コンテナーにアップロードします。 このダイレクト メソッドによって、IoT Edge デバイス上で iotedge support-bundle コマンドが実行されて、ログが取得されます。

ゲートウェイ デバイスの背後にあるデバイスからログをアップロードするには、 API プロキシと BLOB ストレージ モジュール が最上位レイヤー デバイスに設定されていることを確認します。 これらのモジュールは、下位レイヤー デバイスからゲートウェイ デバイスを介してクラウド内のストレージにログをルーティングします。

このメソッドは、次のスキーマを持つ JSON ペイロードを受け取ります。

    {
        "schemaVersion": "1.0",
        "sasUrl": "Full path to SAS url",
        "since": "2d",
        "until": "1d",
        "edgeRuntimeOnly": false
    }
名前 種類 説明
スキーマバージョン ひも 1.0 に設定します。
sasURL string (URI) Azure Blob Storage コンテナーへの書き込みアクセスを含む共有アクセス署名 URL
次の日時以降 ひも RFC 3339 タイムスタンプ、UNIX タイムスタンプ、または期間 (日 (d)、時間 (h)、分 (m)) として、この時点以降のログを返します。 たとえば、1 日、12 時間、30 分を 1 日 12 時間 30 分 または 1d 12h 30m と指定します。 任意。
ひも RFC 3339 タイムスタンプ、UNIX タイムスタンプ、または期間 (日 (d)、時間 (h)、分 (m)) として、この時刻より前のログを返します。 たとえば、90 分を 90 分 または 90m と指定します。 任意。
edgeRuntimeOnly ブーリアン true の場合は、Edge エージェント、Edge ハブ、およびエッジ セキュリティ デーモンからのみログを返します。 既定値は false です。 任意。

重要

IoT Edge サポート バンドルには、個人を特定できる情報を含めることができます。

アップロード ログ要求が成功すると、"status": 200 と、UploadModuleLogs 応答と同じスキーマを持つペイロードが返されます。

    {
        "status": "string",
        "message": "string",
        "correlationId": "GUID"
    }
名前 種類 説明
ステータス ひも NotStartedRunningCompletedFailed、または Unknownの 1 つ。
メッセージ ひも エラーの場合はメッセージ、それ以外の場合は空の文字列。
相関ID ひも アップロード要求の状態を照会するための ID。

次の例では、プレースホルダー テキストの <hub name><device id> を独自の値に置き換えます。

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 で、独自の SAS URL を再レースした後、メソッド名 UploadSupportBundle と次の JSON ペイロードを使用してメソッドを呼び出します。

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

Azure portal で UploadSupportBundle ダイレクト メソッドを呼び出すスクリーンショット。

アップロード要求の状態を取得する

GetTaskStatus ダイレクト メソッドを使用して、アップロード ログ要求の状態を確認します。 GetTaskStatus 要求ペイロードは、アップロード ログ要求のcorrelationIdを使用してタスクの状態を取得します。 correlationIdは、UploadModuleLogs ダイレクト メソッド呼び出しへの応答から取得されます。

このメソッドは、次のスキーマを持つ JSON ペイロードを受け取ります。

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

ログのアップロード要求が成功すると、 "status":200 が返され、UploadModuleLogs 応答と同じスキーマを持つペイロードが後に続きます。

    {
        "status": "string",
        "message": "string",
        "correlationId": "GUID"
    }
名前 種類 説明
ステータス ひも NotStartedRunningCompletedFailedCancelledUnknown のいずれか。
メッセージ ひも エラーの場合はメッセージ、それ以外の場合は空の文字列。
相関ID ひも アップロード要求の状態を照会するための ID。

次に例を示します。

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 で、メソッド名 GetTaskStatus と次の JSON ペイロードを使用してメソッドを呼び出します。 <GUID> は、実際の値に置き換えてください。

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

ダイレクト メソッド GetTaskStatus を呼び出す方法を示す Azure portal のスクリーンショット。

次のステップ

IoT Edge エージェントと IoT Edge ハブのモジュール ツインのプロパティ