はじめに
Amazon Monitronのデータを使って可視化する機会がありましたので、記事にしました。
本記事の内容は、Amazon MonitronからデータをS3に送信し、Glue Crawlerでテーブルを作成するまでの手順紹介となります。 それ以降のGrafanaでの「〜可視化編〜」は次回記事で紹介します。
基本的にAWSの公式ブログにそって手順を進めましたが、いくつか記載がないようなポイントもあったので参考になれば幸いです。
前提
すでに AWS アカウントにて Amazon Monitron のプロジェクトが作成済みであることが前提となります。 Monitron ってなに?どうやって導入するの?という方は下記ブログをご参照ください。
- Amazon Monitron 〜第一弾 ご紹介〜 - サーバーワークスエンジニアブログ
- Amazon Monitron 〜第二弾 Amazon Monitronの管理階層編〜 - サーバーワークスエンジニアブログ
- Amazon Monitron 〜第三弾 環境準備編〜 - サーバーワークスエンジニアブログ
- Amazon Monitron 〜第四弾 計測中にやったこと〜 - サーバーワークスエンジニアブログ
最終ゴール
参考サイト:Amazon Monitron と Amazon Kinesis により予知保全のためのアクションにつながる洞察を得る方法 | Amazon Web Services ブログ
Amazon Monitron のデータを1時間おきに AWS へ送信し、Amazon Managed Grafana で可視化することをゴールとしました。 本記事では、赤線で囲った部分、MonitronからのデータをS3に格納してGlueクローラーを作成までの手順を紹介します。
Grafana では、下記画像のようなMonitron のコンソール画面から確認できる2つのグラフ (振動と温度) と同じものを作成することとしました。
手順
1. Amazon Monitron から Kinesis data stream export を有効化
- Amazon Monitron コンソールで、プロジェクトのメインページから、「 Start live data export 」を選択
- 「 Select Amazon Kinesis data stream 」で「 Create a new data stream 」を選択
- 「 Data stream configuration 」で、任意のデータストリーム名を入力
- 下記設定でデータストリームを作成
- Amazon Monitron に戻り、作成したデータストリームを選択
2. Kinesis Data Firehose から S3 バケットに転送
- Kinesis Data Firehose のコンソールから、「Firehose ストリームを作成」
- ソース: Amazon Kinesis Data Streams
- 送信先:Amazon S3
- Kinesis データストリーム:1. で作成したものを選択
- S3 バケット:任意のものを指定、もしくは新規作成
- 動的パーティショニング:有効
- JSON のインライン解析:有効
- 動的パーティショニングキーは以下を入力
キー名 | JQ 式 |
---|---|
project | .projectName | "project=\(.)" |
site | .eventPayload.siteName | "site=\(.)" |
asset | .eventPayload.assetName | "asset=\(.)" |
position | .eventPayload.positionName | "position=\(.)" |
time | .timestamp | sub(" [0-9]{2}:[0-9]{2}:[0-9]{2}.[0-9]{3}$"; "") | "time=\(.)" |
- 「動的パーティショニングキーを適用」をクリックし、以下の S3 バケットのプレフィックスが生成されることを確認
!{partitionKeyFromQuery:project}/!{partitionKeyFromQuery:site}/!{partitionKeyFromQuery:asset}/!{partitionKeyFromQuery:position}/!{partitionKeyFromQuery:time}/
- S3 バケットエラー出力プレフィックスは以下(入力しないと進めないので簡単なものを指定)
error/.
補足
動的パーティショニングとは、データをS3バケットに保存する際に、保存先のディレクトリ構造(プレフィックス)を自動的に生成することです。
これによって、データをより効率的に整理し、検索や分析をしやすくなります。
各項目には以下の意味があります
- /project={projectName}/:データが所属するプロジェクトの名前
- /site={siteDisplayName}/:データが収集されたサイト(場所)の名前
- /asset={assetDisplayName}/:データが関連する設備や機器の名前
- /position={sensorPositionDisplayName}/:センサーに命名したポジション名
- /time={yyyy-mm-dd 00:00:00}/:データが収集された日時
これにより、データは以下のような階層構造でS3に保存されます
/project=MyProject/site=FactoryA/asset=Machine1/position=EngineRoom/time=2023-06-17/mydatafile.json
3. Athena で Amazon S3 データのテーブルを作成する AWS Glue クローラーを構築
- AWS Glueコンソールで、ナビゲーションペインで「Data Catalog > Crawlers」からクローラーを新規作成
- Name:任意のクローラー名
- Is your data already mapped to Glue tables :Not yet
- Data Source :S3
- Location of S3 data:In this Account
- 2.で設定した S3 バケットのパス( s3://YourBucketName )を入力
- Repeat crawls of S3 data stores:Crawl all sub-folders
- IAM role:Create new IAM role で任意のロール名を入力
- Target database:Add Database で任意のデータベース名を入力
- Crawler schedule:Hourly
- Monitron からは1時間おきにデータが送信されるので、それに合わせてクローラーも1時間おきに設定しました
最終的に以下のようなクローラーになります
これにより、クローラーが完了した後にメタデータテーブルが配置される Athena データベースが作成されます
AWS Glue コンソールの「 Crawlers 」ページで、作成したクローラーを選択し、「 Run crawler 」を選択することで、手動でクローラーを走らせることができます
最後に、作成されたGlueのテーブルを確認してみましょう
(今回は「position」に日本語を指定していたため、「Name」が文字化けしてしまいました)
スキーマを確認すると、きちんとFirehoseで指定したようにカラムが作成されていますね
さいごに
これにてAmazon MonitronからデータをS3に送信し、Glueのクローラーでテーブルを作成することができました。
次回記事にて、今回作成したテーブルをデータソースとして、Amazon Managed Grafana でグラフを作成します。