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

в 12:34, , рубрики: Amazon Web Services, AWS, Блог компании EPAM Systems Ukraine, метки:

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» — где эта метрика будет находиться

Итак, конечный скрипт с переменными, вечным циклом и логгированием выглядит так:

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:
AWS CloudWatch: собственные метрики (Custom Metrics)

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

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

Автор: korjik

* - обязательные к заполнению поля