AWS IoT Core で AWS IoT ログレベルを設定するときに、ベストプラクティスに従ってコストとデータトラフィックを削減したいと考えています。
簡単な説明
**注:**以下の解決策は AWS IoT Core ログ v2 のみを対象としています。
どのような AWS IoT Core リソースをどのレベルで監視する必要があるかを把握しておくのがベストプラクティスです。AWS IoT Core リソースを分割し、各セグメントに適切なログレベルを割り当てます。リソースのデフォルトのログレベルまたは特定のログレベルを設定できます。
たとえば、ERROR や WARN など、詳細度の低いログレベルになるようにデフォルトのログ記録を設定します。デフォルトのログ記録を設定すると、その設定は、リソース固有のログ記録が設定されていないすべてのリソースに適用されます。INFO や DEBUG など、より詳細なレベルにするには、リソース固有のログ記録を設定します。THING_GROUP、CLIENT_ID、SOURCE_IP、または PRINCIPAL_ID など、さまざまなターゲットタイプのリソースレベルのログ記録を設定できます。
デフォルトのログ記録とリソース固有のログ記録は同時に使用できます。
**重要:**AWS IoT Core フリートのサイズによっては、ログレベルが詳細になるほどコストが高くなり、トラブルシューティングがさらに難しくなる可能性があります。より詳細なログレベルを有効にすると、データトラフィックも増加します。INFO または DEBUG は、一時的なトラブルシューティングにのみ使用するのがベストプラクティスです。トラブルシューティング後、ログレベルを詳細度の低いレベルにリセットしてください。ログレベルの詳細については、「ログレベル」を参照してください。
解決策
前提条件:
- AWS IoT 管理者権限認証情報を使用して、ローカルマシンに AWS コマンドラインインターフェイス (AWS CLI) をインストールしました。AWS CLI のデフォルトの AWS リージョンは、対象のリージョンを指している必要があります。
- 登録済みまたは未登録の AWS IoT のモノとして、クライアントを AWS IoT Core に接続する必要があります。
**注:**AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI エラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
デフォルトのログ記録を使用してコストとデータトラフィックを削減する
AWS IoT ログのデフォルトのログレベルを ERROR または WARN に設定すると、ログエラーや警告を確認できます。これらの詳細レベルにより、コストとデータトラフィックを削減できます。詳細については、「AWS IoT Core のデフォルトのログ設定はどのように設定すればよいですか?」を参照してください。
**注:**AWS サポートケースを作成する場合は、AWS IoT Core ログを提供する必要があります。
リソースを手動で記録する
リソースを手動でログに記録する方法については、「AWS IoT Core の特定のリソースのログレベルを手動で設定する方法を教えてください。」を参照してください。
リソースを動的にログに記録する
リソースを動的にログに記録する方法の詳細については、「AWS IoT Core の特定のリソースのログレベルを動的に設定する方法を教えてください。」を参照してください。
ログエントリを監視する
Amazon CloudWatch コンソールまたは AWS CLI のいずれかを使用して AWS IoT ログエントリを監視できます:
CloudWatch コンソール
CloudWatch コンソールで AWS IoT ログを監視するには、「CloudWatch コンソールでの AWS IoT ログの表示」を参照してください。
AWS CLI
AWS CLI でログを取得するには、filter-log-events コマンドを実行します。YourStartTimeInMilliseconds をミリ秒単位の開始時間に置き換えます。
aws logs filter-log-events --log-group-name AWSIotLogsV2 \
--start-time YourStartTimeInMilliseconds
注:****--filter-pattern を使用して特定のログ属性を検索できます。詳細については、「メトリクスフィルター、サブスクリプションフィルター、フィルターログイベント、およびライブテールのフィルターパターン構文」を参照してください。
LogLevel 値は、ターゲットに設定されているログレベルです。この例では、ターゲットのログレベルは INFO です。
{
"timestamp": "2017-08-10 15:37:23.476",
"logLevel": "INFO",
"traceId": "20b23f3f-d7f1-feae-169f-82263394fbdb",
"accountId": "123456789012",
"status": "Success",
"eventType": "Connect",
"protocol": "MQTT",
"clientId": "abf27092886e49a8a5c1922749736453",
"principalId": "145179c40e2219e18a909d896a5340b74cf97a39641beec2fc3eeafc5a123456",
"sourceIp": "123.123.123.123",
"sourcePort": 13490
}
**注:**CLIENT_ID は、MQTT または WSS プロトコル経由の MQTT を使用して AWS IoT Core に接続する場合にのみ使用できます。HTTPS プロトコルはクライアント ID をサポートしていません。代わりに SOURCE_IP または RINCIPAL_ID のターゲットタイプを使用してください。
ログレベルの編集または削除
デフォルトのログレベルとリソース固有のログレベルはいつでも変更できます。変更が完了するまでに最大 10 分かかる場合があります。
delete-v2-logging-level AWS CLI コマンドを実行します。YourTargetName をターゲットの名前に置き換えてください。
aws iot delete-v2-logging-level \
--target-type "THING_GROUP | CLIENT_ID | SOURCE_IP | PRINCIPAL_ID" \
--target-name YourTargetName
関連情報
AWS IoT デバイス管理のエンドポイントと割り当て
AWS IoT の監視
AWS IoT Device Management 料金表