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

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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
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

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