Как настроить Sensu Monitoring, RabbitMQ и Redis в Ubuntu 14.04

Вступление

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

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

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

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

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

Предпосылки

Для настройки Sensu вам понадобится:

  • Один главный узел Droplet работает * Ubuntu 14.04 *. Это узел, который вы будете использовать для просмотра всех данных мониторинга.

  • По крайней мере один дополнительный узел, который вы хотите отслеживать, работающий * Ubuntu 14.04 *.

Создайте пользователя sudo для каждой капли. Сначала создайте пользователя с помощью команды, заменив имя пользователя на имя, которое вы хотите использовать.

adduser

Это создаст пользователя и соответствующий домашний каталог и группу. Вам будет предложено установить пароль для нового пользователя и подтвердить пароль. Вам также будет предложено ввести информацию о пользователе. Подтвердите информацию о пользователе, чтобы создать пользователя.

Затем предоставьте пользователю привилегии sudo с помощью команды + visudo +.

visudo

Это откроет файл. В разделе «+ Спецификация привилегий пользователя +» добавьте еще одну строку для созданного пользователя, чтобы она выглядела так (с выбранным вами именем пользователя вместо):

# User privilege specification
root ALL=(ALL:ALL) ALL
ALL=(ALL:ALL) ALL

Сохраните файл и переключитесь на нового пользователя.

su -

Обновите системные пакеты и обновите их.

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

Шаг первый - установка на мастер

Сначала мы настроим главный сервер 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 в каталог и сгенерируйте сертификаты 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

Создайте каталог RabbitMQ SSL и скопируйте сертификаты.

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

Создайте и отредактируйте файл.

sudo vi /etc/rabbitmq/rabbitmq.config

Добавьте следующие строки в файл. Это настраивает прослушиватель RabbitMQ SSL для прослушивания порта 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
sudo rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"

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

sudo apt-get -y install redis-server

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

sudo service redis-server start

Добавьте источники и ключи для установки 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 (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 установлены.

Шаг второй - настройка на мастер

Теперь нам нужно настроить Sensu. Мы создадим отдельные файлы конфигурации в папке для удобства чтения и управления. Если вы не настроили службы и компоненты, упомянутые в файлах конфигурации, на отдельных компьютерах, вы можете оставить большинство значений, показанных ниже, без изменений. Альтернативно, /etc/sensu/config.json.example <^> - это еще один пример файла конфигурации, который вы можете скопировать и использовать для настройки Sensu.

Создайте и отредактируйте файл.

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

Добавьте следующие строки, которые позволят Redis безопасно подключаться к экземпляру RabbitMQ с использованием вашего SSL-сертификата. * User * и * pass * должны быть теми, которые вы установили для виртуального хоста 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": "",
   "password": ""
 }
}

Создайте и отредактируйте файл.

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

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

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

Создайте и отредактируйте файл.

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

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

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

Создайте и отредактируйте файл.

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

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

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

В этом примере мы имеем монитор главного сервера Sensu в качестве клиента. Итак, создайте и отредактируйте файл.

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

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

Вы можете оставить значение, так как мы наблюдаем за этим сервером. Позже мы снова создадим подобный файл для каждого клиентского хоста, который будет отслеживаться.

{
 "client": {
   "name": "",
   "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

Запустите сервисы Sensu.

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

На этом этапе вы можете получить доступ к Sensu по адресу http: //: 3000.

изображение: https: //assets.digitalocean.com/articles/sensu/uchiwa-home.png [Панель инструментов Sensu по умолчанию]

Шаг третий - установка на клиент

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

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

scp /tmp/ssl_certs/client/cert.pem /tmp/ssl_certs/client/key.pem @:/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 и скопируйте сертификаты в папку «+ / tmp +», которые были скопированы с главного сервера Sensu.

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

Создайте и отредактируйте файл.

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": "",
   "port": 5671,
   "vhost": "/sensu",
   "user": "",
   "password": ""
 }
}

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

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

Добавьте следующие строки. Вы должны отредактировать значение так, как вы хотите, чтобы этот сервер назывался на панели инструментов Uchiwa. * В имени не должно быть пробелов или специальных символов. *

Вы можете оставить значение равным, так как мы наблюдаем за этим клиентским сервером Sensu.

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

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

sudo update-rc.d sensu-client defaults

sudo service sensu-client start

Теперь вы должны увидеть клиента на вкладке «Клиенты» на информационной панели Sensu.

Шаг четвертый - Настройка чека

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

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

sudo apt-get install -y apache2

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

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

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

Установите гем sensu-plugin на главном сервере Sensu и на клиентском сервере Sensu.

sudo gem install sensu-plugin

Создайте файл в папке плагинов Sensu и измените права доступа к файлам как на главном сервере Sensu, так и на клиентском сервере Sensu.

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

Отредактируйте файл как на главном сервере Sensu, так и на клиентском сервере 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

Создавайте и редактируйте файл только на главном сервере 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 на главном сервере Sensu.

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

Перезапустите клиент Sensu на клиентском сервере Sensu.

sudo service sensu-client restart

Через несколько минут вы увидите появившийся чек на вкладке «Проверки» на панели инструментов Sensu.

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

sudo service apache2 stop

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

В этом образе Apache был остановлен на клиентском сервере. Это страница * Клиенты *.

изображение: https: //assets.digitalocean.com/articles/sensu/uchiwa-checks.png [клиенты панели инструментов Sensu]

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

sudo service apache2 start

Шаг пятый - настройка обработчика

Обработчики могут отправлять уведомления по электронной почте или отправлять данные в другие приложения, такие как Graphite, на основе событий. Здесь мы создадим обработчик, который отправит электронное письмо, если проверка Apache не удалась. Обратите внимание, что ваш сервер должен быть настроен для отправки электронной почты. Вы можете использовать этот Postfix Tutorial для настройки простого почтового сервера. (Вы можете захотеть, чтобы почта отправлялась пользователю на главном сервере Sensu для простейшей настройки.)

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

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

Добавьте следующие строки, заменив адрес электронной почты, на который вы хотите получать уведомления. В зависимости от настроек вашего почтового сервера может быть проще установить этот псевдоним для пользователя на главном сервере Sensu. Этот обработчик называется «электронная почта» и будет использовать почтовую утилиту для отправки электронного письма с темой «событие Sensu» на указанный адрес электронной почты.

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

Редактировать

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

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

{
 "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: <[email protected]>
...
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 - это универсальный инструмент мониторинга со своими плагинами и пользовательскими сценариями, которые вы можете написать для него. Вы также можете создавать обработчики для обработки данных. Продолжайте изучать, чтобы получить это как раз для вас.

Related