Ожидание: Я пытаюсь отслеживать контейнеры докеров, работающие на экземпляре EC2. Для простого варианта использования это то, что я пробовал. Получение количества контейнеров, работающих на машине, с помощью простого сценария bash, приведенного ниже.
Я запущу это, как только оно будет нормально работать на cronjob, так что он будет считать запущенный контейнер и отправлять данные в облачные часы каждый раз, когда он запускается.
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: Каждый раз, когда я запускаю задание для проверки количества запущенных контейнеров, добавляется новая метрика. Теперь, как я могу отследить это на графике.
It might be the expected cloudwatch behavior but how do I track the latest one in the graph. Blockquote
Ваша проблема в том, что вы каждый раз публикуете другое имя метрики. Имя метрики отличается, потому что вы включаете $результат в имя метрики.
Метрика CloudWatch — это упорядоченный по времени набор точек данных. Одна метрика называется/идентифицируется тремя вещами:
Вы можете использовать эти поля по своему усмотрению. Я бы предложил что-то вроде:
См. 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
Примечание. Имя метрики будет NumContainersРаботает.
Если вы хотите иметь уникальную метрику для каждого экземпляра в вашем парке, вам необходимо опубликовать уникальную метрику для каждого экземпляра. Вы можете сделать это, добавив измерение в метрику, определяющую идентификатор экземпляра. Это можно сделать с помощью следующего скрипта:
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
Примечание. Имя метрики по-прежнему будет NumContainersРаботает. Однако в CloudWatch вы увидите разные метрики, по одной для каждого экземпляра.
С другой стороны, вы рассматривали возможность использования Служба эластичных контейнеров? Он предоставит вам эту метрику и многое другое прямо из коробки и избавит вас от необходимости вручную управлять своими контейнерами.
Красиво объяснил. Спасибо. Хотелось бы, чтобы документация была похожей.