- PVSM.RU - https://www.pvsm.ru -

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

AWS CloudWatch: собственные метрики (Custom Metrics)Привет читатели!

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

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

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

1. Amazon CloudWatch Command Line Tools [1]
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


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/amazon-web-services/10794

Ссылки в тексте:

[1] Amazon CloudWatch Command Line Tools: http://aws.amazon.com/developertools/2534