デバイスのログの表示

Cloud IoT Core は、必要に応じてデバイス アクティビティ ログを Cloud Logging に送信できます。デバイスのアクティビティ ログには、デバイスの接続やエラーなどの情報が含まれます。これらは、イベントと呼ばれます。

認証の失敗はログに記録されません。イベントログを生成するには、デバイスが Cloud IoT Core に対して認証されている必要があります。

デバイス イベントのライフサイクル

すべての Cloud IoT Core デバイスは、次のイベントがある似たライフサイクルに従います。これらのイベントの一部とその基盤となる詳細情報は、デバイスログに記録されます。

  1. Cloud IoT Core への接続。
  2. テレメトリーやステート イベントの送受信。
  3. Cloud IoT Core との接続の切断または中断。

発生したイベントがログに記録される方法は、デバイスが MQTT ブリッジを使用しているか、HTTP ブリッジを使用しているかによって決まります。

デバイスのアクティビティをロギングする

Cloud IoT Core では、「ログレベル」を使用して、Cloud Logging に送信するデバイス イベントが指定されます。デバイスのログレベルは、1 つのレジストリとそのすべてのデバイスか、個々のデバイスに対して設定できます。レジストリに設定されたログレベルは、レジストリ内のすべてのデバイスに適用されます。個々のデバイスに設定されたログレベルは、レジストリの設定よりも優先されます。

次の表に、使用可能なデバイスのログレベルを示します。

ログレベル 説明
なし デバイスのイベントログは収集されません。
ERROR 失敗したパブリッシュなど、すべての ERROR イベントを取り込みます。ERROR イベントの完全なリストについては、ログに記録されるデバイス イベントの一覧をご覧ください。
INFO(MQTT のみ) MQTT を介した接続と切断など、すべての INFO イベントを取り込みます。また、すべての ERROR イベントも取り込みます。INFO イベントの完全なリストについては、ログに記録されるデバイス イベントの一覧をご覧ください。
DEBUG すべての DEBUG イベント(パブリッシュ、サブスクライブ、ハートビートなど)を取り込みます。個別のデバイスの問題の特定に役立ちます。また、ERROR イベントと INFO イベントも取り込みます。DEBUG イベントの完全なリストについては、ログに記録されるデバイス イベントの一覧をご覧ください。詳細については、デバイスのデバッグ ロギングをご覧ください。

ログに記録されたデバイス イベントのリスト

次の表に、以下の項目を示します。

  • ログに記録されるデバイス イベント。
  • Cloud Logging に記録されたイベントの eventType
  • 各イベントの、成功、失敗、またはその両方をログに記録するかどうか。
  • イベントをログに記録するために、レジストリまたはデバイスに設定する必要があるログレベル。

MQTT ブリッジ

デバイス イベント eventType 成功 失敗
サーバーへの認証 該当なし ログに記録されない* ログに記録されない
サーバーに接続 CONNECT INFO ERROR
サーバーから切断 DISCONNECT INFO ログに記録されない
ゲートウェイへのデバイスの接続 ATTACH_TO_GATEWAY INFO ERROR
ゲートウェイからのデバイスの接続解除 DETACH_FROM_GATEWAY INFO ERROR
サーバーにテレメトリーのイベントまたは状態の公開 PUBLISH/devices/{device-id}/events または /devices/{device-id}/state MQTT トピック上) DEBUG ERROR
構成の更新の受信 PUBLISH/devices/{device-id}/config MQTT トピック上) DEBUG ERROR
Pub/Sub 構成トピックの登録 SUBSCRIBE DEBUG ERROR
Pub/Sub 構成トピックの登録の解除 UNSUBSCRIBE DEBUG ERROR
サーバーから PUBACK を受信 PUBACK DEBUG ERROR
キープアライブ ping をサーバーに送信 PINGREQ DEBUG ERROR
コマンドをサーバーからデバイスに送信 PUBLISH DEBUG ERROR
コマンド PUBACK をサーバーに送信 PUBACK DEBUG ERROR

* MQTT 認証が成功すると、デバイスは Cloud IoT Core に接続し、「サーバーへの認証」イベントではなく CONNECT イベントをログに記録します。

HTTP ブリッジ

デバイス イベント methodName 成功 失敗
サーバーへの認証 該当なし ログに記録されない** ログに記録されない
テレメトリー イベントのパブリッシュ google.cloud.iot.v1.PublishEvent DEBUG ERROR
デバイスの状態を設定する google.cloud.iot.v1.SetDeviceState DEBUG ERROR
構成の更新の受信 google.cloud.iot.v1.GetDeviceConfig DEBUG ERROR

** HTTP 認証が成功すると、デバイスは Cloud IoT Core に接続され、関連するリクエスト メッセージ(構成が受信された場合は GET、メッセージが公開された場合は POST)がログに記録されます。

デバイスのロギングの有効化、変更、無効化

Cloud Console または gcloud ツールを使用してレジストリやデバイスを作成または編集するときに、Cloud Logging に報告されるログの種類を選択できます。

レジストリのログレベルを設定する

レジストリのデバイスログは、Cloud Console または gcloud を使用して有効化、変更、無効化できます。レジストリのログ設定は、レジストリ内のすべてのデバイスに自動的に適用されます。

Console

レジストリを作成または編集して、そのログレベルを設定するには、次の操作を行います。

  1. Cloud Console で、[レジストリ] ページに移動します。

    [レジストリ] ページに移動

  2. ページの上部にある [レジストリの作成] をクリックします。

    既存のレジストリを編集するには、[レジストリ] ページでその ID をクリックし、ページの上部にある [レジストリの編集] をクリックします。

  3. [Stackdriver Logging] で、ログレベルを選択します。

  4. [作成](新しいレジストリを作成する場合)または [更新](既存のレジストリを編集する場合)をクリックします。

gcloud

レジストリを作成してログレベルを設定するには、--log-level フラグを指定して gcloud iot registries create コマンドを実行します。

gcloud iot registries create REGISTRY_ID \
    --project=PROJECT_ID \
    --region=REGION \
    [--event-notification-config=topic=TOPIC,[subfolder=SUBFOLDER] [--event-notification-config=...]]
    [--state-pubsub-topic=STATE_PUBSUB_TOPIC] \
    --log-level={NONE|INFO|ERROR|DEBUG}

デバイスのログレベルを更新するには、--log-level フラグを指定して gcloud iot registries update コマンドを実行します。

gcloud iot registries update REGISTRY_ID \
    --project=PROJECT_ID \
    --region=REGION \
    --log-level={NONE|INFO|ERROR|DEBUG}

デバイスのログレベルを設定する

デバイスのデバイスログは、Cloud Console または gcloud を使用して有効化、変更、無効化できます。デバイスのログレベルによって、レジストリのログレベルはオーバーライドされます。

Console

新規または既存のデバイスのログレベルを設定するには、次の操作を行います。

  1. Cloud Console で、[レジストリ] ページに移動します。

    [レジストリ] ページに移動

  2. ゲートウェイの [レジストリ ID] をクリックします。

  3. 左側のレジストリ メニューで、[デバイス] をクリックします。

  4. 新しいデバイスを作成するには、[デバイスの作成] をクリックします。

    既存のデバイスを編集するには、[デバイス] ページでその ID をクリックし、つづいてページの上部にある [デバイスの編集] をクリックします。

  5. [Stackdriver Logging] で、ログレベルを選択します。

  6. [作成](新しいデバイスを作成する場合)または [更新](既存のデバイスを編集する場合)をクリックします。

gcloud

デバイスを作成してログレベルを設定するには、--log-level フラグを指定して gcloud iot devices create コマンドを実行します。

gcloud iot devices create DEVICE_ID \
    --project=PROJECT_ID \
    --region=REGION \
    --registry=REGISTRY_ID \
    --public-key path=PUBLIC_KEY,type=TYPE \
    --log-level={NONE|INFO|ERROR|DEBUG}

デバイスのログレベルを更新するには、--log-level フラグを指定して gcloud iot devices update コマンドを実行します。

gcloud iot devices update DEVICE_ID \
    --project=PROJECT_ID \
    --region=REGION \
    --registry=REGISTRY_ID \
    --log-level={NONE|INFO|ERROR|DEBUG}

ログの表示

プロジェクトのデバイス アクティビティ ログは、Google Cloud Console のログ エクスプローラで確認できます。ログ名メニューで、[device_activity] を選択します。

詳細については、ログ エクスプローラの使用をご覧ください。

API

Logging API を使用してログエントリを読み取る場合は、entries.list をご覧ください。

gcloud

gcloud を使用してログエントリを読み取る方法については、ログエントリの読み取りをご覧ください。

デバイスログをエクスポートする

デバイスログは、他の種類のログをエクスポートする場合と同じ方法でエクスポートできます。ログのエクスポート方法について詳しくは、ログのエクスポートをご覧ください。

次の例は、デバイスログをエクスポートする理由を示しています。

  • デバイスログを長期間保持する、またはより強力な検索機能を使用するには、デバイスログのコピーを Cloud Storage、BigQuery、または Pub/Sub にエクスポートします。Pub/Sub を使用すると、他のアプリケーション、他のリポジトリ、サードパーティ製品にエクスポートできます。

  • 組織全体のデバイスログを管理するには、組織内の一部またはすべてのプロジェクトからログをエクスポートできる集約エクスポート シンクを作成します。

デバイスのロギング上限

デバイスログの割り当てと上限は、プロジェクト レベルで適用されます。これらは、他の Cloud Logging の割り当てと上限とは別に測定され、カウントされます。デバイスのログ割り当てを使い切っても、他のサービスの Cloud Logging の割り当てには影響はありません。その逆も当てはまります。

デバイスログの割り当ては、次の 2 つの要因で決まります。

  • 1 秒間に記録されるデバイス イベントの数。イベントには、パブリッシュ、接続、切断などが含まれます。
  • 1 分間に記録されるデバイス イベントの合計サイズ(バイト単位)。

いずれかのデバイスログの割り当てを超えると、デバイスログは一時的に停止します。

デバイスログの割り当てと上限のリストについては、割り当てと上限をご覧ください。

おすすめの方法

デバイスのデバッグ ロギング

ログに記録されるデバイス イベントの一覧に示されているように、レジストリまたは個々のデバイスに DEBUG ログレベルを設定すると、大量のロギング情報が生成される可能性があります。そのため、多数のデバイスを含むレジストリでデバッグ ロギングを有効にすると、ログの速さと数量が原因でロギングするレコードが取りこぼされる可能性があります。

たとえば、100,000 台のデバイスがあるレジストリがあり、そのレジストリにデバッグのログレベルが設定されているとします。各デバイスが毎秒 1 つのテレメトリー イベントをパブリッシュすると、毎秒 100,000 イベント中 1,000 イベントしかログに記録されません。これは、割り当てと上限に示されているように、ログに記録されるエントリの最大数は毎秒 1,000 であるためです。

最適な結果を得るには、短時間のみまたは少数のデバイスについてデバッグ ロギングを有効にしてください。

ログ書き込み時のエラーのトラブルシューティング

プロジェクトで Google Cloud IoT Core API を最初に有効にするとき、そのプロジェクトの新しいサービス アカウントに、Cloud Logging へのログの書き込みを可能にするロール(cloudiot.serviceAgent)が自動的に割り当てられます。このデフォルトのロールを、後で関連プロジェクトのサービス アカウントから削除すると、エラーが発生する可能性があります。デバイスのアクティビティを Cloud Logging に書き込めない場合は、次の手順を行います。

  1. Google Cloud Console の IAM ページで、関連するプロジェクトのサービス アカウントのメンバーリストに Cloud IoT Core サービス エージェントのロールが表示されていることを確認します(末尾が @gcp-sa-cloudiot.iam.gserviceaccount.com のプロジェクト サービス アカウントを探します)。

  2. Cloud IoT Core サービス エージェント ロールが、メンバーリストにない場合は、gcloudを使用して、cloudiot.serviceAgent ロールを関連プロジェクトのサービス アカウントに追加します。このロールには、Cloud Logging にログを書き込む権限が含まれています。

    次のコマンドを実行すると、プロジェクトに cloudiot.serviceAgent ロールが追加されます。PROJECT_IDPROJECT_NUMBER を見つけるには、プロジェクトの識別をご覧ください。

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudiot.iam.gserviceaccount.com \
      --role=roles/cloudiot.serviceAgent