【AWS IoT】我尝试使用AWS IoT Core规则来测试数据存储(第4部分)

以下是上次《AWS IoT》尝试使用AWS IoT Core规则的数据存储(第3部分)的续篇。

通过使用AWS IoT Core规则测试数据存储(第2篇)【AWS IoT】
通过使用AWS IoT Core规则测试数据存储(第1篇)【AWS IoT】

前提 tí)

AWS IOT CORE 初級ハンズオンを参考にしています。
送信元デバイスは NVIDIA Jetson Nano 開発者キット B01 を利用
AWS IoT Core のコンパネで「モノ」を作成して、「モノ」用の証明書も作成してデバイスに保存
デバイスにはAWS IoT Device SDK をインストール
クライアントプログラムはAWS IOT CORE 初級ハンズオンのダミーデバイス用プログラム(
device_main.py)を利用
デバイスからIoT Coreに向けてMQTTで30秒おきにデータ送信
データはこんな感じ

{
  "DEVICE_NAME": "jetson-nano-tsumida",
  "TIMESTAMP": "2021-03-17T22:03:48",
  "TEMPERATURE": 18,
  "HUMIDITY": 57
}

2-1. 数据存储位置和使用规则(操作)

※我选择了想要尝试的物品清单。

#ストア先使ったルール(アクション)途中経由したサービス1S3Amazon Kinesis Firehose ストリームにメッセージを送信するAmazon Kinesis Firehose2DynamoDBAmazon Kinesis ストリームにメッセージを送信するAmazon Kinesis Data Streams,Lambda3timestreamTimestreamテーブルにメッセージを書き込むなし4ElasticsearchAmazon Elasticsearch Serviceにメッセージを送信するなし5AWS IoT AnalyticsIoT Analyticsにメッセージを送るIoT Analytics内でchannel,pipeline,storageを経由

本次我们将进行第四个任务,即“将消息发送到Amazon Elasticsearch Service”。

2-2-4. 发送消息到Amazon Elasticsearch服务。

亚马逊 Elasticsearch 服务是 Elasticsearch 的托管服务。Elasticsearch 是一种 NoSQL 数据存储,它可以将文本数据进行索引和存储,以便进行搜索和分析。它基于 Apache Lucene,经常与 Apache Solr 进行比较,但其特点是使用 RESTful API 和支持无模式的数据插入。如果使用 Amazon Elasticsearch 服务,还可以方便地使用可视化工具 Kibana。

创建 Amazon Elasticsearch Service 实例。

补充:Elasticsearch服务实例无法停止并停止计费,如果要停止计费,只能删除实例,请注意。

image.png
    • デプロイタイプは「開発及びテスト」

 

    バージョンは最新の「7.10(latest)」
image.png
    • Elasticsearch ドメイン名にドメイン名を付けます。(今回はjetson-nano-tsumida-yyyymmdd)と入れました。

 

    カスタムエンドポイントと自動調整はそのままにします。
image.png
    • データノードはt3.small.elasticsearchかt2.small.elasticsearchを選びます。※選ぶと下に無料枠の説明が表示されます。

 

    データノードストレージはデフォルトのままとします。EBSの汎用SSDで10GB
image.png
    専用マスターノードは作らず、そのまま次に行きます。
image.png
    ネットワークセキュリティは「パブリックアクセス」を選択します。

根据后面的设置,将会进行IP限制连接。

    細かいアクセスコントロールを有効化 のチェックを外します。

由于这是一个试用目的。

image.png
    Kibana の SAML 認証とAmazon Cognito 認証はそのままにします。(使わない)
image.png
    • ドメインアクセスポリシーは「カスタムアクセスポリシー」を選びます

http://checkip.amazonaws.com/ にアクセスし、自身の接続元IPをメモします。
IPv4アドレス を選び、上記のIPアドレスを入力、許可を選択します。

image.png
image.png
image.png

用这个方法创建实例的步骤已经完成。创建实例可能需要相当长时间。
※虽然显示10分钟,但实际需要大约20分钟。

image.png

设置IoT Core规则动作

我們將像以前一樣設置規則和操作。在IoT Core的左側選單中,點擊「ACT」下方的規則,然後點擊右上角的「創建」。

image.png
    ルール名はjetson_nano_tsumida_esとしました。クエリは以下です。
 select parse_time("yyyy-MM-dd'T'HH:mm:ss.SSSZ", timestamp()) as timestamp, * from 'data/jetson-nano-tsumida'

※ 在IoT Core中,将接收到的时间附加在有效载荷的开头。parse_time函数将时间戳格式化为人类可读的日期/时间格式。(该格式同时包含表示时区的UTC+0000)。

当将时间数据发送到 Elasticsearch 时,如果没有时区信息,它将被视为 UTC 时间。例如,从本次设备发送的数据 “TIMESTAMP”: “2021-06-30T15:00:00” 将被解析为 “2021-06-30T15:00:00+0000″。如果在 asia/tokyo 时区的客户端上查看这些数据,它们将显示为比实际时间提前9小时(相当于7月1日的0时),请注意。

这次我们特意将小写的时间戳(与发送的数据原样保持一致)与大写的TIMESTAMP进行比较。

    次に「アクションの追加」をクリックして、「Amazon Elasticsearch Serviceにメッセージを送信する」を選択して「アクションの設定」をクリックします。
image.png
    • ドメイン名は① Amazon Elasticsearch Service インスタンスの作成 で入力したElasticsearch ドメイン名 を選択してください。

 

    • IDには${newuuid()} を入力します。

 

    • 索引にはtimestampを入力します。

 

    タイプにもtimestampを入力します。
image.png
    ロールの作成 を押しロール名を付けます。(今回はjetson_nano_tsumida_esと入れました。)
image.png
    アタッチされたポリシー と表示されたことを確認してアクションの追加を押します。
image.png
image.png

这样规则动作的设置就完成了。

用Kibana查看数据。

我们将在Kibana中查看保存在Elasticsearch上的数据。

在创建Amazon Elasticsearch Service实例后,访问显示的Kibana的URL。

image.png
image.png
image.png
image.png
    index pattern name に timestamp* と入力して「Next step」を押します。(*は自動で入ります)
image.png

现在显示Elasticsearch中的数据(索引)列表,选择索引并将其注册到Kibana中,这就是流程。索引可以按照日期拆分,例如timestamp-yyyymmdd,所以可以使用索引名称模式timestamp-*进行注册。

    time field はtimestamp (タイムゾーン付で送ったデータ)を選択し、「Create index pattern」を押します。
image.png
    index patternが登録されると以下のように表示されます。
image.png
    もう一度、三 をクリックして「Discover」を押します。
image.png

我确认了数据已经到达。

点击打开后,可以看到显示在图表下面的是实际收到的每一条数据。

image.png

我在规则查询部分中写道,大写的TIMESTAMP是没有时区信息发送的,而小写的timestamp是带有时区信息发送的。

时间戳: 2021年7月1日 @ 02:19:47.000
时间戳: 2021年6月30日 @ 17:19:47.320

实际发送时间是17:19:47。我们可以看出大写的”TIMESTAMP”时间值有误,比实际时间快了九个小时。我认为在从边缘设备发送时附加时区信息是个好办法。(可以转换为UTC时间并发送,例如2021-06-30T08:19:47Z)。

使用Kibana进行数据可视化

接下来,我将在Kibana上尝试制作图表。

    • 三 をクリックして「Visualize」を押します。

 

    「Create new visualization」を押します。
image.png
    「Line」を選びます。
image.png
    「timestamp*」を選びます。
image.png
    グラフ画面が表示されすので、右の Y-axisを設定していきます。

将Aggregation设置为平均值,
将Field设置为温度。

将其放入。它的意思是计算所发送的温度数据的时间单位平均值。

image.png
    「+Add」押してY-axisを選び以下を追加します。

对于Aggregation,平均值设置为Average。对于Field,湿度设置为HUMIDITY。

放入。意思是取得发送的湿度数据的时间单位平均值。

image.png
    Bucket下の「+Add」押してX-axisを選び以下を追加します。

按照时间聚合,使用时间段为分钟的时间直方图,字段为时间戳。

将其放入。通过将横轴以时间为单位,每隔10分钟进行汇总,意思是这样。

image.png
    「Update」を押すとグラフが表示されます。
image.png

使用Kibana进行可视化的功能到此为止。

小段子

要查看或删除已进入elasticsearch的索引,需要调用Elasticsearch的API。

从PC终端执行curl命令。 ※根据需要安装curl。

    Index一覧を取得する
curl -XGET 'https://[elasticsearchのエンドポイント]/_cat/indices?v'

※您可以在Elasticsearch控制台上确认Elasticsearch的端点。

$ curl -XGET 'https://[elasticsearchのエンドポイント]/_cat/indices?v'
health status index     uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana_1 CAFIybgnSf6EC9QG0hW8mQ   1   0         26            5     27.7kb         27.7kb
yellow open   timestamp 0wFtu4F6RNGYiRcPS61OVg   5   1        118            0    194.6kb        194.6kb

如果要删除Sample中输入的数据等内容,可以通过发送删除请求来清除。

    Indexを削除する
curl -XDELETE 'https://[elasticsearchのエンドポイント]/timestamp?pretty'
    結果
$ curl  -XDELETE 'https://[elasticsearchのエンドポイント]/timestamp?pretty'
{
  "acknowledged" : true
}

本次总结为(IoT Core → 规则 → Elasticsearch)。

我试着将来自IoT Core的数据直接存储到Elasticsearch中。这个设置过程非常简单,您可以立即完成。
由于Elasticsearch在搜索字符串数据方面很强大,所以如果有这样的需求,您可以考虑使用它。此外,它还可以轻松地在Kibana中进行可视化,非常方便。
但请注意,与其他数据存储相比,使用Elasticsearch会更加昂贵(费用不仅取决于数据量,还包括持续运行EC2实例所需的费用)。

这次就到这里吧。下次会发布最后一篇文章《向IoT Analytics发送消息》。

尝试使用AWS IoT Core规则进行数据存储(第5部分)。

bannerAds