Привет читатели!
Недавно сменил место работы, но всё так же поглощён облачными технологиями. И проектов у меня теперь будет гораздо больше, а с ними и статей, я надеюсь, интересных.
Итак, потребовалось создать метрики по параметрам, которые Cloud Watch считать не умеет. Можно мерять много чего, но, например, возьмём Load Average. Этот странный, но понятный всем параметр, объясняет состояние системы. В целом, мы можем оценивать здоровье сервера по этому состоянию. Естественно, не всегда, но как пример LA идеален.
Что же нам для этого нужно?
1. Amazon CloudWatch Command Line Tools
2. Несколько скриптов
Начнём приготовления на сервере.
- В папке /opt создадим папку — aws.
- Распакуем утилиты командной строки в папку /opt/aws/mon.
- Ключ и сертификат pk-**.pem и cert-**.pem. Уложим в папку /opt/aws/keys
- Нужную папку 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» — где эта метрика будет находиться
Итак, конечный скрипт с переменными, вечным циклом и логгированием выглядит так:
#!/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 скрипт для старта/стопа нашего минидемона:
#!/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