Aws cloudwatch put-metric-data каждый раз создает новые метрики вместо замены старых

Ожидание: Я пытаюсь отслеживать контейнеры докеров, работающие на экземпляре 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: Каждый раз, когда я запускаю задание для проверки количества запущенных контейнеров, добавляется новая метрика. Теперь, как я могу отследить это на графике.

enter image description here

It might be the expected cloudwatch behavior but how do I track the latest one in the graph. Blockquote

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
755
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша проблема в том, что вы каждый раз публикуете другое имя метрики. Имя метрики отличается, потому что вы включаете $результат в имя метрики.

Метрика CloudWatch — это упорядоченный по времени набор точек данных. Одна метрика называется/идентифицируется тремя вещами:

  • Пространство имен (строка)
  • Имя показателя (строка)
  • Размеры (необязательный набор пар Key -> Value String)

Вы можете использовать эти поля по своему усмотрению. Я бы предложил что-то вроде:

  • Пространство имен: Система/Докер
  • Название метрики: например. NumContainersРаботает
  • Габаритные размеры:
    • Может быть, нет?
    • Может быть, что-то вроде 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

Примечание. Имя метрики будет 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 вы увидите разные метрики, по одной для каждого экземпляра.

С другой стороны, вы рассматривали возможность использования Служба эластичных контейнеров? Он предоставит вам эту метрику и многое другое прямо из коробки и избавит вас от необходимости вручную управлять своими контейнерами.

Красиво объяснил. Спасибо. Хотелось бы, чтобы документация была похожей.

Tara Prasad Gurung 23.05.2019 07:28

Другие вопросы по теме