デバッグやトラブルシューティングにうれしいアップデート!IoT CoreのログレベルがクライアントID、ソースIP、プリンシパルIDごとに個別設定可能になりました

これでトラブルシューティングが捗ります!
2022.02.04

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

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 はDEFAULTTHING_GROUPに加え、今回のアップデートでCLIENT_IDSOURCE_IPPRINCIPAL_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系システムの開発効率を上げられそうです!ぜひデバッグやトラブルシューティングにお役立て下さい。

参考