Те администраторы, которые эксплуатируют решения от Amazon, знают, что при создании нового EC2-инстанса, автоматом создаются задания по мониторингу основных характеристик виртуального сервера, таких как загрузка CPU, использование сетевого интерфейса, I/O жесткого диска и т.п., но нет мониторинга ОЗУ, SWAP, дискового пространства, а это, согласитесь, достаточно важные параметры.
Amazon предупредил ситуацию, когда администраторы начнут задавать вопросы относительно возможности мониторинга вышеуказанных параметров и выложил мануал, с указанием, как можно реализовать этот мониторинг Инструкция на английском и, на мой взгляд, не объясняет доходчиво все моменты. Я позволю себе постараться описать процесс настройки мониторинга ОЗУ, SWAP, дискового пространства на русском с описанием некоторых нюансов, с которыми столкнулся в процессе работы.
Если в двух словах, то мониторинг осуществляется запуском perl-скрипта по cron, который считывает необходимые параметры серверы и выгружает показаетели в Amazon Cloud Watch . Perl-скрипт запускается на самом сервере,который предполагается мониторить.
Итак приступим.
Установим необходимое ПО на сервер для возможности работы perl-скрипта, который нам предполагает Amazon. Сервер у меня под CentOS, соответственно по RedHAT,Suse, Amazon AMI все делается по аналогии.
yum install wget unzip perl-cpan perl-YAML make bzip2 perl-IO-Compress-Bzip2 perl-HTTP-Daemon-SSL
Переходим в корень нашей файловой системе
cd /
и заходим в консоль perl
# perl -MCPAN -e shell
, в консоли выполняем команду установки LWP bundle
install Bundle::LWP5_837 LWP
На все вопросы установщика отвечаем yes. У меня с первого раза установка не закончилась положительно по причине неразрешенных зависимостей, который установщик perl не смог «подтянуть». Были следующие уведомления:
GAAS/HTML-Parser-3.71.tar.gz : make NO
GAAS/libwww-perl-5.837.tar.gz : make_test NO
PMQS/Compress-Raw-Zlib-2.063.tar.gz : make NO
PMQS/Compress-Raw-Bzip2-2.063.tar.gz : make NO
PMQS/IO-Compress-2.063.tar.gz : make_test NO
GAAS/HTTP-Message-6.06.tar.gz : make_test NO 2 dependencies missing (IO::Compress::Bzip2,IO::Uncompress::Bunzip2)
GAAS/HTTP-Negotiate-6.01.tar.gz : make_test NO
GAAS/HTTP-Daemon-6.01.tar.gz : make_test NO
GAAS/HTTP-Cookies-6.01.tar.gz : make_test NO
GAAS/libwww-perl-6.05.tar.gz : make_test NO
Соответственно, я искал менеджером пакетов yum необходимые пакеты perl и устанавливал их. В начале статьи я привел все,которые были необходимы мне для успешной работы perl-скрипта.
После успешной установки ПО скачиваем скрипт,распаковываем и переходим в директорию с основными файлами.
wget http://ec2-downloads.s3.amazonaws.com/cloudwatch-samples/CloudWatchMonitoringScripts-v1.1.0.zip
unzip CloudWatchMonitoringScripts-v1.1.0.zip
cd aws-scripts-mon
HELP очень информативен:
Usage: mon-put-instance-data.pl [options]
Collects memory, swap, and disk space utilization on an Amazon EC2
instance and sends this data as custom metrics to Amazon CloudWatch.
Description of available options:
—mem-util Reports memory utilization in percentages.
—mem-used Reports memory used in megabytes.
—mem-avail Reports available memory in megabytes.
—swap-util Reports swap utilization in percentages.
—swap-used Reports allocated swap space in megabytes.
—disk-path=PATH Selects the disk by the path on which to report.
—disk-space-util Reports disk space utilization in percentages.
—disk-space-used Reports allocated disk space in gigabytes.
—disk-space-avail Reports available disk space in gigabytes.
—aggregated[=only] Adds aggregated metrics for instance type, AMI id, and overall.
—auto-scaling[=only] Adds aggregated metrics for Auto Scaling group.
If =only is specified, reports only aggregated metrics.
—mem-used-incl-cache-buff Count memory that is cached and in buffers as used.
—memory-units=UNITS Specifies units for memory metrics.
—disk-space-units=UNITS Specifies units for disk space metrics.
Supported UNITS are bytes, kilobytes, megabytes, and gigabytes.
—aws-credential-file=PATH Specifies the location of the file with AWS credentials.
—aws-access-key-id=VALUE Specifies the AWS access key ID to use to identify the caller.
—aws-secret-key=VALUE Specifies the AWS secret key to use to sign the request.
—aws-iam-role=VALUE Specifies the IAM role name to provide AWS credentials.
—from-cron Specifies that this script is running from cron.
—verify Checks configuration and prepares a remote call.
—verbose Displays details of what the script is doing.
—version Displays the version number.
—help Displays detailed usage information.
Examples
To perform a simple test run without posting data to Amazon CloudWatch
./mon-put-instance-data.pl —mem-util —verify —verbose
To set a five-minute cron schedule to report memory and disk space utilization to CloudWatch
*/5 * * * * ~/aws-scripts-mon/mon-put-instance-data.pl —mem-util —disk-space-util —disk-path=/ —from-cron
For more information on how to use this utility, see Amazon CloudWatch Developer Guide at
http://docs.amazonwebservices.com/AmazonCloudWatch/latest/DeveloperGuide/mon-scripts-perl.html
Что сразу замечаем, так это то, что для публикации данных в web-консоль Amazon нам нужны учетные данные. Естественно, вы всегда можете использовать учетные данные Вашей административной учетной Amazon, но это очень плохо в плане безопасности и Amazon не рекомендует так делать. Для безопасной выгрузки данных нам потребуется воспользоваться сервисом Amazon AWS Identity and Access Management (IAM), который позволяет создать пользователей Amazon c ограниченными правами доступа к нашим сервисам на Amazon.
Подключаемся с использованием нашей учетной записи к Amazon и переходим в Security Credentials, появляется такое всплывающее окошко
где мы выбираем «Get Started With IAM Users»
Далее Create New Users
Вводим имя пользователя, которое хотим использовать:
Получаем уведомление, что пользователь успешно создан, закрываем это окно:
Ставим галочку напротив нашего пользователя, переходим на вкладку Permissions, нажимаем Attach User Policy
Выбираем нужный нам шаблон политики CloudWatch Full Access, который будет позволять читать и публиковать данные с CloudWatch.
Опять ставим галочку напротив нашего пользователя и переходим на вкладку Security Credentials, нажимаем на кнопку Manage Access Keys, далее Create Access Key. Сгенерированный ключ необходимо загрузить к себе на компьютер в безопасное место, он будет представлять собой csv-файл с Access Key ID и собственно с уникальной последовательностью символов(закрытым ключом).Копируем эти значений в файл на вашем сервере aws-scripts-mon/awscreds.conf
AWSAccessKeyId=<Ваш ID>
AWSSecretKey=<Ваш закрытый ключ>
Все можно проверять работу!
./mon-put-instance-data.pl --aws-credential-file=./awscreds.conf --mem-util --mem-used --mem-avail
Successfully reported metrics to CloudWatch. Reference Id: 6cd1f550-68e7-11e3-bf88-894ce6dbc2d3
Как видим, нам рапортовали, что все удачно опубликовано на Amazon.
Также можно считать данные о загрузке процессора, памяти, swap и дискового пространства с CloudWatch с использованием скрипта mon-get-instance-stats.pl
./mon-get-instance-stats.pl --aws-credential-file=./awscreds.conf
Instance i-44179008 statistics for the last 1 hour.
CPU Utilization
Average: 28.82%, Minimum: 19.02%, Maximum: 43.17%
Memory Utilization
Average: 36.84%, Minimum: 36.38%, Maximum: 37.55%
Swap Utilization
Average: 0.81%, Minimum: 0.81%, Maximum: 0.81%
Disk Space Utilization for /dev/xvde mounted on /
Average: 9.53%, Minimum: 9.52%, Maximum: 9.53%
Посмотрим, что изменилось в web-консоли CloudWatch.
Как видим, добавился новый пункт в левой панели Linux System. В основном поле(справа) можно посмотреть метрики, которые снимаются и построить графики для возможности просмотра динамики.
Для автоматического периодического снятия параметров состояния ОЗУ, SWAP и дискового пространства и публикации этих параметров в CloudWatch добавим следующее задание cron(информация будет сниматься каждые две минуты).
crontab -e
*/2 * * * * /home/distr/aws-scripts-mon/mon-put-instance-data.pl --aws-credential-file=/home/distr/aws-scripts-mon/awscreds.conf --mem-util --swap-util --disk-space-util --disk-path=/ --from-cron
Теперь состояние ОЗУ, SWAP и диска под контролем!)