Amazon IoT Greengrass Version 1 2023 年 6 月 30 日进入延长寿命阶段。有关更多信息,请参阅 Amazon IoT Greengrass V1 维护策略。在此日期之后,将 Amazon IoT Greengrass V1 不会发布提供功能、增强功能、错误修复或安全补丁的更新。在上面运行的设备 Amazon IoT Greengrass V1 不会中断,将继续运行并连接到云端。我们强烈建议您迁移到 Amazon IoT Greengrass Version 2,这样可以添加重要的新功能并支持其他平台。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
CloudWatch 指标连接器
CloudWatch 指标连接器将 Greengrass 设备中的自定义指标发布到 Amazon CloudWatch。此连接器提供了一个用于发布 CloudWatch 指标的集中式基础设施,您可以使用它来监控和分析 Greengrass 核心环境,以及处理本地事件。有关更多信息,请参阅 Amazon CloudWatch 用户指南中的使用 Amazon CloudWatch 指标。
此连接器以 MQTT 消息形式接收指标数据。连接器对同一命名空间中的指标进行批处理,并定期将这些指标发布到 CloudWatch。
此连接器具有以下版本。
版本 |
ARN |
---|---|
5 |
|
4 |
|
3 |
|
2 |
|
1 |
|
有关版本更改的信息,请参阅更改日志。
要求
此连接器具有以下要求:
连接器参数
该连接器提供以下参数:
创建连接器示例 (Amazon CLI)
以下 CLI 命令创建一个 ConnectorDefinition
,其初始版本包含 CloudWatch 指标连接器。
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" } } ] }'
在 Amazon IoT Greengrass 控制台中,您可以从组的连接器页面添加连接器。有关更多信息,请参阅 Greengrass 连接器入门(控制台)。
输入数据
此连接器接受有关 MQTT 主题的指标,并将这些指标发布到 CloudWatch。输入消息必须采用 JSON 格式。
- 订阅中的主题筛选条件
-
cloudwatch/metric/put
- 消息属性
-
request
-
有关此消息中的指标的信息。
请求对象包含要发布到 CloudWatch 的指标数据。指标值必须符合
PutMetricData
API 的规范。只有namespace
、metricData.metricName
和metricData.value
属性是必需的。必需:
true
类型:包含以下属性的
object
:namespace
-
此请求中指标数据的用户定义命名空间。CloudWatch 使用命名空间来作为指标数据点的容器。
注意
不能指定以保留字符串
AWS/
开头的命名空间。必需:
true
类型:
string
有效模式:
[^:].*
metricData
-
指标的数据。
必需:
true
类型:包含以下属性的
object
:metricName
-
指标的名称。
必需:
true
类型:
string
dimensions
-
与指标关联的维度。维度提供有关指标及其数据的更多信息。指标最多可定义 10 个维度。
此连接器自动包含一个名为
coreName
的维度,其中的值是核心的名称。必需:
false
类型:维对象的
array
包含以下属性:name
-
维度名称。
必需:
false
类型:
string
value
-
维度值。
必需:
false
类型:
string
timestamp
-
收到指标数据的时间,表示为自
Jan 1, 1970 00:00:00 UTC
以来的秒数。如果省略此值,则连接器将使用它收到消息的时间。必需:
false
类型:
timestamp
注意
如果您使用此连接器的版本 1 到版本 4,我们建议您在从单一来源发送多个指标时分别检索每个指标的时间戳。不要使用变量来存储时间戳。
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
- 限制
-
使用此连接器时,CloudWatch
PutMetricData
API 施加的所有限制均适用于指标。以下限制尤其重要:-
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 函数。
注意
-
如果要使用其他 Python 运行时,您可以创建从 Python3.x 到 Python 3.7 的符号链接。
-
连接器入门(控制台) 和 连接器入门 (CLI) 主题包含详细步骤,说明如何配置和部署示例 Twilio 通知连接器。
-
确保满足连接器的要求。
对于组角色要求,您必须将角色配置为授予所需权限,并确保角色已添加到组中。有关更多信息,请参阅管理 Greengrass 组角色(控制台)或管理 Greengrass 组角色 (CLI)。
-
创建并发布将输入数据发送到连接器的 Lambda 函数。
将示例代码保存为 PY 文件。下载并解压适用于 Python 的 Amazon IoT Greengrass Core 软件开发工具包。然后,创建一个 zip 包,其中在根级别包含 PY 文件和
greengrasssdk
文件夹。此 zip 包是您上传到 Amazon Lambda 的部署包。创建 Python 3.7 Lambda 函数后,请发布函数版本并创建别名。
-
配置 Greengrass 组。
-
部署组。
-
在 Amazon IoT 控制台中,在测试页面上,订阅输出数据主题以查看连接器中的状态消息。示例 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 指标连接器包含以下第三方软件/许可:
-
Amazon SDK for Python (Boto3)
/Apache 许可证 2.0 -
botocore
/Apache 许可证 2.0 -
dateutil
/PSF 许可证 -
docutils
/BSD 许可证,GNU 通用公共许可证 (GPL),Python 软件基金会许可证,公共领域 -
jmespath
/MIT 许可证 -
s3transfer
/Apache 许可证 2.0 -
urllib3
/MIT 许可证
该连接器在 Greengrass Core 软件许可协议
更改日志
下表介绍每个版本连接器的更改。
版本 |
更改 |
---|---|
5 |
进行了修复,以添加输入数据中对重复时间戳的支持。 |
4 |
增加了用于配置连接器容器化模式的 |
3 |
已将 Lambda 运行时升级到 Python 3.7,这会更改运行时要求。 |
2 |
进行了修复,以减少过多的日志记录。 |
1 |
首次发布。 |
Greengrass 组在一个时间上只能包含一个版本的连接器。有关升级连接器版本的信息,请参阅升级连接器版本。
另请参阅
-
Amazon CloudWatch 用户指南中的使用 Amazon CloudWatch 指标
-
Amazon CloudWatch API 参考中的 PutMetricData