Cloud IoT Core は、必要に応じてデバイス アクティビティ ログを Cloud Logging に送信できます。デバイスのアクティビティ ログには、デバイスの接続やエラーなどの情報が含まれます。これらはイベントと呼ばれます。
認証の失敗はログに記録されません。イベントログを生成するには、デバイスが Cloud IoT Core に対して認証されている必要があります。
デバイス イベントのライフサイクル
すべての Cloud IoT Core デバイスは、次のイベントにより同様のライフサイクルに従います。これらのイベントの一部とその基盤となる詳細情報は、デバイスログに記録されます。
- Cloud IoT Core への接続。
- テレメトリーやステート イベントの送受信。
- Cloud IoT Core との接続の切断または中断。
発生したイベントがログに記録される方法は、デバイスが MQTT ブリッジを使用しているか、HTTP ブリッジを使用しているかによって決まります。
デバイスのアクティビティをロギングする
Cloud IoT Core は、ログレベルを使用して、Cloud Logging に送信されるデバイス イベントを決定します。デバイスログ レベルは、レジストリとそのすべてのデバイス、または個々のデバイスに対して設定できます。レジストリのログレベルは、レジストリ内のすべてのデバイスに適用されます。個々のデバイスに設定されたログレベルは、レジストリの設定よりも優先されます。
次の表に、使用可能なデバイスのログレベルを示します。
ログレベル | 説明 |
---|---|
なし | デバイスのイベントログは収集されません。 |
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
)がログに記録されます。
デバイスのロギングの有効化、変更、無効化
Google Cloud Console または gcloud ツールを使用してレジストリまたはデバイスを作成または編集するときに、Cloud Logging に報告されるログの種類を選択できます。
レジストリのログレベルを設定する
Google Cloud Console または gcloud を使用して、レジストリのデバイスログを有効化、変更、無効化できます。レジストリのログ設定は、レジストリ内のすべてのデバイスに自動的に適用されます。
Console
レジストリを作成または編集して、そのログレベルを設定するには、次の操作を行います。
- Google Cloud コンソールで、[レジストリ] ページに移動します。
ページの上部にある [レジストリの作成] をクリックします。
既存のレジストリを編集するには、[レジストリ] ページでその ID をクリックし、ページの上部にある [レジストリの編集] をクリックします。
[Stackdriver Logging] で、ログレベルを選択します。
[作成](新しいレジストリを作成する場合)または [更新](既存のレジストリを編集する場合)をクリックします。
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}
デバイスのログレベルを設定する
デバイスのデバイスログは、Google Cloud コンソールまたは gcloud を使用して有効化、変更、無効化できます。デバイスのログレベルによって、レジストリのログレベルはオーバーライドされます。
Console
新規または既存のデバイスのログレベルを設定するには、次の操作を行います。
- Google Cloud コンソールで、[レジストリ] ページに移動します。
ゲートウェイの [レジストリ ID] をクリックします。
左側のレジストリ メニューで、[デバイス] をクリックします。
新しいデバイスを作成するには、[デバイスの作成] をクリックします。
既存のデバイスを編集するには、[デバイス] ページでその ID をクリックし、つづいてページの上部にある [デバイスの編集] をクリックします。
[Stackdriver Logging] で、ログレベルを選択します。
[作成](新しいデバイスを作成する場合)または [更新](既存のデバイスを編集する場合)をクリックします。
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 コンソールのログ エクスプローラで確認できます。ログ名メニューで [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 に書き込めない場合は、次の手順を行います。
Google Cloud Console の IAM ページで、関連するプロジェクトのサービス アカウントのメンバーリストに Cloud IoT Core サービス エージェントのロールが表示されていることを確認します(末尾が
@gcp-sa-cloudiot.iam.gserviceaccount.com
のプロジェクト サービス アカウントを探します)。次の場合:Cloud IoT Core サービス エージェント役割はメンバーlist、usegcloudを使用して、
cloudiot.serviceAgent
役割を割り当てます。このロールには、Cloud Logging にログを書き込む権限が含まれています。次のコマンドを実行すると、プロジェクトに
cloudiot.serviceAgent
ロールが追加されます。PROJECT_ID と PROJECT_NUMBER を見つけるには、プロジェクトの識別をご覧ください。gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-cloudiot.iam.gserviceaccount.com \ --role=roles/cloudiot.serviceAgent