AWS IoT Core ログにリソース固有のロギングを動的に設定したいと考えています。
簡単な説明
注: この記事は、AWS IoT Core ログの V2 のみを対象としています。
AWS IoT Core のログを使用すると、特定のリソースのログレベルを動的に設定することができます。モノの動的グループを使用すると、リソース固有のログレベルを設定できます。クライアントをモノとして登録する必要があります。そのクライアントは、モノの名前と同じクライアント ID で接続する必要があります。モノの動的グループは、フリートインデックスのクエリを使用して、クエリ条件を満たすものを継続的に検索し、グループに自動的に追加します。
デフォルトのロギングを低い詳細レベルに設定し、リソース固有のロギングをより高い詳細レベルに設定するのがベストプラクティスです。ログの詳細度レベルには、DISABLED (最低)、ERROR、WARN、INFO、DEBUG (最高) が含まれます。
モノの動的グループを作成または更新する場合、モノの動的グループに追加できるモノでも、自動的に追加されない場合があります。詳細については、「成功したコマンドはエラーを記録できる」を参照してください。
重要: AWS IoT Core のフリートサイズによっては、より詳細なログレベルを有効にすると、コストが大きくなり、トラブルシューティングが難しくなる場合があります。INFO または DEBUG は、トラブルシューティング時の一時的な対策としてのみ使用してください。トラブルシューティングが完了したら、ロギングレベルを詳細度の低い設定に戻す必要があります。
解決方法
前提条件
AWS コマンドラインインターフェイス (AWS CLI) が IoT の管理者権限の認証情報でローカルにインストールされていることを確認してください。AWS CLI のデフォルトの AWS リージョンは、対象の AWS リージョンを指している必要があります。登録済みの IoT のモノとして、クライアントが AWS IoT Core エンドポイントに接続されており、それとやり取りする必要があります。
注: AWS CLI コマンドの実行中にエラーが発生した場合は、最新バージョンの AWS CLI を使用しているかどうかを確認してください。
特定のリソースの自動ロギングを設定する
1. AWS IoT のモノを作成し、それにモノの属性を追加します。
注: 必要に応じてモノの属性をさらに追加できます。その後、モノの動的グループのクエリを変更してこれらを検索できます。
2. モノのインデックスを有効にします。
3. DescribeIndex コマンドを実行して、モノのインデックスに ACTIVE indexStatus 属性があることを確認します:
aws iot describe-index --index-name "AWS_Things"
4. AWS IoT コンソールまたは AWS CLI を使用してモノの動的グループを作成します。
AWS IoT コンソール
1. フリートインデックスが有効になっていない場合は、有効にします。
2. AWS IoT コンソールにサインインします。
3. ナビゲーションペインで [すべてのデバイス] を選択し、[モノのグループ] を選択します。
4. [モノグループを作成] を選択します。
5. [モノのグループタイプ] で、[モノの動的グループを作成] を選択し、[次へ] を選択します。
6. [モノのグループ名] には、「logging_level_debug_dynamic」と入力します。次に、[モノグループを作成] を選択します。
注: logging_level_debug_dynamic は、自分のモノのグループ名に置き換えます。
7. [クエリ] に「attributes.firmware:1」と入力し、Enter キーを押して検索クエリステートメントを適用します。
注: firmware:1 は、クエリに使用するモノの属性と値に置き換えます。
8. クエリ条件に一致するものをすべて表示するには、[クエリをプレビュー] を選択します。
9. [モノグループを作成] を選択します。
AWS CLI
1. CreateDynamicThingGroup コマンドを実行して、モノの動的グループを作成します:
注: モノの動的グループの作成は瞬時に行われるわけではなく、完了するまでに時間がかかる場合があります。詳しくは、「動的なモノ生成グループを作る」を参照してください。
aws iot create-dynamic-thing-group \
--thing-group-name "logging_level_debug_dynamic" \
--query-string "attributes.firmware:1"
**注:**前の例では、firmware:1 は、クエリに使用する属性と値に置き換えます。logging_level_debug_dynamic は、自分のモノのグループ名に置き換えます。
出力は次のメッセージのようになります:
{
"thingGroupName": "logging_level_debug_dynamic",
"thingGroupArn": "arn:aws:iot:eu-west-1:123456789012:thinggroup/logging_level_debug_dynamic",
"thingGroupId": "b8f96cc3-f36b-4da2-b0f8-e28f5a123456",
"indexName": "AWS_Things",
"queryString": "attributes.firmware:1",
"queryVersion": "2017-09-30"
}
2. DescribeThingGroup コマンドを実行して、モノの動的グループがアクティブであることを確認します:
aws iot describe-thing-group --thing-group-name "logging_level_debug_dynamic"
注: 前の例では、logging_level_debug_dynamic は、自分のモノのグループ名に置き換えます。
出力は次のメッセージのようになります:
{
"thingGroupName": "logging_level_debug_dynamic",
"thingGroupId": "b8f96cc3-f36b-4da2-b0f8-e28f5a123456",
"thingGroupArn": "arn:aws:iot:eu-west-1:123456789012:thinggroup/logging_level_debug_dynamic",
"version": 1,
"thingGroupProperties": {},
"thingGroupMetadata": {
"creationDate": "2022-11-30T12:37:19.980000+00:00"
},
"indexName": "AWS_Things",
"queryString": "attributes.firmware:1",
"queryVersion": "2017-09-30",
"status": "ACTIVE"
}
3. SetV2LoggingLevel コマンドを実行して、特定のクライアントのロギングレベルを設定します。ログレベルの設定が完了するまでに最大 10 分かかる場合があります。
aws iot set-v2-logging-level \
--log-target targetType=THING_GROUP,targetName=logging_level_debug_dynamic \
--log-level DEBUG
注: 前の例では、logging_level_debug_dynamic は、モノの動的グループ名に置き換えます。
出力は次のメッセージのようになります。デフォルトのロギングが出力に含まれており、設定に基づく詳細が含まれます。設定した他のログレベルも表示されます。
{
"logTargetConfigurations": [{
"logTarget": {
"targetType": "DEFAULT"
},
"logLevel": "WARN"
},
{
"logTarget": {
"targetType": "THING_GROUP",
"targetName": "
logging_level_debug_dynamic "
},
"logLevel": "DEBUG"
}
]
}
生成されたログを監視する
IoT ログに課題や問題がないか監視するのがベストプラクティスです。AWS CloudWatch Logs コンソールまたは AWS CLI のいずれかを使用して AWS IoT Core のログを監視できます。詳細については、「AWS IoT Core で AWS IoT ログのロギングレベルを最適に管理する方法」の「ログエントリの監視」セクションをご覧ください。
関連情報
AWS IoT Device Management 料金表
AWS IoT Core のデフォルトのログ設定はどのように設定すればよいですか?
AWS IoT Core の特定のリソースのログレベルを手動で設定する方法を教えてください。