AWS IoT SiteWise でバッファリングされたデータは消えない?気になることを検証してみた

2024.01.25

前回の記事で SiteWise の「データバッファリング & バッチ取り込み」を紹介しました。
記事の執筆時点では、バッファリングされたデータが SiteWise Edge デバイスのどこに保存されるのか未確認でしたが、あらためて確認してみたのでご紹介したいと思います。

ゲートウェイ上のデータ保存場所と注意点

保存場所

結論からいうと、バッファリングに関連するファイルはデバイスの下記の3 箇所に保存されていました。
データソースにおいてデータ生成が継続される限りファイルは 1 分間隔で次々と作成されて、バッファリング間隔で指定した時間が経過後に S3 に保存されます。

  • /greengrass/v2/work/aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_[YOUR-DATA-SOURCE-NAME]
  • /greengrass/v2/work/aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_[YOUR-DATA-SOURCE-NAME]
  • /greengrass/v2/work/aws.greengrass.StreamManager/S3_OPC-UA_[YOUR-DATA-SOURCE-NAME]

この内、/greengrass/v2/work/aws.iot.SiteWiseEdgePublisher ディレクトリ以下には、S3 にアップロードされるものと同じ parquet 形式のファイルが保存されます。

それぞれについて、次の章以降で詳しく説明したいと思います。

補足

上記に記載したパスにある work ディレクトリ以前の /greengrass/v2/〜 のパスはデフォルトです。 これは Greengrass Core がインストールされるパスですが、Greengrass をインストール時に指定できるので環境によっては異なる場合があります。

また、データが保存されるディレクトリ S3_OPC-UA_[YOUR-DATA-SOURCE-NAME] ですが、ディレクトリ名の最後は「バッファリング設定したデータソースの名前」になります。

今回は下記のように loalhost という名前にしていたので、S3_OPC-UA_loalhost となっていました。( localhost と入力したつもりでしたが loalhost とタイプミスしています…)

01-data-source-name

注意点

バッファリングされたデータが一時的に置かれる場所について公式ドキュメントに記載はなかったので、今後この記事で検証した内容と実態が変わる場合があるのでご注意下さい。

parquet ファイルの保存場所を確認してみた

まず最初に、/greengrass/v2/work/aws.iot.SiteWiseEdgePublisher ディレクトリ以下に保存されるファイルの挙動について確認したいと思います。
今回は、実際に OPC UA サーバを動かして、データを 5 分間隔でバッファリングさせながら検証を行いました。
OPC UA サーバを起動してしばらくすると、冒頭に記載したパスに次のように parquet ファイルが生成されていくのを確認できました。

それぞれのディレクトリの様子は次のとおりです。

  1. 最初に staging ディレクトリがあるパスにサイズ「0」のファイルが作成される
  2. 1 分後に target ディレクトリに移動する。この際、データの中身が入った状態で移動する
  3. バッファリング期間経過後、target ディレクトリのファイルは S3 に転送される

実際に確認したものを次に掲載します。

検証を開始する直前の S3 上には過去のファイルが 3 つだけある状態です。デバイス上には未配信のデータはないものとします。この状態からデータの取得を開始して、バッファリングの様子を見ていきたいと思います。

01-start-state

OPC UA サーバをスタートさせた直後の状態です。最初は何もバッファリングされたファイルはありません。

# cd /greengrass/v2/work
# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 0

約 20 秒ほど経過すると、staging ディレクトリに サイズ「0」のファイル(parquet-data-2024-01-16-10-08.〜)が作成されました。

# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:09:16.199348612 +0900 parquet-data-2024-01-16-10-08.1705399689873.parquet

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 0

OPC UA サーバの起動から約 1 分後、staging ディレクトリに新たに 2 つ目のファイル(parquet-data-2024-01-16-10-09.〜)が作成されます。

# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:09:16.199348612 +0900 parquet-data-2024-01-16-10-08.1705399689873.parquet
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:10:16.180036319 +0900 parquet-data-2024-01-16-10-09.1705399749697.parquet

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 0

さらに 約 10 秒後、最初に作成されていたファイル(parquet-data-2024-01-16-10-08.〜)が target ディレクトリに移動します。

# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:10:16.180036319 +0900 parquet-data-2024-01-16-10-09.1705399749697.parquet

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 2016 2024-01-16 19:09:16.199348612 +0900 parquet-data-2024-01-16-10-08.1705399689873.parquet

2 つ目のファイル(parquet-data-2024-01-16-10-09.〜)が作成されてから約 1 分経過後、staging ディレクトリに新たにファイル(parquet-data-2024-01-16-10-10.〜)が作成されます。
(つまりparquet-data-2024-01-16-10-08.〜 ファイルが target ディレクトリに移動してから約 50 秒後)

# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:10:16.180036319 +0900 parquet-data-2024-01-16-10-09.1705399749697.parquet
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:10:09.635963201 +0900 parquet-data-2024-01-16-10-10.1705399809633.parquet


./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 2016 2024-01-16 19:09:16.199348612 +0900 parquet-data-2024-01-16-10-08.1705399689873.parquet

さらに約 10 秒後、先に作られたファイル(parquet-data-2024-01-16-10-09.〜)が target ディレクトリに移動します。

# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:10:09.635963201 +0900 parquet-data-2024-01-16-10-10.1705399809633.parquet

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 8
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:09:16.199348612 +0900 parquet-data-2024-01-16-10-08.1705399689873.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:10:16.180036319 +0900 parquet-data-2024-01-16-10-09.1705399749697.parquet

以後は同じ動作が繰り返されます。

# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:10:09.635963201 +0900 parquet-data-2024-01-16-10-10.1705399809633.parquet
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:11:09.673270834 +0900 parquet-data-2024-01-16-10-11.1705399869669.parquet

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 8
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:09:16.199348612 +0900 parquet-data-2024-01-16-10-08.1705399689873.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:10:16.180036319 +0900 parquet-data-2024-01-16-10-09.1705399749697.parquet

target ディレクトリのファイルが 3 つになりました。

# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:11:09.673270834 +0900 parquet-data-2024-01-16-10-11.1705399869669.parquet

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 12
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:09:16.199348612 +0900 parquet-data-2024-01-16-10-08.1705399689873.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:10:16.180036319 +0900 parquet-data-2024-01-16-10-09.1705399749697.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:11:16.181434466 +0900 parquet-data-2024-01-16-10-10.1705399809633.parquet
# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:12:09.666702131 +0900 parquet-data-2024-01-16-10-12.1705399929668.parquet
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:12:16.182847961 +0900 parquet-data-2024-01-16-10-11.1705399869669.parquet

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 16
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:09:16.199348612 +0900 parquet-data-2024-01-16-10-08.1705399689873.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:10:16.180036319 +0900 parquet-data-2024-01-16-10-09.1705399749697.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:11:16.181434466 +0900 parquet-data-2024-01-16-10-10.1705399809633.parquet

target ディレクトリのファイルが 4 つになりました。

# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:12:09.666702131 +0900 parquet-data-2024-01-16-10-12.1705399929668.parquet

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 16
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:09:16.199348612 +0900 parquet-data-2024-01-16-10-08.1705399689873.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:10:16.180036319 +0900 parquet-data-2024-01-16-10-09.1705399749697.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:11:16.181434466 +0900 parquet-data-2024-01-16-10-10.1705399809633.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:12:16.182847961 +0900 parquet-data-2024-01-16-10-11.1705399869669.parquet
# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:12:09.666702131 +0900 parquet-data-2024-01-16-10-12.1705399929668.parquet
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:13:19.620184423 +0900 parquet-data-2024-01-16-10-13.1705399999617.parquet

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 16
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:09:16.199348612 +0900 parquet-data-2024-01-16-10-08.1705399689873.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:10:16.180036319 +0900 parquet-data-2024-01-16-10-09.1705399749697.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:11:16.181434466 +0900 parquet-data-2024-01-16-10-10.1705399809633.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:12:16.182847961 +0900 parquet-data-2024-01-16-10-11.1705399869669.parquet

target ディレクトリのファイルが 5つになりました。

# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:13:19.620184423 +0900 parquet-data-2024-01-16-10-13.1705399999617.parquet

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 20
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:09:16.199348612 +0900 parquet-data-2024-01-16-10-08.1705399689873.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:10:16.180036319 +0900 parquet-data-2024-01-16-10-09.1705399749697.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:11:16.181434466 +0900 parquet-data-2024-01-16-10-10.1705399809633.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:12:16.182847961 +0900 parquet-data-2024-01-16-10-11.1705399869669.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:13:26.184314914 +0900 parquet-data-2024-01-16-10-12.1705399929668.parquet

さらに 1 分程度待つと、target ディレクトリには 6 個のファイルが移動してきました。

# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:14:09.825150414 +0900 parquet-data-2024-01-16-10-14.1705400049825.parquet

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 24
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:09:16.199348612 +0900 parquet-data-2024-01-16-10-08.1705399689873.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:10:16.180036319 +0900 parquet-data-2024-01-16-10-09.1705399749697.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:11:16.181434466 +0900 parquet-data-2024-01-16-10-10.1705399809633.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:12:16.182847961 +0900 parquet-data-2024-01-16-10-11.1705399869669.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:13:26.184314914 +0900 parquet-data-2024-01-16-10-12.1705399929668.parquet
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:14:16.181267786 +0900 parquet-data-2024-01-16-10-13.1705399999617.parquet

その後、すぐに target ディレクトリにあるファイルのうち、OPC UA サーバ起動から5 分間で作成されたものが全て S3 に転送されてなくなりました。

# ls -l --full-time ./aws.iot.SiteWiseEdgePublisher/parquet/*/S3_OPC-UA_loalhost/
./aws.iot.SiteWiseEdgePublisher/parquet/staging/S3_OPC-UA_loalhost/:
total 0
-rw-rw-r-- 1 ggc_user ggc_group 0 2024-01-16 19:14:09.825150414 +0900 parquet-data-2024-01-16-10-14.1705400049825.parquet

./aws.iot.SiteWiseEdgePublisher/parquet/target/S3_OPC-UA_loalhost/:
total 4
-rw-rw-r-- 1 ggc_user ggc_group 2106 2024-01-16 19:14:16.181267786 +0900 parquet-data-2024-01-16-10-13.1705399999617.parquet

このタイミングで次の 5 つのファイルがアップロードされたことになります。

  • parquet-data-2024-01-16-10-08.1705399689873.parquet
  • parquet-data-2024-01-16-10-09.1705399749697.parquet
  • parquet-data-2024-01-16-10-10.1705399809633.parquet
  • parquet-data-2024-01-16-10-11.1705399869669.parquet
  • parquet-data-2024-01-16-10-12.1705399929668.parquet

実際に S3 上でも上記 5 つのファイルが新たに追加されていることが確認できました。

02-added-5-files

言葉で詳細を説明すると分かりづらかったかもしれませんが、大まかな動作は次のようになります。

  1. staging ディレクトリに「0」 Byte の Parquet ファイルが作られる
  2. 1 分後 target ディレクトリにファイルが移動する(データが書き込まれた状態で)
  3. 1 分間隔で作成されるファイルに対して「1〜2」が繰り返される
  4. バッファリング時間が経過後、target ディレクトリのファイルが S3 にアップロードされる

ちなみに、デバイス上の Parquet ファイルと S3 上の Parquet ファイルの中身を diff で確認しましたが、差分はありませんでした。

Stream Manager 関連ディレクトリを確認してみた

冒頭に記載した通り、もう一つのデータ保存場所である下記のディレクトリは何に使われるのか確認してみます。

  • /greengrass/v2/work/aws.greengrass.StreamManager/S3_OPC-UA_[YOUR-DATA-SOURCE-NAME]

staging ディレクトリ格納以前のデータは?

先ほどの検証では、最初に /greengrass/v2/work/aws.iot.SiteWiseEdgePublisher/parquet/ 以下の staging ディレクトリに「0」バイトのファイルが生成されて、1分後に中身のあるファイルとして target ディレクトリに保存されていました。
staging にあるファイルのサイズは target に移動するまで常に「0」のままでしたが、target に移動するまでの間はどこに保存されているのでしょうか?

staging にファイルがある状態でデバイスを再起動しても、収集したデータが無くなることはなかったので、どこか別の場所で保存されていると考えられます。
一方で、SiteWise Edge ゲートウェイを利用時は以下の 2 つの Greengras コンポーネントを使います。

  • IoT SiteWise Publisher(aws.iot.SiteWiseEdgePublisher
  • IoT SiteWise OPC-UA Collector(aws.iot.SiteWiseEdgeCollectorOpcua

これらのコンポーネントを利用するときは、依存関係で 「Stream manager」コンポーネントが必要になります。このコンポーネントはデバイス上のメモリかファイルシステムにデータを一時保持しますが、デフォルト設定は「File」です。

また、このファイルの保存場所はデフォルトでは /greengrass/v2/work/aws.greengrass.StreamManager となっています。

したがって、収集されたデータは Stream Manager のストリーム上(ファイルシステム)に保存されつつ、最終的に先ほど確認した target ディレクトリ以下に出力されるものと考えられます。

Stream Manager のデータを確認してみた

実際にデータを生成しながらストリーム上のデータを確認してみました。

ゲートウェイ上で /greengrass/v2/work/aws.greengrass.StreamManager を確認すると、過去に作成したことがある Stream Manager のストリーム名でディレクトリがいくつか存在していました。

この内、S3_OPC-UA_localhost というディレクトリが今回のストリームデータの保存場所になります。
(フルパスで /greengrass/v2/work/aws.greengrass.StreamManager/S3_OPC-UA_localhost になります)

130-stream-manager-streams

このディレクトリには下記の 2 種類のファイルがあるので、OPC UA サーバでデータを生成しながら、.log ファイルを tail コマンドで確認してみました。

# ls -la
total 84
drwxrwxrwx  2 ggc_user ggc_group  4096  1月 24 17:30 .
drwx------ 12 ggc_user ggc_group  4096  1月 24 17:27 ..
-rw-rw-rw-  1 ggc_user ggc_group  5660  1月 24 18:58 0000000000000000000.index
-rw-rw-rw-  1 ggc_user ggc_group 62147  1月 24 18:58 0000000000000000000.log

今回利用した OPC UA サーバは「10 秒ごとに 1 つのデータを生成」するものになります。
データ生成時は、下記のようなログも出力するようにしました。

time: 2024-01-24 20:13:08.229737, temperature11: 46.03
time: 2024-01-24 20:13:18.236598, temperature11: 83.06
time: 2024-01-24 20:13:28.245208, temperature11: 69.65
time: 2024-01-24 20:13:38.253350, temperature11: 51.15

一方でストリーム上のデータは、10 秒おきに .log ファイルにデータが追記されていく様子を確認することができました。下記は tail -F コマンドで表示した内容です。(strings コマンドも併用)
また、同じタイミングで .index ファイルにもデータが追記されていました。

132-stream-data-2

以上より、逐次生成されるデータは収集後に一旦 Stream Manager のストリームに保存されることが分かりました。

収集途中でゲートウェイを再起動した場合

次はデータ収集中にゲートウェイを再起動(shutdownコマンドを実施)した時にデータが削除されるかどうかを確認します。先程確認したように、データは Stream Manager 側で保持しているのでおそらく削除されることはないはずです。

データは下記の通り、事前に「4時」「9時」のものが保存されている状態でデータの収集を開始しました。 新規にデータ収集を開始すると、新たに作業時間である hour=10/ というフォルダが生成される想定です。

120-before-reboot

バッファリング間隔は 3 分としています。

124-s3-buffering-config

この状態で OPC UA サーバを起動してから 1 分ほど経過したらゲートウェイを再起動してみます。再起動後に、再起動前のデータが問題なく S3 に保存されるかどうか確認します。

再起動後、しばらくすると S3 上に hour=10/ のフォルダが作成されました。

121-after-reboot

フォルダには、次の 2 つの parquet ファイルが入っていることが確認できました。

122-after-reboot-bufferd-data

このファイルに再起動前のデータが入っていればOKです。
先程と同様に OPC UA サーバ側のログは次のようになっていました。再起動前は 「10秒ごとに 5 件の温度データ」が発生しています。

time: 2024-01-22 19:36:17.416807, temperature11: 66.9
time: 2024-01-22 19:36:27.424864, temperature11: 55.48
time: 2024-01-22 19:36:37.434651, temperature11: 46.24
time: 2024-01-22 19:36:47.441876, temperature11: 81.14
time: 2024-01-22 19:36:57.449330, temperature11: 72.6

S3 上に保存されたデータの中身を Athena から確認すると、上記のデータが全て保存されていることが分かりました。

123-query-by-athena

これで ゲートウェイを再起動しても、バッファリングされたデータは消えることなく保持できることが確認できました。

コンポーネントのプロセスが異常終了した場合

デバイスの再起動では「正しい手順」でデバイスを再起動しましたが、何らかの原因でデータ収集のプロセス(コンポーネント)が異常終了した場合はどうなるか試してみました。

方法としては、Collector コンポーネント(aws.iot.SiteWiseEdgeCollectorOpcua)のプロセスを直接 kill コマンドで停止させて実験してみました。
Greengrass コンポーネントは異常終了しても 2 回までなら自動で再起動するので、再起動したプロセスもすぐに停止するようにしました。

詳細は割愛しますが、強制終了するといくつかデータが収集できておらず、S3 上のファイルでもデータが歯抜けになっていることがありました。

下記ドキュメントでは、「デバイスの再起動中はデータを取り込まない」とあるので、プロセスの再起動中に発生したデータも収集できていないものと考えられます。

ネットワークが切断された場合

最後に、データ収集中にゲートウェイのネットワークが切断されたらどうなるか確認してみました。
確認方法は実際に LAN ケーブルを抜いて動作を確認しました。

バッファリング間隔は 5 分で設定していますが、下記のとおり 5 分経過してもファイル保持が継続する結果になりました。

133-screenshot-on-gateway-ls

このあと、ケーブルを繋げてネットワークを復旧させてみたところ、上記のファイルは全て S3 に転送されました。S3 上の各オブジェクトの「最終更新日時」がほぼ同じことから、ネットワーク復旧時に一斉にアップロードされたものであることが分かります。

134-over-5-min-data

まとめ

  • SiteWise Edge ゲートウェイを再起動しても収集済みデータは保持できる
  • 収集したデータは Stream Manager のストリームへデータ収集時に逐次保存される
  • 収集したデータは、ゲートウェイ上で 1 分ごとに異なる parquet ファイルとしてまとめられる
  • 生成された parquet ファイルは、バッファリング間隔で複数個まとめて S3 にアップロードされる
    • ただし、アップロード対象は直近のバッファリング間隔で作成されたファイル
  • ネットワーク切断時はバッファリング間隔を越えて保持されて、復旧時に S3 にアップロードされる
  • コンポーネント再起動やゲートウェイ再起動で収集プロセスが停止中はデータ収集できない

最後に

SiteWise のバッファリングとデータ取り込みについて少し詳しく確認してみました。
この記事がどなたかのお役に立てば幸いです。

以上です。