AWS CloudWatch放置指标数据每次都创建新指标,而不是替换旧指标

时间:2019-05-22 08:46:37

标签: amazon-web-services amazon-cloudwatch

示例: 我正在尝试监视在EC2实例上运行的Docker容器。对于一个简单的用例,这就是我尝试过的。使用下面给出的简单bash脚本获取机器中正在运行的容器的数量。

一旦在cronjob上正常运行,我将运行此命令,以便它将对容器的运行进行计数,并在每次运行时将数据发送到cloudwatch。

result=$(docker ps --format "{{.Names}}" | wc -l)
 aws cloudwatch put-metric-data --metric-name "Container running $result/6" --unit Count --value "$result" --dimensions Total-Container=$result --namespace System/Docker

Cloudwatch的行为方式: 每次运行作业以检查运行的容器数时,都会添加一个新指标。现在如何在图形中跟踪它。

enter image description here

  

这可能是预期的cloudwatch行为,但是我如何跟踪   图中最新的一个。   引用

1 个答案:

答案 0 :(得分:3)

您的问题是您每次都发布不同的度量标准名称。指标名称不同,因为您在指标名称中包含 $ result

CloudWatch指标是按时间顺序排列的一组数据点。单个指标由3种事物命名/标识:

  • 命名空间(字符串)
  • 指标名称(字符串)
  • 维度(可选的一组键->值字符串对)

您可以根据需要使用这些字段。我建议像这样:

  • 命名空间:系统/ Docker
  • 指标名称:例如NumContainersRunning
  • 尺寸:
    • 也许没有?
    • 也许类似于Stage:Beta / Prod
    • 也许类似Ec2InstanceId:BLA

请参见https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/cloudwatch_concepts.html

如果您想要一个指标来显示所有实例上正在运行多少个容器,则需要将脚本更改为以下内容并将其部署在所有实例上:

result=$(docker ps --format "{{.Names}}" | wc -l)
aws cloudwatch put-metric-data --metric-name "NumContainersRunning" --unit Count --value "$result" --namespace System/Docker

注意:指标名称为 NumContainersRunning

如果要为舰队中的每个实例都具有唯一的度量标准,则需要从每个实例中发布唯一的度量标准。您可以通过向指标添加维度来定义实例ID来实现。可以使用以下脚本完成此操作:

instanceid=$(curl http://169.254.169.254/latest/meta-data/instance-id)
result=$(docker ps --format "{{.Names}}" | wc -l)
aws cloudwatch put-metric-data --metric-name "NumContainersRunning" --unit Count --value "$result" --dimensions InstanceId=$instanceid --namespace System/Docker

注意:度量标准名称仍为 NumContainersRunning 。但是,您将在CloudWatch上看到不同的指标,每个实例一个。

另一方面,您是否考虑过使用Elastic Container Service?它将立即为您提供此指标和更多功能,并省去了手动管理容器的麻烦。