AWS IoTを使ってデバイスから受信した情報をCloudWatch Logsに記録、表示してみた

2020.12.16

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

こんにちは、コンサル部@大阪オフィスのTodaです。

前回M5Stick CPlusから情報を発信、AWS IoT Coreで受信するまでを試してみました。
今回は受信した情報をCloudWatch Logsに保存して一覧表示してみます。

やりたいこと

  • AWS IoT Coreで受信した情報をCloudWatch Logsに保存する。
  • CloudWatch Logs Insightsを使って一覧、グラフによる可視化をしてみる。

やりたいこと

前提条件

AWS IoT CoreとM5Stick CPlusの接続作業が終了している状態から始める。
接続の方法については過去記事をご覧ください。

設定してみる

AWS IoT Coreで利用するIAMロール作成

AWS IoT Coreで利用するIAMロールを事前に作成いたします。
[IAMロール作成] からユースケースの選択で[IoT]を選択します。
アクセス権限ポリシーは表示される物を利用しますので次に進み登録を完了します。
今回IAMロール名は「iot-logs-role」と設定しています。

IAMロール作成

CloudWatch Logsのロググループを作成

AWS IoT Coreで受信した情報を記録するためにCloudWatch Logsのロググループを作成します。
CloudWatch Logsの一覧上部[ロググループを作成]からおこないます。
グループ名は「/iot/M5STICK」として保存期間は1週間で設定します。

CloudWatch Logsのロググループを作成

CloudWatch Logsのロググループの設定

AWS IoT Coreのルールアクションを登録

AWS IoT Coreで受信した情報をCloudWatch Logsに保存するための動きを設定します。
サービスメニューから[Iot Core]をします。
左メニューから[ACT] > [ルール]を選択して、[ルールの作成]をクリックします。

AWS IoT Coreのルールアクションを登録

ルールの設定

ルールアクションの設定は名称・説明、ルールクエリステートメント、アクション、エラーアクション、タグに分かれています。 まず名称・説明を設定します。

ルールの設定 - 名称・説明

ルールクエリステートメントはSQLに似た構文を使って受信した情報を抽出、変換等を行えます。
今回は取得した情報全てをそのまま記録するためトピック名だけ指定します。

ルールの設定 - ルールクエリステートメント

アクションはCloudWatch Logsに保存するなど動きを設定する事ができます。
[アクションの追加]から動きを設定します。

ルールの設定 - アクション追加

アクションの一覧には各AWSサービスとの連携が表示されますので[CloudWatch Logsにメッセージデータを送信する]を選択します。

アクションの一覧

CloudWatch Logsのアクションを選択すると記録する[ログのグループ名]と[アクセス権のIAMロール]をしています。 上部で作成したロググループとIAMロールを指定して[アクションの追加]をクリックします。

ルールの設定 - CloudWatch Logsアクション設定

設定をすると画面が戻りCloudWatch Logsの設定が反映されます。

ルールの設定 - CloudWatch Logsアクション追加

上記が完了したら画面下の[ルールの作成]をクリックします。

ルールの設定完了

登録が終わりますと、一覧にルール名が表示されます。
しばらくするとステータスの枠にアクティブ表示されて情報の受け渡しが行われます。

ルールの設定完了

取得情報を確認してみる

設定作業が終わり1時間ほど経過したタイミングでCloudWatch Logsで情報を確認してみます。
デバイスからは10秒おきに情報を送るようにしています。

CloudWatch Logsでグループを表示

先ほど作成した情報保管用のグループ名をクリックします。

CloudWatch Logsでグループを表示

ログストリームを確認

一定時間毎にログストリームが作成されていることを確認できます。
ただ、この画面ではデバイスから受信した情報を簡易確認できないため一覧上部の[Search all]をクリックします。

ログストリームを確認

ログイベントの一覧

先ほどよりもデバイスから受信した情報を見やすい画面が表示されるようになります。
ただ、この状態でもメッセージデータとして表示されるため今ひとつの状態です。
一覧上部の[アクション] > [Logs Insights]をクリックします。

ログイベントの一覧

Logs Insights

Logs Insightsではクエリを使う事で情報を見やすく表示・出力する事ができます。
時間とデバイスID、温度、湿度、気圧、バッテリー電圧を一覧表示するようにします。

fields @timestamp, env.clientid, env.humiditym, env.pressure, env.temperture, env.vbat
| sort @timestamp desc
| limit 20

上記設定後、[クエリの実行]をクリックする事で一覧表示されます。

Logs Insightsによる表作成

バッテリー電圧をグラフで可視化してみる

Logs Insights

Logs Insightsでバッテリー電圧の減衰をグラフで確認してみます。
クエリの内容をタイムスタンプとバッテリー電圧のみに変更して、1分単位で平均でまとめられるように設定します。

fields @timestamp, env.vbat
| stats avg(env.vbat) by bin(1m)

クエリの実行をした後に[可視化]のボタンをクリックします。

Logs Insightsによる可視化

バッテリー電圧の減衰がグラフで表示されます。
21時23分に充電を停止しているためそこから減衰が始まっています。
初めは減衰が急で、数値が4を切るぐらいから緩やかな下りに変わっていることが確認できます。

さいごに

今回はAWS IoT Coreで受信した情報をCloudWatch Logsに保存、表示するまでをしてみました。
IoT開発時に一時的に受け取る機能を作ってデバッグをするなど用途に使えそうです。
他のAWSサービス連携も試してみたいと思います。