Настройка мониторинга с помощью Sensu, RabbitMQ и Redis в Ubuntu 14.04

Sensu – это инструмент мониторинга, написанный на Ruby, который использует RabbitMQ в качестве брокера сообщений и Redis для хранения данных. Он хорошо подходит для мониторинга облачных сред.

Sensu связывает выходные данные скриптов проверки со скриптами-обработчиками, благодаря чему получается надежная система мониторинга и оповещений. Скрипты проверки могут запускаться на большом количестве нод и сообщать о том, выполняется ли определенное условие (например, работает ли Apache). Скрипты-обработчики могут выполнять различные действия, к примеру, отправлять оповещения по электронной почте.

Оба типа скриптов выполняются на главном, ведущем сервере Sensu, который отвечает за организацию проверок среди клиентских серверов Sensu и за обработку результатов. Если проверка вызывает событие, оно передается обработчику, который в итоге выполнит указанное действие.

Давайте вернемся к проверке, которая контролирует состояние веб-сервера Apache. Такая проверка будет выполняться на клиентах Sensu. Если она обнаружит, что Apache отключен, сервер Sensu передаст событие обработчику, а он может инициировать действие: отправить уведомление на почту или собрать метрики времени простоя.

В этом мануале вы научитесь устанавливать и настраивать один ведущий и один клиентский сервер Sensu.

Требования

  • Один сервер Ubuntu 14.04, который будет работать как ведущий сервер Sensu.
  • Еще один сервер Ubuntu 14.04 минимум. Этот сервер будет клиентом, чьи данные будет отслеживать сервер Sensu.
  • Пользователь с доступом к sudo на всех серверах. Создание этого пользователя и все необходимые дополнительные действия описаны здесь.
  • Обновите индекс и пакеты:

sudo apt-get update && sudo apt-get -y upgrade

1: Установка ведущего сервера Sensu

Сначала мы настроим ведущий сервер Sensu. Для этого нужно установить RabbitMQ, Redis, Sensu и панель инструментов Uchiwa, а также некоторое вспомогательное программное обеспечение.

Добавьте исходный код RabbitMQ в список APT.

echo "deb http://www.rabbitmq.com/debian/ testing main" | sudo tee -a /etc/apt/sources.list.d/rabbitmq.list

Загрузите и добавьте подпись RabbitMQ.

curl -L -o ~/rabbitmq-signing-key-public.asc http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
sudo apt-key add ~/rabbitmq-signing-key-public.asc

Установите RabbitMQ и Erlang.

sudo apt-get update && sudo apt-get install -y rabbitmq-server erlang-nox

Сервис RabbitMQ должен запуститься автоматически. Если этого не случилось, запустите его с помощью следующей команды:

sudo service rabbitmq-server start

Sensu использует SSL для защиты соединений между своими компонентами и RabbitMQ. Сервис Sensu можно использовать и без SSL, но делать это крайне не рекомендуется. Загрузите генератор сертификатов Sensu в каталог /tmp и сгенерируйте сертификаты SSL.

cd /tmp && wget http://sensuapp.org/docs/0.13/tools/ssl_certs.tar && tar -xvf ssl_certs.tar
cd ssl_certs && ./ssl_certs.sh generate

Теперь создайте каталог для SSL-сертификатов RabbitMQ и скопируйте в него полученные файлы:

sudo mkdir -p /etc/rabbitmq/ssl && sudo cp /tmp/ssl_certs/sensu_ca/cacert.pem /tmp/ssl_certs/server/cert.pem /tmp/ssl_certs/server/key.pem /etc/rabbitmq/ssl

Создайте и отредактируйте файл /etc/rabbitmq/rabbitmq.config:

sudo vi /etc/rabbitmq/rabbitmq.config

Добавьте в файл следующие строки. Они настроят SSL-прослушиватель RabbitMQ для прослушивания порта 5671 и для поддержки сгенерированного центра сертификации и самих сертификатов. Этот файл проверит соединение и выдаст ошибку, если сертификатов не будет.

[
{rabbit, [
{ssl_listeners, [5671]},
{ssl_options, [{cacertfile,"/etc/rabbitmq/ssl/cacert.pem"},
{certfile,"/etc/rabbitmq/ssl/cert.pem"},
{keyfile,"/etc/rabbitmq/ssl/key.pem"},
{verify,verify_peer},
{fail_if_no_peer_cert,true}]}
]}
].

Перезагрузите RabbitMQ:

sudo service rabbitmq-server restart

Создайте виртуальный хост RabbitMQ и пользователя для Sensu. Укажите надежный пароль. Он понадобится вам позже при настройке сервера Sensu и отслеживаемых клиентов.

sudo rabbitmqctl add_vhost /sensu
sudo rabbitmqctl add_user sensu pass
sudo rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"

Теперь установите Redis:

sudo apt-get -y install redis-server

Сервис Redis должен запуститься автоматически. Если этого не произошло, запустите его с помощью следующей команды:

sudo service redis-server start

Примечание: Если Redis уже запущен, вы получите сообщение об ошибке:

Starting redis-server: failed.

Загрузите исходные файлы и ключи для установки Sensu.

wget -q http://repos.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add -
echo "deb     http://repos.sensuapp.org/apt sensu main" | sudo tee -a /etc/apt/sources.list.d/sensu.list

Установите Sensu и панель мониторинга Uchiwa.

sudo apt-get update && sudo apt-get install -y sensu uchiwa

Сейчас Sensu нужна информация о безопасном соединении с RabbitMQ. Создайте каталог для SSL-сертификатов Sensu и скопируйте туда сгенерированные сертификаты.

sudo mkdir -p /etc/sensu/ssl && sudo cp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem /etc/sensu/ssl

Теперь все компоненты Sensu установлены.

2: Настройка ведущего сервера

Теперь нам нужно настроить ведущий сервер Sensu. Давайте создадим индивидуальные конфигурационные файлы в каталоге /etc/sensu/conf.d для каждого компонента ( так будет проще управлять ими). Большинство значений, показанных ниже, можно оставить без изменений (если только эти компоненты не установлены на отдельных компьютерах). Файл /etc/sensu/config.json.example <^> – это образец конфигурации, который вы можете скопировать и использовать для настройки Sensu.

Создайте и откройте в редакторе файл rabbitmq.json.

sudo vi /etc/sensu/conf.d/rabbitmq.json

Вставьте в файл следующие строки, которые позволят Redis подключаться к экземпляру RabbitMQ с помощью SSL-сертификата. Укажите пользователя и пароль, которые вы установили для виртуального хоста RabbitMQ.

{
"rabbitmq": {
"ssl": {
"cert_chain_file": "/etc/sensu/ssl/cert.pem",
"private_key_file": "/etc/sensu/ssl/key.pem"
},
"host": "localhost",
"port": 5671,
"vhost": "/sensu",
"user": "sensu",
"password": "pass"
}
}

Создайте файл redis.json:

sudo vi /etc/sensu/conf.d/redis.json

Вставьте в файл информацию о подключении для Sensu, с помощью которой он получит доступ к экземпляру Redis.

{
"redis": {
"host": "localhost",
"port": 6379
}
}

Создайте и откройте в редакторе файл api.json.

Вставьте в этот файл следующие строки, которые содержат информацию для Sensu о подключении к сервису API.

{
"api": {
"host": "localhost",
"port": 4567
}
}

Затем создайте файл uchiwa.json.

sudo vi /etc/sensu/conf.d/uchiwa.json

Добавьте следующие строки. Они содержат информацию о соединении с панелью Uchiwa. При желании вы можете указать в блоке uchiwa имя пользователя и пароль для аутентификации. Если вы хотите, чтобы панель была открытой, просто оставьте все как есть.

{
"sensu": [
{
"name": "Sensu",
"host": "localhost",
"ssl": false,
"port": 4567,
"path": "",
"timeout": 5000
}
],
"uchiwa": {
"port": 3000,
"stats": 10,
"refresh": 10000
}
}

В этом примере ведущий сервер Sensu будет мониторить сам себя в качестве клиента. Создайте файл client.json и откройте его в редакторе.

sudo vi /etc/sensu/conf.d/client.json

Добавьте следующие строки, указав свое имя клиента Sensu. Это имя вы увидите в панели инструментов Uchiwa.

Примечание: Имя не может содержать пробелов или специальных символов.

Вы можете оставить адрес как localhost, так как в данном примере сервер мониторит сам себя. Позже мы создадим подобный файл для внешних клиентов.

{
"client": {
"name": "server",
"address": "localhost",
"subscriptions": [ "ALL" ] }
}

Добавьте сервисы Sensu в автозагрузку.

sudo update-rc.d sensu-server defaults
sudo update-rc.d sensu-client defaults
sudo update-rc.d sensu-api defaults
sudo update-rc.d uchiwa defaults

Запустите эти сервисы:

sudo service sensu-server start
sudo service sensu-client start
sudo service sensu-api start
sudo service uchiwa start

Теперь Sensu можно открыть в браузере по адресу http://ip-address:3000.

3: Установка клиента Sensu

Теперь нужно установить Sensu на все клиентские машины, которые нужно отслеживать. В данном мануале у нас будет один клиент.

Оставаясь на ведущем сервере Sensu, скопируйте сертификаты SSL в каталог /tmp клиентского сервера с помощью SCP. Укажите своего пользователя и IP клиентского сервера.

scp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem user@ip:/tmp

Теперь перейдите на клиентскую машину, которую нужно отслеживать, и загрузите ключ и исходные файлы Sensu.

wget -q http://repos.sensuapp.org/apt/pubkey.gpg -O- | sudo apt-key add -
echo "deb     http://repos.sensuapp.org/apt sensu main" | sudo tee -a /etc/apt/sources.list.d/sensu.list

Установите Sensu.

sudo apt-get update && sudo apt-get -y install sensu

Вам необходимо предоставить клиенту информацию о подключении к RabbitMQ. Создайте каталог для SSL-сертификатов Sensu, а затем скопируйте сертификаты с главного сервера Sensu в папку /tmp.

sudo mkdir -p /etc/sensu/ssl && sudo cp /tmp/cert.pem /tmp/key.pem /etc/sensu/ssl

Создайте файл rabbitmq.json:

sudo vi /etc/sensu/conf.d/rabbitmq.json

Вставьте в файл следующие строки. В качестве значения хоста укажите IP-адрес сервера RabbitMQ (IP-адрес ведущего сервера Sensu). Значения пользователя и пароля должны совпадать с теми, которые вы указали в виртуальном хосте RabbitMQ на ведущем сервере Sensu.

{
"rabbitmq": {
"ssl": {
"cert_chain_file": "/etc/sensu/ssl/cert.pem",
"private_key_file": "/etc/sensu/ssl/key.pem"
},
"host": "1.1.1.1",
"port": 5671,
"vhost": "/sensu",
"user": "sensu",
"password": "pass"
}
}

Предоставьте конфигурацию для этого сервера Sensu, создав и отредактировав файл client.json.

sudo vi /etc/sensu/conf.d/client.json

Добавьте в файл следующие строки. Выберите любое удобное имя (так этот сервер будет называться в панели инструментов Uchiwa). Адрес можно оставить как localhost.

Примечание: Имя не должно содержать пробелов или специальных символов.

{
"client": {
"name": "client1",
"address": "localhost",
"subscriptions": [ "ALL" ] }
}

Включите и запустите клиент.

sudo update-rc.d sensu-client defaults
sudo service sensu-client start

Теперь запись о клиенте появится во вкладке Clients в панели Sensu.

4: Создание проверок

Теперь, когда сервис Sensu запущен, нам нужно добавить проверку. Давайте напишем скрипт Ruby, который будет проверять, работает ли Apache.

Если у вас не установлен Apache, установите его сейчас и на ведущем, и на клиентском сервере Sensu.

sudo apt-get install -y apache2

Apache должен запуститься по умолчанию на обоих серверах.

Перед установкой гема sensu-plugin убедитесь, что у вас есть все необходимые библиотеки. Установите библиотеки Ruby и build-essential и на ведущем, и на клиентском сервере Sensu.

sudo apt-get install -y ruby ruby-dev build-essential

Установите гем sensu-plugin на все машины:

sudo gem install sensu-plugin

Затем создайте файл check-apache.rb в папке плагинов Sensu и измените права доступа. Это нужно сделать и на главной, и на клиентских машинах.

sudo touch /etc/sensu/plugins/check-apache.rb && sudo chmod 755 /etc/sensu/plugins/check-apache.rb

Отредактируйте файл check-apache.rb как на главном сервере, так и на клиентском сервере Sensu.

sudo vi /etc/sensu/plugins/check-apache.rb

Добавьте следующие строки, которые описывают процесс проверки состояния Apache.

#!/usr/bin/env ruby
procs = `ps aux`
running = false
procs.each_line do |proc|
running = true if proc.include?('apache2')
end
if running
puts 'OK - Apache daemon is running'
exit 0
else
puts 'WARNING - Apache daemon is NOT running'
exit 1
end

Создайте и отредактируйте файл check_apache.json. Это нужно сделать только на главном сервере Sensu.

sudo vi /etc/sensu/conf.d/check_apache.json

Вставьте в него следующие строки, которые будут запускать скрипт для проверки Apache каждые 60 секунд.

{
"checks": {
"apache_check": {
"command": "/etc/sensu/plugins/check-apache.rb",
"interval": 60,
"subscribers": [ "ALL" ] }
}
}

Перезапустите Sensu и API на ведущем сервере.

sudo service sensu-server restart && sudo service sensu-api restart

Перезапустите клиент Sensu (команду нужно запустить на клиентском сервере Sensu).

sudo service sensu-client restart

Через несколько минут вы увидите, что проверка появилась во вкладке Checks в панели Sensu.

Остановите сервис Apache на любом из ваших серверов, чтобы проверить, работает ли скрипт.

sudo service apache2 stop

Через несколько минут в панели Events должно появиться предупреждение. Нажмите на него, чтобы получить дополнительную информацию и предпринять какие-либо действия: можно, например, проигнорировать проблему или решить ее.

Запустите Apache, чтобы устранить предупреждение.

sudo service apache2 start

5: Настройка обработчика

Обработчики могут отправлять уведомления по электронной почте или передавать данные на другие приложения, такие как Graphite. Они предпринимают действия на основе событий. Давайте создадим обработчик, который отправит электронное письмо, если проверка Apache вернула ошибку. Обратите внимание, сервер должен поддерживать отправку почту.

Читайте также: Установка и настройка Postfix на Ubuntu 14.04

На главном сервере Sensu создайте и отредактируйте файл handler_email.json.

sudo vi /etc/sensu/conf.d/handler_email.json

В файл вставьте следующие строки, заменив email@address.com своим адресом электронной почты, на который вы хотите получать уведомления. В зависимости от настроек вашего почтового сервера может быть проще установить псевдоним для пользователя на главном сервере Sensu. Этот обработчик называется email и будет использовать утилиту mail для отправки писем с темой sensu event на указанный адрес электронной почты.

{
"handlers": {
"email": {
"type": "pipe",
"command": "mail -s 'sensu event' email@address.com"
}
}
}

Отредактируйте файл check_apache.json.

sudo vi /etc/sensu/conf.d/check_apache.json

Добавьте новую строку handlers с обработчиком email в блок apache_check.

{
"checks": {
"apache_check": {
"command": "/etc/sensu/plugins/check-apache.rb",
"interval": 60,
"handlers": ["default", "email"],
"subscribers": [ "ALL" ] }
}
}

Перезапустите sensu-api и sensu-server.

sudo service sensu-api restart && sudo service sensu-server restart

Остановите сервис Apache еще раз, чтобы проверить, приходят ли оповещения по электронной почте. Вы должны получать сообщение каждые 60 секунд.

sudo service apache2 stop

Вы должны получить такое электронное письмо:

Return-Path: <sensu@sensu-master>
...
Subject: sensu event
To: <alerts@sensu-master.com>
...
From: sensu@sensu-master (Sensu Monitoring Framework)
{"id":"481c85c4-485d-4f25-b835-cea5aef02c69","client":{"name":"Sensu-Master-Server","address":"localhost","subscriptions":["ALL"],"version":"0.13.1","timestamp":1411681990},"check":{"command":"/etc/sensu/plugins/check-apache.rb","interval":60,"handlers":["default","email"],"subscribers":["ALL"],"name":"apache_check","issued":1411682001,"executed":1411682001,"duration":0.023,"output":"WARNING - Apache daemon is NOT running\n","status":1,"history":["0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","1"]},"occurrences":1,"action":"create"}

Запустите сервис Apache, чтобы исправить ошибку:

sudo service apache2 start

Заключение

Sensu – это универсальный инструмент мониторинга со своими плагинами и поддержкой пользовательских скриптов. Вы также можете создавать обработчики данных на основе событий.

Tags: , , , ,

Добавить комментарий