示例: 我正在尝试监视在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的行为方式: 每次运行作业以检查运行的容器数时,都会添加一个新指标。现在如何在图形中跟踪它。
这可能是预期的cloudwatch行为,但是我如何跟踪 图中最新的一个。 引用
答案 0 :(得分:3)
您的问题是您每次都发布不同的度量标准名称。指标名称不同,因为您在指标名称中包含 $ result 。
CloudWatch指标是按时间顺序排列的一组数据点。单个指标由3种事物命名/标识:
您可以根据需要使用这些字段。我建议像这样:
请参见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?它将立即为您提供此指标和更多功能,并省去了手动管理容器的麻烦。