Компания
76,72
рейтинг
4 июля 2012 в 16:34

Разработка → AWS CloudWatch: собственные метрики (Custom Metrics)

Привет хабравчане!

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

Итак, потребовалось создать метрики по параметрам, которые Cloud Watch считать не умеет. Можно мерять много чего, но, например, возьмём Load Average. Этот странный, но понятный всем параметр, объясняет состояние системы. В целом, мы можем оценивать здоровье сервера по этому состоянию. Естественно, не всегда, но как пример LA идеален.

Что же нам для этого нужно?

1. Amazon CloudWatch Command Line Tools
2. Несколько скриптов

Начнём приготовления на сервере.
  1. В папке /opt создадим папку — aws
  2. Распакуем утилиты командной строки в папку /opt/aws/mon
  3. Ключ и сертификат pk-**.pem и cert-**.pem. Уложим в папку /opt/aws/keys
  4. Нужную папку c Java симлинком направим на /usr/java/latest


Во первых, поймём как мы будем получать Load Average. Мне нравится так:
load_average=$(uptime | awk -F'load average:' '{ print $2 }' | awk '{ print $2 }')
load_average=${load_average%%','}

В этой переменной мы сохраним LA за 5 минут (второй).

Далее, нам нужен TimeStamp в определённом формате:
timestamp=$(date -u +%Y-%m-%dT%H:%M:%S.000Z)


Ну и последнее — регистрация значения метрики:
mon-put-data --metric-name "LoadAverage" --namespace "CustomMetric" --timestamp $timestamp --value $load_average

--metric-name «LoadAverage» — имя метрики
--namespace «CustomMetric» — где эта метрика будет находиться

Итак, конечный скрипт с переменными, вечным циклом и логгированием выглядит так:
/opt/aws/cw_scaler.sh
#!/bin/bash

export AWS_CLOUDWATCH_HOME=/opt/aws/mon
export AWS_CLOUDWATCH_URL=https://monitoring.amazonaws.com
export PATH=$AWS_CLOUDWATCH_HOME/bin:$PATH
export JAVA_HOME=/usr/java/latest
export TOOLS_HOME=/opt/aws
export EC2_PRIVATE_KEY=$TOOLS_HOME/keys/pk-GWO6MOXPTCZA5EY7**********RSFJ.pem
export EC2_CERT=$TOOLS_HOME/keys/cert-GWO6MOXPTCZA5EY7**********RSFJ.pem


while [ true ]; do
load_average=$(uptime | awk -F'load average:' '{ print $2 }' | awk '{ print $2 }')
load_average=${load_average%%','}

timestamp=$(date -u +%Y-%m-%dT%H:%M:%S.000Z)

mon-put-data --metric-name "LoadAverage" --namespace "CustomMetric" --timestamp $timestamp --value $load_average

echo "$timestamp: Load Average $load_average" >>$TOOLS_HOME/cw_scaler.log

echo "" >>$TOOLS_HOME/cw_scaler.log

sleep 14
done


Не забудем про init скрипт для старта/стопа нашего минидемона:
/etc/init.d/cw_scaler-init
#!/bin/bash1
#chkconfig: 2345 55 25
# source function library
. /etc/rc.d/init.d/functions

#Set environement
export TOOLS_HOME=/opt/aws


start()
{
    $TOOLS_HOME/cw_scaler.sh&
}

stop()
{
    kill $(ps ax | grep '/opt/aws/cw_scaler.sh' | grep -v "grep"  | awk '{print $1}')
}

case "$1" in
	start)
		echo "Starting Cloud Watch scaler."
		start
		;;
	stop)
		echo "Stopping  Cloud Watch scaler."
		stop
		;;
	*)
		echo $"Usage: cw_scaler.sh {start|stop}"
		exit 1
		;;
esac


Ну с собственно, что мы получили в конце? Через 5-10 минут у вас в панели Cloud Watch появится тип метрик: CustomMetric, а в нём — LoadAverage:


Да, господа, всё очень просто, и вы можете снимать любого рода данные, которые можно передать в числовом эквиваленте и на их основе уже строить автомасштабирование.

ЗЫ. Если заметели, это моя первая статья в корпоративном блоге EPAM Systems. Прошу любить и жаловать! = )
Автор: @korjik
EPAM
рейтинг 76,72

Комментарии (9)

  • 0
    Любить и жаловать тебя или блог EPAM на Хабре? :)
    • –1
      Меня в этом блоге)
      • 0
        За что? оО

        P.S. А блог Беларуского EPAM есть?
        • 0
          Любить меня в этом блоге за то, что я в него буду писать интересности.

          Про беларусский ЕРАМ — не знаю.
        • 0
  • 0
    Проще LA получать так load_average=$(uptime | awk -F', ' '{ print $4 }')
    • 0
      действительно проще)
  • +1
    А у меня такой вопрос: почему не используешь PID файл, а убиваешь по grep'у? Сам просто сейчас то же самое примерно делаю, вот и решил поинтересоваться.
    • 0
      Как говорится, так исторически сложилось)

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разработка