从AWS CloudWatch度量数学SEARCH函数获取单个时间序列



如果组中的任何实例超过所用内存的x%,我正在尝试创建CloudWatch警报,并为此构建了以下度量数学查询:

SEARCH('{CWAgent,InstanceId} MetricName="mem_used_percent"', 'Maximum', 300)

这个图形很好,但是CloudWatch控制台抱怨";报警的表达式必须恰好创建一个时间序列&";。我相信情况确实如此;上面的查询应该(并且确实(返回一个非多维的奇异折线图结果。

如何让这些数据以CloudWatch创建警报所需的格式返回?我的替代方案是为每个实例创建一个新的警报,然而,这对于管理警报的创建和销毁似乎更为复杂。

收集度量的实例上的CloudWatch配置:

"metrics":{
"append_dimensions": {
"InstanceId": "${aws:InstanceId}"
},
"metrics_collected":{
"mem": {
"measurement": [
"used_percent"
]
},
"disk": {
"measurement": [ "used_percent" ],
"metrics_collection_interval": 60,
"resources": [ "/" ]
}
}

不幸的是,不可能基于搜索表达式创建警报,所以我认为(目前(没有办法做到这一点。

根据https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create-alarm-on-metric-math-expression.html:

您不能基于SEARCH表达式创建报警。这是因为搜索表达式返回多个时间序列,而基于数学表达式的警报只能观察一个时间序列。

即使从SEARCH表达式中只得到一个结果,情况也会如此。

我试图使用AVG将其组合成一个时间序列,但这似乎失去了度量的上下文,而是给出了错误"警报的表达式必须至少包括一个度量"。

我目前正在处理一个类似的案例,其中有一对Lambda函数与RunInstancesTerminateInstances的CloudTrail事件绑定,它们解析实例ID的事件数据,并(除其他外(创建和删除单个CloudWatch警报。

在我的情况下,SEARCH只返回了一个时间序列。我使用SUM将它从多个时间序列转换为单个时间序列,这似乎已经完成了任务。如果你有多个时间序列,这是行不通的。

类似SUM(SEARCH(...))。您的里程数可能因您的SEARCH呼叫返回的内容而异。

此示例为Region中的每个实例显示一行,显示AWS/EC2命名空间中的CPUUtilization度量。

SEARCH(' {AWS/EC2,InstanceId} MetricName="CPUUtilization" ', 'Average', 300)

将InstanceId更改为InstanceType会更改图形,以便为Region中使用的每个实例类型显示一行。来自每种类型的所有实例的数据都聚合到该实例类型的一行中。

SEARCH(' {AWS/EC2,InstanceType} MetricName="CPUUtilization" ', 'Average', 300)

删除维度名称,但将命名空间保留在架构中,如以下示例所示,结果是一行显示Region中所有实例的CPUUtilization度量的聚合。

SEARCH(' {AWS/EC2} MetricName="CPUUtilization" ', 'Average', 300)

有关搜索查询的详细说明,请参阅此部分。

要选择指标,请参阅此链接以了解逐步解释。

最新更新