有多台服务器进行数据流处理,每台服务器每分钟向 AWS CloudWatch 发送两个自定义指标:
RecordCount
RecordCount-{server_id}
指标
RecordCount
是最后一分钟处理的记录数。
例如,对于 2 台服务器和 2 分钟,发送到 CloudWatch 的指标可以是:
timestamp: 2024-11-06T10:00:12 RecordCount: 42
timestamp: 2024-11-06T10:00:48 RecordCount-1: 42
timestamp: 2024-11-06T10:00:32 RecordCount: 58
timestamp: 2024-11-06T10:00:33 RecordCount-2: 58
timestamp: 2024-11-06T10:01:08 RecordCount: 88
timestamp: 2024-11-06T10:01:09 RecordCount-1: 88
timestamp: 2024-11-06T10:01:56 RecordCount: 15
timestamp: 2024-11-06T10:01:57 RecordCount-2: 15
我正在尝试创建几个具有基本相同逻辑的图表:每分钟所有具有相同名称的指标的总和。 CloudWatch 似乎不支持这个概念。如果我使用
SUM(RecordCount)
作为图表的指标,它将对创建图表所需的任意数量的指标进行求和,即,它将对数据点的数量进行求和,以使图表与 1 分钟间隔不对齐我有,所以图表几乎毫无意义。
从上面的示例数据中,我想要一个带有
RecordCount
标签的图表,其中包含两个数据点,以及这些 X、Y 坐标:
X: 2024-11-06T10:00:00 Y: 100
Y: 2024-11-06T10:01:00 Y: 103
请注意,时间戳不与秒对齐。因此,无论要进行什么分桶操作,都应该对同一分钟的所有记录进行求和。
这可能吗?
为此我想用两种不同的解决方案来做到这一点: 首先使用 CloudWatch Log Insight 聚合它们,然后使用该查询创建图表:
fields @timestamp, @message
| parse @message "RecordCount-*" as count
| stats sum(count) as totalCount by bin(1m)
或者创建一个 Lambda 函数,从聚合 RecordCount-* 中为我创建一个新指标,并将其命名为 RecordCountTotal 1. 使用 Lambda 函数中的 GetMetricData API 检索指标。 2. 每分钟聚合一次。 3. 使用 PutMetricData API 发布新的聚合指标(例如 RecordCountTotal) 然后,您可以在cloudwatch中绘制RecordCountTotal图表。