AWS IoT のログ記録の設定 - AWS IoT Core

AWS IoT のログ記録の設定

AWS IoT アクティビティの監視およびログ記録を行うには、AWS IoT コンソール、CLI、または API を使用してログ記録を有効にしておく必要があります。

ログ記録は、すべての AWS IoT または特定のモノグループのみを対象にして有効にすることができます。AWS IoT コンソール、CLI、または API を使用して AWS IoT ログ記録を設定できます。ただし、特定のモノグループのログ記録を設定するには、CLI または API を使用する必要があります。

AWS IoT ログ記録の設定方法を検討する場合、特に指定がない限り、AWS IoT アクティビティのログ記録方法はデフォルトのログ記録設定によって決まります。最初は、デフォルトのログレベル (INFO または DEBUG) を使用して、詳細なログを取得できます。初期ログを確認した後、デフォルトのログレベルから WARNERROR などの低い詳細レベルに変更し、注意が必要なリソースに対しては、詳細レベルを高くしてリソース固有のログレベルを設定できます。ログレベルはいつでも変更できます。

AWS IoT Greengrass のログとモニタリングの詳細については、「AWS IoT Greengrass でのログとモニタリング」を参照してください。2023 年 6 月 30 日の時点で、AWS IoT Greengrass Core ソフトウェアは AWS IoT Greengrass Version 2 に移行されました。

ログ記録ロールとポリシーの構成

AWS IoT でログ記録を有効にする前に、IAM ロールとポリシーを作成する必要があります。これらは、ユーザーに代わって AWS IoT アクティビティをモニタリングするためのアクセス許可を AWS に付与するために使用します。AWS IoT コンソールの Logs セクションで必要なポリシーを使用して IAM ロールを生成することもできます。

注記

AWS IoT ログ記録を有効にする前に、CloudWatch Logs へのアクセス権限を理解しておく必要があります。CloudWatch Logs に対するアクセス許可のあるユーザーはデバイスからのデバッグ情報を表示できます。詳細については、「Amazon CloudWatch Logs に対する認証とアクセスコントロール」を参照してください。

負荷テストのために AWS IoT Core で高いトラフィックパターンが予想される場合は、IoT ログ記録をオフにしてスロットリングを防ぐことを検討してください。大量のトラフィックが検出された場合、当社のサービスはアカウントでのログ記録を無効にする場合があります。

以下に、AWS IoT Core リソースのログ記録ロールとポリシーを作成する方法を示します。AWS IoT Core for LoRaWAN の IAM ログ記録ロールとポリシーを作成する方法については、AWS IoT Wireless 用のログ記録ロールとポリシーを作成する を参照してください。

ログ記録ロールの作成

ログ記録ロールを作成するには、IAM コンソールの [Roles] (ロール) ハブを開き、[Create role] (ロールの作成) を選択します。

  1. [Select trusted entity] (信頼されたエンティティを選択) で、[AWS Service] (AWS サービス) を選択します。次に、[Use case] (ユースケース) で [IoT] を選択します。[IoT] が表示されない場合は、[他の AWS サービスのユースケース] ドロップダウンメニューで [IoT] と入力して検索してください。[Next] (次へ) を選択します。

  2. [Add permissions] (権限の追加) ページでは、サービスロールに自動的に付加されるポリシーが表示されます。[Next] (次へ) をクリックします。

  3. [Name, review, and create] (名前、確認、作成) ページで、ロールの [Role name] (ロール名) と [Role description] (ロールの説明) を入力し、次に [Create role] (ロールの作成) を選択します。

  4. [Roles] (ロール) のリストで、作成したロールを見つけて開き、AWS IoT でデフォルトのログ記録を設定する (コンソール) をするときに使用する [Role ARN] (ロール ARN) (logging-role-arn) をコピーします。

ログ記録ロールのポリシー

以下のポリシードキュメントは、お客様に代わって AWS IoT から CloudWatch にログエントリを送信するためのロールポリシーと信頼ポリシーを示しています。また、AWS IoT Core for LoRaWAN がログエントリを送信することを許可した場合は、両方のアクティビティを記録したポリシードキュメントが作成されています。AWS IoT Core for LoRaWAN の IAM ログ記録ロールとポリシーを作成する方法については、AWS IoT Wireless 用のログ記録ロールとポリシーを作成する を参照してください。

注記

これらのドキュメントは、ログ記録ロールを作成したときに作成されたものです。ドキュメントには、変数 ${partition} ${region}${accountId} があり、これらを自分の値に置き換える必要があります。

ロールポリシー:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:PutMetricFilter", "logs:PutRetentionPolicy", "iot:GetLoggingOptions", "iot:SetLoggingOptions", "iot:SetV2LoggingOptions", "iot:GetV2LoggingOptions", "iot:SetV2LoggingLevel", "iot:ListV2LoggingLevels", "iot:DeleteV2LoggingLevel" ], "Resource": [ "arn:${partition}:logs:${region}:${accountId}:log-group:AWSIotLogsV2:*" ] } ] }

AWS IoT Core アクティビティのみをログに記録する信頼ポリシー:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "iot.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

AWS IoT でデフォルトのログ記録を設定する (コンソール)

ここでは、AWS IoT コンソールを使用してすべての AWS IoT に対するログ記録を設定する方法について説明します。特定のモノグループのみを対象にしてログ記録を設定するには、CLI または API を使用する必要があります。特定のモノグループのログ記録の設定については、「AWS IoT でリソース固有のログ記録を設定する (CLI)」を参照してください。

AWS IoT コンソールを使用して、すべての AWS IoT に対するデフォルトのログ記録を設定するには
  1. AWS IoT コンソールにサインインします。詳細については、「AWS IoT コンソールを開きます。」を参照してください。

  2. 左のナビゲーションペインの [設定] を選択します。[Settings] (設定) ページの [Logs] (ログ) セクションで、[Manage logs] (ログの管理) を選択します。

    [ログ] ページには、すべての AWS IoT で使用されるログ記録ロールと詳細レベルが表示されます。

  3. [Logs] (ログ) ページで、[Select role] (ログの選択) を選択し、ログ記録ロールの作成 で作成したロールを指定するか、[Create Role] (ロールの作成) を選択してログ記録に使用するロールを作成します。

  4. [Log level] (ログレベル) を選択し、CloudWatch のログに表示するログエントリの詳細レベルを指定します。

  5. [更新] を選択して変更を保存します。

ログ記録を有効にしたら、CloudWatch コンソールでの AWS IoT ログの表示 にアクセスして、ログエントリの表示方法の詳細を確認します。

AWS IoT でデフォルトのログ記録を設定する (CLI)

ここでは、CLI を使用して AWS IoT 全体のログ記録を設定する方法について説明します。

注記

使用するロールの Amazon リソースネーム (ARN) が必要です。ログ記録に使用するロールを作成する必要がある場合は、先へ進む前に「ログ記録ロールの作成」を参照してください。

API を呼び出すために使用されるプリンシパルには、ログ記録ロール用のロールのアクセス権限の適用が必要です。

この手順は、ここに示す CLI コマンドに対応する AWS API のメソッドを使用することにより、API で行うこともできます。

CLI を使用して AWS IoT のデフォルトログ記録を設定するには
  1. set-v2-logging-options コマンドを使用して、アカウントのログ記録オプションを設定します。

    aws iot set-v2-logging-options \ --role-arn logging-role-arn \ --default-log-level log-level

    各パラメータの意味は次のとおりです。

    --role-arn

    CloudWatch Logs でログに書き込むアクセス許可を AWS IoT に付与するロール ARN。

    --default-log-level

    使用するログレベル。有効な値は ERRORWARNINFODEBUGDISABLED です。

    --no-disable-all-logs

    すべての AWS IoT ログ記録を有効にするオプションのパラメータ。このパラメータは、現在無効になっているログ記録を有効にする場合に使用します。

    --disable-all-logs

    すべての AWS IoT ログ記録を無効にするオプションのパラメータ。このパラメータは、現在有効になっているログ記録を無効にする場合に使用します。

  2. 現在のログ記録オプションを取得するには、get-v2-logging-options コマンドを使用します。

    aws iot get-v2-logging-options

ログ記録を有効にしたら、CloudWatch コンソールでの AWS IoT ログの表示 にアクセスして、ログエントリの表示方法の詳細を確認します。

注記

AWS IoT では、アカウント全体のログ記録を設定および取得するための以前のコマンド (set-logging-options および get-logging-options) が引き続きサポートされています。これらのコマンドを使用すると、作成されるログには JSON ペイロードではなくプレーンテキストが含まれ、一般的にログ記録のレイテンシーが高くなることに注意してください。これらの古いコマンドの実装は今後強化されません。「v2」バージョンを使用してログ記録オプションを設定し、可能な場合は、古いバージョンを使用するレガシーアプリケーションを変更することをお勧めします。

AWS IoT でリソース固有のログ記録を設定する (CLI)

ここでは、CLI を使用して AWS IoT でリソース固有のログ記録を設定する方法について説明します。リソース固有のログ記録では、特定のモノのグループに特定のログ記録レベルを指定できます。

モノグループには別のモノグループを含めて、階層的な関係を作成することができます。この手順では、単一のモノグループのログ記録を設定する方法について説明します。階層内の親モノグループにこの手順を適用することにより、階層内のすべてのモノグループに対してログ記録を設定することもできます。この手順を子モノグループに適用して、親のログ記録設定をオーバーライドすることもできます。

モノグループに加えて、デバイスのクライアント ID、ソース IP、プリンシパル ID などのターゲットをログに記録することもできます。

注記

使用するロールの Amazon リソースネーム (ARN) が必要です。ログ記録に使用するロールを作成する必要がある場合は、先へ進む前に「ログ記録ロールの作成」を参照してください。

API を呼び出すために使用されるプリンシパルには、ログ記録ロール用のロールのアクセス権限の適用が必要です。

この手順は、ここに示す CLI コマンドに対応する AWS API のメソッドを使用することにより、API で行うこともできます。

CLI を使用して AWS IoT でリソース固有のログ記録を設定するには
  1. set-v2-logging-options コマンドを使用して、アカウントのログ記録オプションを設定します。

    aws iot set-v2-logging-options \ --role-arn logging-role-arn \ --default-log-level log-level

    各パラメータの意味は次のとおりです。

    --role-arn

    CloudWatch Logs でログに書き込むアクセス許可を AWS IoT に付与するロール ARN。

    --default-log-level

    使用するログレベル。有効な値は ERRORWARNINFODEBUGDISABLED です。

    --no-disable-all-logs

    すべての AWS IoT ログ記録を有効にするオプションのパラメータ。このパラメータは、現在無効になっているログ記録を有効にする場合に使用します。

    --disable-all-logs

    すべての AWS IoT ログ記録を無効にするオプションのパラメータ。このパラメータは、現在有効になっているログ記録を無効にする場合に使用します。

  2. モノグループのリソース固有のログ記録を設定するには、set-v2-logging-level コマンドを使用します。

    aws iot set-v2-logging-level \ --log-target targetType=THING_GROUP,targetName=thing_group_name \ --log-level log_level
    --log-target

    ログ記録を設定するリソースの名前とタイプ。target_typeの値は次のいずれかである必要があります : THING_GROUP | CLIENT_ID | SOURCE_IP | PRINCIPAL_ID。log-target パラメータ値には、前のコマンド例で示したテキストや、次の例のような JSON 文字列を指定できます。

    aws iot set-v2-logging-level \ --log-target '{"targetType": "THING_GROUP","targetName": "thing_group_name"}' \ --log-level log_level
    --log-level

    指定されたリソースのログを生成する際に使用されるログ記録レベル。有効な値: DEBUGINFOERRORWARNDISABLED

    aws iot set-v2-logging-level \ --log-target targetType=CLIENT_ID,targetName=ClientId1 \ --log-level DEBUG
  3. 現在設定されているログ記録レベルを一覧表示するには、list-v2-logging-levels コマンドを使用します。

    aws iot list-v2-logging-levels
  4. 次の例のように、リソース固有のログ記録レベルを削除するには、delete-v2-logging-level コマンドを使用します。

    aws iot delete-v2-logging-level \ --target-type "THING_GROUP" \ --target-name "thing_group_name"
    aws iot delete-v2-logging-level \ --target-type=CLIENT_ID --target-name=ClientId1
    --targetType

    target_typeの値は次のいずれかである必要があります : THING_GROUP | CLIENT_ID | SOURCE_IP | PRINCIPAL_ID

    --targetName

    ログ記録レベルを削除するモノグループの名前。

ログ記録を有効にしたら、CloudWatch コンソールでの AWS IoT ログの表示 にアクセスして、ログエントリの表示方法の詳細を確認します。

ログレベル

以下のログレベルは、ログにどのイベントを記録するかを決定します。デフォルトおよびリソース固有のログレベルに適用されます。

ERROR

オペレーションの失敗につながるすべてのエラー。

ログには ERROR 情報のみが含まれます。

WARN

オペレーションの失敗につながるわけではないが、システムの不整合を引き起こす可能性のあるすべての要因。

ログには ERROR および WARN 情報が含まれます。

INFO

モノのフローに関する概要。

ログには INFO、ERROR および WARN 情報が含まれます。

DEBUG

問題のデバッグに役立つ場合のある情報。

ログには DEBUG、INFO、ERROR、WARN 情報が含まれます。

DISABLED

すべてのロギングが無効です。