AWS IoTを使ってデバイスから受信した情報をCloudWatch Logsに記録、表示してみた
こんにちは、コンサル部@大阪オフィスの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」と設定しています。
CloudWatch Logsのロググループを作成
AWS IoT Coreで受信した情報を記録するためにCloudWatch Logsのロググループを作成します。
CloudWatch Logsの一覧上部[ロググループを作成]からおこないます。
グループ名は「/iot/M5STICK」として保存期間は1週間で設定します。
AWS IoT Coreのルールアクションを登録
AWS IoT Coreで受信した情報をCloudWatch Logsに保存するための動きを設定します。
サービスメニューから[Iot Core]をします。
左メニューから[ACT] > [ルール]を選択して、[ルールの作成]をクリックします。
ルールの設定
ルールアクションの設定は名称・説明、ルールクエリステートメント、アクション、エラーアクション、タグに分かれています。 まず名称・説明を設定します。
ルールクエリステートメントはSQLに似た構文を使って受信した情報を抽出、変換等を行えます。
今回は取得した情報全てをそのまま記録するためトピック名だけ指定します。
アクションはCloudWatch Logsに保存するなど動きを設定する事ができます。
[アクションの追加]から動きを設定します。
アクションの一覧には各AWSサービスとの連携が表示されますので[CloudWatch Logsにメッセージデータを送信する]を選択します。
CloudWatch Logsのアクションを選択すると記録する[ログのグループ名]と[アクセス権のIAMロール]をしています。 上部で作成したロググループとIAMロールを指定して[アクションの追加]をクリックします。
設定をすると画面が戻りCloudWatch Logsの設定が反映されます。
上記が完了したら画面下の[ルールの作成]をクリックします。
ルールの設定完了
登録が終わりますと、一覧にルール名が表示されます。
しばらくするとステータスの枠にアクティブ表示されて情報の受け渡しが行われます。
取得情報を確認してみる
設定作業が終わり1時間ほど経過したタイミングでCloudWatch Logsで情報を確認してみます。
デバイスからは10秒おきに情報を送るようにしています。
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でバッテリー電圧の減衰をグラフで確認してみます。
クエリの内容をタイムスタンプとバッテリー電圧のみに変更して、1分単位で平均でまとめられるように設定します。
fields @timestamp, env.vbat | stats avg(env.vbat) by bin(1m)
クエリの実行をした後に[可視化]のボタンをクリックします。
バッテリー電圧の減衰がグラフで表示されます。
21時23分に充電を停止しているためそこから減衰が始まっています。
初めは減衰が急で、数値が4を切るぐらいから緩やかな下りに変わっていることが確認できます。
さいごに
今回はAWS IoT Coreで受信した情報をCloudWatch Logsに保存、表示するまでをしてみました。
IoT開発時に一時的に受け取る機能を作ってデバッグをするなど用途に使えそうです。
他のAWSサービス連携も試してみたいと思います。