AWS IoT Core で AWS IoT ログを設定する際は、ベストプラクティスに従ってコストとデータトラフィックを削減したいと考えています。
簡単な説明
注: この記事は、AWS IoT Core ログの V2 のみを対象とした記事です。
どのような AWS IoT Core リソースをどのレベルで監視する必要があるかを把握しておくのがベストプラクティスです。AWS IoT Core リソースをセグメント化し、各セグメントに対して監視のニーズに合ったログレベルを割り当てることができます。AWS IoT Core ログでは、リソースのデフォルトのログレベルと特定のログレベルを設定できます。
以下を設定するのがベストプラクティスです。
- デフォルトのロギングでは、ERROR レベルや WARN レベルなど、詳細度の低いログレベルに設定されます。リソース固有のロギングが設定されている場合を除き、デフォルトのロギングが設定されていれば、それがすべてのリソースに適用されます。
- リソース固有のロギング (手動または動的) で、より詳細なレベル (INFO や DEBUG など) を設定します。これは、THING_GROUP、CLIENT_ID、SOURCE_IP、PRINCIPAL_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 を使用していることを確認してください。
デフォルトのロギング
AWS IoT ログのデフォルトのログレベルを ERROR または WARN に設定すると、ログエラーや警告を確認できます。デフォルトをより詳細度の低いレベルに設定すると、コストとデータトラフィックが削減されます。詳細については、「AWS IoT Core のデフォルトのログ設定はどう設定すればいいですか?」を参照してください。
注: ケースを作成する際は、AWS IoT Core のログを AWS サポートに提供する必要があります。この情報は顧客データと見なされるため、AWS サポートはアクセスできません。
特定のリソースを手動でログに記録する
AWS IoT Core ログでは、以下の両方のリソース固有のログレベルを設定可能です。
- モノとして登録されたクライアント
- モノとして登録されていないクライアント
詳細については、「AWS IoT Core の特定のリソースのログレベルを手動で設定する方法」を参照してください。
モノとして登録されたクライアントの場合、定義されたログレベルで複数のモノのリソース固有のロギングを管理できます。モノのグループに手動でアイテムを追加したり、モノのグループからアイテムを削除したりすることもできます。クライアントは AWS IoT Core に IoT のモノとして登録され、同じクライアント ID に関連付けられたモノの名前を使用して接続する必要があります。その後、ターゲットタイプが THING\ _GROUP のモノの静的グループを使用してモノのグループを管理できます。
注: モノの静的グループを使用する場合は、割り当て制限を考慮する必要があります。詳細については、「AWS IoT Device Managementのエンドポイントおよびクォータ」を参照してください。
モノとして登録されていないクライアントについては、クライアント属性をターゲットタイプとしてリソースを管理できます。これらの属性には、CLIENT_ID、SOURCE_IP、PRINCIPAL_ID が含まれます。
特定のリソースを自動的にログに記録する
モノの動的グループを使用すると、モノのリソース固有のロギングレベルを自動的に設定できます。クライアントは IoT のモノとして登録され、モノの名前と同じクライアント ID で接続する必要があります。モノの動的グループは、フリートインデックスのクエリを使用して、クエリ条件を満たすものを継続的に検索し、グループに自動的に追加します。詳細については、「AWS IoT Core で、特定のリソースに対して動的にロギングレベルを設定する方法」を参照してください。
**注:**モノの動的グループを作成または更新する場合、モノの動的グループに追加できるモノでも、自動的に追加されない場合があります。詳細については、「成功したコマンドはエラーを記録できる」を参照してください。
ログエントリを監視する
Amazon CloudWatch コンソールまたは AWS CLI のいずれかを使用して AWS IoT ログエントリを監視できます:
CloudWatch コンソール
1. CloudWatch コンソールを開きます。
2. ナビゲーションペインの [ログ] で、[ロググループ] を選択します。
3. フィルターのテキストボックスに「AWSIoTLogsV2」と入力し、Enter キーを押します。
**注:**AWSIoTLogsV2 ロググループは、AWS IoT Core でロギングを正常に有効にするまで CloudWatch コンソールには表示されません。また、ロググループが表示されるようにするには、ログエントリが AWS IoT のオペレーションによって書き込まれる必要があります。
4. [AWSIoTLogsV2] を選択します。
5. [すべて検索] を選択します。アカウント用に生成された AWS IoT ログの完全なリストが表示されます。
AWS CLI
次のコマンドを実行して AWS CLI で AWS IoT ログを取得します:
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 分かかる場合があります。
AWS CLI で delete-v2-logging-level コマンドを実行し、--target-type フィールドと --target-name フィールドを次のように編集します:
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 料金表