CloudWatch メトリクスコネクタ - AWS IoT Greengrass

AWS IoT Greengrass Version 1 は 2023 年 6 月 30 日に延長ライフフェーズに参加しました。詳細については、「AWS IoT Greengrass V1 メンテナンスポリシー」を参照してください。この日以降、 AWS IoT Greengrass V1 は機能、機能強化、バグ修正、またはセキュリティパッチを提供する更新をリリースしません。で実行されるデバイスは中断 AWS IoT Greengrass V1 されず、引き続き動作し、クラウドに接続します。に移行することを強くお勧めします。 AWS IoT Greengrass Version 2これにより、重要な新機能が追加され、プラットフォーム のサポートが追加されます

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

CloudWatch メトリクスコネクタ

CloudWatch メトリクスコネクタは、Greengrass デバイスから Amazon にカスタムメトリクスを発行します CloudWatch。コネクタは、 CloudWatch メトリクスを公開するための一元化されたインフラストラクチャを提供します。これを使用して、Greengrass コア環境のモニタリングと分析を行い、ローカルイベントに対応できます。詳細については、「Amazon ユーザーガイド」の「Amazon CloudWatch メトリクスの使用」を参照してください。 CloudWatch

このコネクタには MQTT メッセージとしてメトリクスデータが送信されます。コネクタは、同じ名前空間にあるメトリクスをバッチ処理し、 CloudWatch 一定の間隔で に発行します。

このコネクタには、次のバージョンがあります。

バージョン

ARN

5

arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/5

4

arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/4

3

arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/3

2

arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/2

1

arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/1

バージョンの変更については、「Changelog」を参照してください。

要件

このコネクタには以下の要件があります。

Version 3 - 5
  • AWS IoT Greengrass Core ソフトウェア v1.9.3 以降。

  • Python バージョン 3.7 または 3.8 が Core デバイスにインストールされ、PATH 環境変数に追加されている。

    注記

    Python 3.8 を使用するには、次のコマンドを実行して、Python 3.7 のデフォルトのインストールフォルダからインストール済みの Python 3.8 バイナリへのシンボリックリンクを作成します。

    sudo ln -s path-to-python-3.8/python3.8 /usr/bin/python3.7

    これにより、AWS IoT Greengrass の Python 要件を満たすようにデバイスが設定されます。

  • 以下の例に示すように、cloudwatch:PutMetricData アクションを許可する Greengrass グループロールに AWS Identity and Access Management (IAM) ポリシーが追加されている。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1528133056761", "Action": [ "cloudwatch:PutMetricData" ], "Effect": "Allow", "Resource": "*" } ] }

    グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、Greengrass グループロールの管理 (コンソール)またはGreengrass グループロールの管理 (CLI)を参照してください。

    アクセス CloudWatch 許可の詳細については、「IAM ユーザーガイド」の「Amazon アクセス CloudWatch 許可リファレンス」を参照してください。

Versions 1 - 2
  • AWS IoT Greengrass Core ソフトウェア v1.7 以降。

  • Python バージョン 2.7 が Core デバイスにインストールされ、PATH 環境変数に追加されている。

  • 以下の例に示すように、cloudwatch:PutMetricData アクションを許可する Greengrass グループロールに AWS Identity and Access Management (IAM) ポリシーが追加されている。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "Stmt1528133056761", "Action": [ "cloudwatch:PutMetricData" ], "Effect": "Allow", "Resource": "*" } ] }

    グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、Greengrass グループロールの管理 (コンソール)またはGreengrass グループロールの管理 (CLI)を参照してください。

    アクセス CloudWatch 許可の詳細については、「IAM ユーザーガイド」の「Amazon アクセス CloudWatch 許可リファレンス」を参照してください。

コネクタパラメータ

このコネクタには、以下のパラメータが用意されています。

Versions 4 - 5
PublishInterval

特定の名前空間のメトリクスのバッチを発行するまでに待機する最大秒数。最大の値は 900 です。メトリクスを受信時にバッチにまとめないで発行するようにコネクタを設定するには、0 を指定します。

コネクタは、同じ名前空間で 20 個のメトリクスを受信 CloudWatch した後、または指定された間隔後に に発行します。

注記

コネクタでは、発行イベントの順序は保証されません。

AWS IoT コンソールでの表示名: [Publish interval] (発行間隔)

必須: true

タイプ: string

有効な値: 0 - 900

有効なパターン: [0-9]|[1-9]\d|[1-9]\d\d|900

PublishRegion

CloudWatch メトリクスAWS リージョンを投稿する 。この値は、デフォルトの Greengrass メトリクスリージョンを上書きします。クロスリージョンメトリクスをポストする場合にのみ必要です。

AWS IoT コンソールでの表示名: [Publish region] (発行リージョン)

必須: false

タイプ: string

有効なパターン: ^$|([a-z]{2}-[a-z]+-\d{1})

MemorySize

コネクタに割り当てるメモリ (KB 単位)。

AWS IoT コンソールでの表示名: [Memory size] (メモリサイズ)

必須: true

タイプ: string

有効なパターン: ^[0-9]+$

MaxMetricsToRetain

新しいメトリクスで置き換えられるまでにメモリに保存する、名前空間全体のメトリクスの最大数。最小値は 2000 です。

この制限は、インターネットへの接続がなく、コネクタが後で発行するメトリクスをバッファし始めるときに適用されます。バッファが満杯になると、最も古いメトリクスが新しいメトリクスに置き換えられます。特定の名前空間内のメトリクスは、同じ名前空間内のメトリクスでのみ置き換えられます。

注記

コネクタのホストプロセスが中断された場合、メトリクスは保存されません。この中断は、例えばグループデプロイ中やデバイスの再起動時などに発生する可能性があります。

AWS IoT コンソールでの表示名: [Maximum metrics to retain] (保持する最大メトリクス)

必須: true

タイプ: string

有効なパターン: ^([2-9]\d{3}|[1-9]\d{4,})$

IsolationMode

このコネクタのコンテナ化モード。デフォルトは GreengrassContainer です。つまり、コネクタは AWS IoT Greengrass コンテナ内の分離されたランタイム環境で実行されます。

注記

グループの既定のコンテナ化設定は、コネクタには適用されません。

AWS IoT コンソールでの表示名: [Container isolation mode] (コンテナ分離モード) 

必須: false

タイプ: string

有効な値: GreengrassContainer または NoContainer

有効なパターン: ^NoContainer$|^GreengrassContainer$

Versions 1 - 3
PublishInterval

特定の名前空間のメトリクスのバッチを発行するまでに待機する最大秒数。最大の値は 900 です。メトリクスを受信時にバッチにまとめないで発行するようにコネクタを設定するには、0 を指定します。

コネクタは、同じ名前空間で 20 個のメトリクスを受信 CloudWatch した後、または指定された間隔後に に発行します。

注記

コネクタでは、発行イベントの順序は保証されません。

AWS IoT コンソールでの表示名: [Publish interval] (発行間隔)

必須: true

タイプ: string

有効な値: 0 - 900

有効なパターン: [0-9]|[1-9]\d|[1-9]\d\d|900

PublishRegion

CloudWatch メトリクスAWS リージョンを投稿する 。この値は、デフォルトの Greengrass メトリクスリージョンを上書きします。クロスリージョンメトリクスをポストする場合にのみ必要です。

AWS IoT コンソールでの表示名: [Publish region] (発行リージョン)

必須: false

タイプ: string

有効なパターン: ^$|([a-z]{2}-[a-z]+-\d{1})

MemorySize

コネクタに割り当てるメモリ (KB 単位)。

AWS IoT コンソールでの表示名: [Memory size] (メモリサイズ)

必須: true

タイプ: string

有効なパターン: ^[0-9]+$

MaxMetricsToRetain

新しいメトリクスで置き換えられるまでにメモリに保存する、名前空間全体のメトリクスの最大数。最小値は 2000 です。

この制限は、インターネットへの接続がなく、コネクタが後で発行するメトリクスをバッファし始めるときに適用されます。バッファが満杯になると、最も古いメトリクスが新しいメトリクスに置き換えられます。特定の名前空間内のメトリクスは、同じ名前空間内のメトリクスでのみ置き換えられます。

注記

コネクタのホストプロセスが中断された場合、メトリクスは保存されません。この中断は、例えばグループデプロイ中やデバイスの再起動時などに発生する可能性があります。

AWS IoT コンソールでの表示名: [Maximum metrics to retain] (保持する最大メトリクス)

必須: true

タイプ: string

有効なパターン: ^([2-9]\d{3}|[1-9]\d{4,})$

サンプルコネクタを作成する (AWS CLI)

次の CLI コマンドは、 CloudWatch Metrics コネクタを含む初期バージョンConnectorDefinitionで を作成します。

aws greengrass create-connector-definition --name MyGreengrassConnectors --initial-version '{ "Connectors": [ { "Id": "MyCloudWatchMetricsConnector", "ConnectorArn": "arn:aws:greengrass:region::/connectors/CloudWatchMetrics/versions/4", "Parameters": { "PublishInterval" : "600", "PublishRegion" : "us-west-2", "MemorySize" : "16", "MaxMetricsToRetain" : "2500", "IsolationMode" : "GreengrassContainer" } } ] }'

AWS IoT Greengrass コンソールでは、グループの [Connectors] (コネクタ) ページからコネクタを追加できます。詳細については、「Greengrass コネクタの開始方法 (コンソール)」を参照してください。

入力データ

このコネクタは、MQTT トピックのメトリクスを受け入れ、メトリクスを に発行します CloudWatch。入力メッセージは JSON 形式である必要があります。

サブスクリプションのトピックフィルター

cloudwatch/metric/put

メッセージのプロパティ
request

このメッセージのメトリクスに関する情報。

リクエストオブジェクトには、 CloudWatch に発行するメトリクスデータが含まれています。メトリクス値は、PutMetricData API の仕様を満たしている必要があります。namespacemetricData.metricName、および metricData.value プロパティのみが必須です。

必須: true

タイプ: object。以下のプロパティを含みます。

namespace

この request. CloudWatch uses のメトリクスデータのユーザー定義の名前空間は、メトリクスデータポイントのコンテナとして使用されます。

注記

予約された文字列 AWS/ で始まる名前空間を指定することはできません。

必須: true

タイプ: string

有効なパターン: [^:].*

metricData

メトリクスのデータ。

必須: true

タイプ: object。以下のプロパティを含みます。

metricName

メトリクスの名前。

必須: true

タイプ: string

dimensions

メトリクスに関連付けられたディメンション。ディメンションは、メトリクスとそのデータに関する追加情報を提供します。1 つのメトリクスでは、最大 10 個のディメンションを定義できます。

このコネクタには coreName という名前のディメンションが必ず含まれ、そのコアの名前を値に持ちます。

必須: false

タイプ: 以下のプロパティを含むディメンションオブジェクトの array

name

ディメンション名。

必須: false

タイプ: string

value

ディメンション値

必須: false

タイプ: string

timestamp

メトリクスデータが受信された時刻。Jan 1, 1970 00:00:00 UTC からの秒数で表されます。この値を省略すると、コネクタはメッセージを受信した時刻を使用します。

必須: false

タイプ: timestamp

注記

このコネクタのバージョン 1 から 4 を使用する場合は、1 つのソースから複数のメトリックを送信するときに、メトリックごとに個別にタイムスタンプを取得することをお勧めします。変数を使用してタイムスタンプを保存しないでください。

value

メトリクスの値。

注記

CloudWatch は、小さすぎる、または大きすぎる値を拒否します。値は 8.515920e-109 から 1.174271e+108 (基数 10)、または 2e-360 から 2e360 (基数 2) の範囲内であることが必要です。特殊な値 (NaN+Infinity-Infinity など) はサポートされていません。

必須: true

タイプ: double

unit

メトリクスの単位。

必須: false

タイプ: string

有効な値: Seconds, Microseconds, Milliseconds, Bytes, Kilobytes, Megabytes, Gigabytes, Terabytes, Bits, Kilobits, Megabits, Gigabits, Terabits, Percent, Count, Bytes/Second, Kilobytes/Second, Megabytes/Second, Gigabytes/Second, Terabytes/Second, Bits/Second, Kilobits/Second, Megabits/Second, Gigabits/Second, Terabits/Second, Count/Second, None

制限

API によって課されるすべての制限は、 CloudWatch PutMetricDataこのコネクタを使用するときのメトリクスに適用されます。以下の制限が特に重要です。

  • API ペイロードに適用される 40 KB の制限

  • API リクエストごとに 20 個のメトリクス

  • PutMetricData API の 150 トランザクション/秒 (TPS)

詳細については、「Amazon ユーザーガイド」の「 CloudWatch の制限」を参照してください。 CloudWatch

入力例
{ "request": { "namespace": "Greengrass", "metricData": { "metricName": "latency", "dimensions": [ { "name": "hostname", "value": "test_hostname" } ], "timestamp": 1539027324, "value": 123.0, "unit": "Seconds" } } }

出力データ

このコネクターは、MQTT トピックで出力データとしてステータス情報を発行します。

サブスクリプションのトピックフィルター

cloudwatch/metric/put/status

出力例: 成功

レスポンスには、メトリクスデータの名前空間と CloudWatch レスポンスの RequestIdフィールドが含まれます。

{ "response": { "cloudwatch_rid":"70573243-d723-11e8-b095-75ff2EXAMPLE", "namespace": "Greengrass", "status":"success" } }
出力例: 失敗
{ "response" : { "namespace": "Greengrass", "error": "InvalidInputException", "error_message":"cw metric is invalid", "status":"fail" } }
注記

コネクタが再試行可能なエラー (接続エラーなど) を検出した場合は、次のバッチ処理で再発行を試します。

使用例

コネクタの試用に利用できる Python 3.7 Lambda 関数の例を設定するには、次のステップ (概要) を使用します。

注記
  1. コネクタの要件を満たしていることを確認します。

    グループロール要件では、必要なアクセス許可を付与するようにロールを設定し、ロールがグループに追加されていることを確認する必要があります。詳細については、Greengrass グループロールの管理 (コンソール)またはGreengrass グループロールの管理 (CLI)を参照してください。

  2. 入力データをコネクタに送信する Lambda 関数を作成して発行します。

    サンプルコードを PY ファイルとして保存します。AWS IoT Greengrass Core SDK for Python をダウンロードして解凍します。次に、PY ファイルとルートレベルの greengrasssdk フォルダを含む zip パッケージを作成します。この zip パッケージは、AWS Lambda にアップロードするデプロイパッケージです。

    Python 3.7 Lambda 関数を作成したら、関数バージョンを公開し、エイリアスを作成します。

  3. Greengrass グループを設定します。

    1. エイリアスで Lambda 関数を追加します (推奨)。Lambda ライフサイクルを長期間有効に (または CLI で "Pinned": true に) 設定します。

    2. コネクタを追加し、そのパラメータを設定します。

    3. コネクタが入力データを受信し、サポートされているトピックフィルターで出力データを送信できるようにするサブスクリプションを追加します。

      • Lambda 関数をソースに、コネクタをターゲットに設定し、サポートされている入力トピックフィルターを使用します。

      • コネクタをソースとして、AWS IoT Core をターゲットとして設定し、サポートされている出力トピックフィルターを使用します。このサブスクリプションを使用して、AWS IoT コンソールでステータスメッセージを表示します。

  4. グループをデプロイします。

  5. AWS IoT コンソールの [Test] (テスト) ページで、出力データトピックをサブスクライブして、コネクタからのステータスメッセージを表示します。この例の Lambda 関数は長期間有効であり、グループがデプロイされた直後にメッセージの送信を開始します。

    テストが終了したら、Lambda ライフサイクルをオンデマンドに (または CLI で "Pinned": false に) 設定して、グループをデプロイできます。これにより、関数がメッセージの送信を停止します。

次の例では、Lambda 関数で入力メッセージをコネクタに送信します。

import greengrasssdk import time import json iot_client = greengrasssdk.client('iot-data') send_topic = 'cloudwatch/metric/put' def create_request_with_all_fields(): return { "request": { "namespace": "Greengrass_CW_Connector", "metricData": { "metricName": "Count1", "dimensions": [ { "name": "test", "value": "test" } ], "value": 1, "unit": "Seconds", "timestamp": time.time() } } } def publish_basic_message(): messageToPublish = create_request_with_all_fields() print("Message To Publish: ", messageToPublish) iot_client.publish(topic=send_topic, payload=json.dumps(messageToPublish)) publish_basic_message() def lambda_handler(event, context): return

ライセンス

CloudWatch メトリクスコネクタには、以下のサードパーティーのソフトウェアおよびライセンスが含まれています。

このコネクタは、Greengrass Core ソフトウェアライセンス契約に従ってリリースされます。

変更ログ

次の表に、コネクタの各バージョンにおける変更点を示します。

バージョン

変更

5

入力データでの重複するタイムスタンプに対応するように修正。

4

コネクタのコンテナ化モードを設定するための IsolationMode パラメータが追加されました。

3

Lambda ランタイムを Python 3.7 にアップグレードしたことで、ランタイム要件が変更。

2

過剰なログ記録を減らすための修正。

1

初回リリース。

Greengrass グループには、一度に 1 つのバージョンのコネクタしか含めることができません。コネクタのバージョンのアップグレードについては、「コネクタのバージョンのアップグレード」を参照してください。

以下も参照してください。