Ваша проблема в том, что вы каждый раз публикуете другое имя метрики.Имя метрики отличается, потому что вы включаете $ result в имя метрики.
Метрика CloudWatch - упорядоченный по времени набор точек данных.Одна метрика называется / идентифицируется 3-мя вещами:
- Пространство имен (строка)
- Имя метрики (строка)
- Размеры (Необязательный набор ключей -> Value String пары)
Вы можете использовать эти поля по своему усмотрению.Я бы предложил что-то вроде:
- Пространство имен: Система / Докер
- Имя метрики: например, 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
Если вы хотите иметь уникальную метрику для каждого экземпляра в вашем автопарке, вам нужно будет опубликовать уникальную метрику для каждого экземпляра.Вы можете сделать это, добавив измерение в метрику, определяющую идентификатор экземпляра.Это можно сделать с помощью следующего сценария:
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 ?Он предоставит вам этот показатель и многое другое прямо из коробки и избавит вас от необходимости управлять контейнерами вручную.