デバッグやトラブルシューティングにうれしいアップデート!IoT CoreのログレベルがクライアントID、ソースIP、プリンシパルIDごとに個別設定可能になりました
MAD事業部@大阪の岩田です。先日のアップデートによってAWS IoTのログレベルが
- クライアントID
- ソースIP
- プリンシパルID
ごとに個別設定可能になりました。さっそく試してみたので手順等簡単にご紹介します。
何がうれしいのか
IoT Coreは
- ERROR(エラー)
- WARN(警告)
- INFO(情報)
- DEBUG(デバッグ)
- DISABLED(無効)
5つのログレベルがサポートされています。DEBUGやINFOレベルでは非常に多くの情報がログに出力されるため、デバッグやトラブルシューティングを行う際に非常に強力ではあるのですが、多くの情報が出力されるがゆえに多数のクライアントがIoT Coreに接続する環境ではノイズが多くなりすぎるという問題があります。
従来でも「モノのグループ」を指定して個別にログレベルを指定できましたが、今回のアップデートによってさらに細かくログレベルが制御できるようになりました。これによって例えば
- クラスメソッドのGIPから接続してきたクライアントだけDEBUGレベルでログを出力する
- 開発者向けに発行したクライアント証明書を利用して接続してきたクライアントだけDEBUGレベルでログを出力する
といった構成が取れるようになり、デバッグやトラブルシューティングがより効率よく実施できるようになりました。
やってみる
早速試してみます。今回は特定のクライアントIDのみログレベルをDEBUGに設定してみたいと思います。リソースを指定したログレベルの設定はv2形式のログが前提となります。もしv2形式を利用していない場合はv2形式を利用するよう事前に設定変更を行って下さい。
ログレベルERRORの状態でPub/Subしてみる
まずIoT Core全体のログレベルを確認します。現在はERRORレベルが設定されています。
この状態でMQTT Xを使ってAWS IoTに接続し、適当にPub/Subしてみます。
CloudWatch Logsのログを確認しても特にログは出力されていません。ログレベルがERRORなので期待値通りです。
リソースを指定してログレベルをDEBUGに変えてPub/Subしてみる
ここからが本題です。特定のリソースを指定してログレベルをDEBUGに変更後、先程と同様にPub/Subしてみます。まずはクライアントIDを指定してログべレベルをDEBUGに変更してみます。
ログレベルの設定はAWS CLIからset-v2-logging-level
を実行して設定を行います。オプションのtargetType
はDEFAULT
、THING_GROUP
に加え、今回のアップデートでCLIENT_ID
、SOURCE_IP
、PRINCIPAL_ID
が指定できるようになりました。targetName
は指定したtargetType
に合わせたリソースの名前を指定します。
まずはクライアントIDを指定してログレベルをDEBUGに変更
$ aws iot set-v2-logging-level --log-level DEBUG --log-target targetType=CLIENT_ID,targetName=<対象のクライアントID>
この状態で再度MQTT XからPub/Subすると、無事CloudWatch Logsにログが出力されました!
確認できたらリソース固有のログレベル指定を削除しておきましょう。
$ aws iot delete-v2-logging-level --target-type CLIENT_ID --target-name basic-ingest-test
設定削除後はPub/Subだけではログが出力されなくなります。
今度はソースIPを指定してログレベルをDEBUGに変えてみます
$ aws iot set-v2-logging-level --log-level DEBUG --log-target targetType=SOURCE_IP,targetName=<接続元のGIP>
これで指定したGIPからの操作であれば、シンプルなPub/Subだけでもログが出力されるようになりました。
$ aws iot delete-v2-logging-level --target-type SOURCE_IP --target-name <接続元のGIP>
最後に証明書IDを指定してログレベルをDEBUGに変更してみます。
$ aws iot set-v2-logging-level --log-level DEBUG --log-target targetType=PRINCIPAL_ID,targetName=<証明書ID>
こちらもログの出力が確認できます。
一通り確認できたので設定を削除して検証終了です。
$ aws iot delete-v2-logging-level --target-type PRINCIPAL_ID --target-name <証明書ID>
まとめ
内容自体はシンプルですが、開発者としては非常にうれしいアップデートではないでしょうか?これでIoT系システムの開発効率を上げられそうです!ぜひデバッグやトラブルシューティングにお役立て下さい。