- PVSM.RU - https://www.pvsm.ru -
Привет читатели!
Недавно сменил место работы, но всё так же поглощён облачными технологиями. И проектов у меня теперь будет гораздо больше, а с ними и статей, я надеюсь, интересных.
Итак, потребовалось создать метрики по параметрам, которые Cloud Watch считать не умеет. Можно мерять много чего, но, например, возьмём Load Average. Этот странный, но понятный всем параметр, объясняет состояние системы. В целом, мы можем оценивать здоровье сервера по этому состоянию. Естественно, не всегда, но как пример LA идеален.
Что же нам для этого нужно?
1. Amazon CloudWatch Command Line Tools [1]
2. Несколько скриптов
Начнём приготовления на сервере.
Во первых, поймём как мы будем получать 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
Сайт-источник 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
Нажмите здесь для печати.