Почему Sonian отказались от использования Nagios и написали свой monitoring framework Sensu
Система на которой будем устанавливать Sensu CentOS 6.3 x64 c подключенным репозиторием EPEL
# cat /etc/issue CentOS release 6.3 (Final) # uname -rm 2.6.18-028stab077.1 x86_64 # yum repolist | grep epel * epel: epel.mirror.constant.com *epel Extra Packages for Enterprise Linux 6 - x86_64
Установка Sensu
Sensu server node
rabbitmq redis sensu-server / sensu-client / sensu-api / sensu-dashboard
Sensu client node
sensu-client
Установим RabbitMQ
# yum install erlang # rpm --import http://www.rabbitmq.com/rabbitmq-signing-key-public.asc # rpm -Uvh http://www.rabbitmq.com/releases/rabbitmq-server/v2.8.7/rabbitmq-server-2.8.7-1.noarch.rpm
Сконфигурируем RabbitMQ SSL
# yum install git git-core # git clone git://github.com/joemiller/joemiller.me-intro-to-sensu.git # cd joemiller.me-intro-to-sensu/ # ./ssl_certs.sh clean # ./ssl_certs.sh generate # mkdir /etc/rabbitmq/ssl # cp server_key.pem /etc/rabbitmq/ssl/ # cp server_cert.pem /etc/rabbitmq/ssl/ # cp testca/cacert.pem /etc/rabbitmq/ssl/
Создаем RabbitMQ /etc/rabbitmq/rabbitmq.config
[
{rabbit, [
{ssl_listeners, [5671]},
{ssl_options, [{cacertfile,"/etc/rabbitmq/ssl/cacert.pem"},
{certfile,"/etc/rabbitmq/ssl/server_cert.pem"},
{keyfile,"/etc/rabbitmq/ssl/server_key.pem"},
{verify,verify_peer},
{fail_if_no_peer_cert,true}]}
]}
].
Устанавливаем RabbitMQ management console
# rabbitmq-plugins enable rabbitmq_management The following plugins have been enabled: mochiweb webmachine rabbitmq_mochiweb amqp_client rabbitmq_management_agent rabbitmq_management Plugin configuration has changed. Restart RabbitMQ for changes to take effect.
Прописываем RabbitMQ в автозагрузку и запускаем
# chkconfig rabbitmq-server on # chkconfig --list | grep rabbit rabbitmq-server 0:off 1:off 2:on 3:on 4:on 5:on 6:off # service rabbitmq-server start Starting rabbitmq-server: SUCCESS rabbitmq-server.
Протокол amqp должен слушать порт 5672, amqp/ssl порт 5671.
# netstat -nlp | grep 567 tcp 0 0 0.0.0.0:55672 0.0.0.0:* LISTEN 54463/beam.smp tcp 0 0 :::5671 :::* LISTEN 54463/beam.smp tcp 0 0 :::5672 :::* LISTEN 54463/beam.smp
Проверим Web UI
http://IP.IP.IP.IP:55672 Username: guest Password: guest
Создадим RabbitMQ виртуальный хост и пользователя для Sensu
# rabbitmqctl add_vhost /sensu # rabbitmqctl add_user sensu your_password # rabbitmqctl set_permissions -p /sensu sensu ".*" ".*" ".*"
Результат

Установим Redis
# yum install redis # rpm -qa | grep redis redis-2.4.10-1.el6.x86_64
Прописываем Redis в автозагрузку и запускаем
# chkconfig redis on # chkconfig --list | grep redis redis 0:off 1:off 2:on 3:on 4:on 5:on 6:off # service redis start Starting redis-server: [ OK ]
Создадим Sensu.repo
# cat /etc/yum.repos.d/Sensu.repo [sensu] name=sensu-main baseurl=http://repos.sensuapp.org/yum/el/6/$basearch/ gpgcheck=0 enabled=1
Устанавливаем Sensu
# yum install sensu
Прописываем сервисы Sensu server node в автозагрузку
# chkconfig sensu-server on # chkconfig sensu-api on # chkconfig sensu-client on # chkconfig sensu-dashboard on
Сконфигурируем Sensu
Скопируем SSL client key + cert которые мы создавали ранее
# # mkdir -p /etc/sensu/ssl/ # cp client_key.pem client_cert.pem /etc/sensu/ssl/
Конфигурационный файл Sensu server node /etc/sensu/config.json
{
"rabbitmq": {
"ssl": {
"private_key_file": "/etc/sensu/ssl/client_key.pem",
"cert_chain_file": "/etc/sensu/ssl/client_cert.pem"
},
"host": "localhost",
"port": 5671,
"user": "sensu",
"password": "your_password",
"vhost": "/sensu"
},
"redis": {
"host": "localhost",
"port": 6379
},
"api": {
"host": "localhost",
"port": 4567
},
"dashboard": {
"port": 8080,
"user": "admin",
"password": "secret"
},
"handlers": {
"default": {
"type": "set",
"handlers": [
"stdout"
]
},
"stdout": {
"type": "pipe",
"command": "cat"
}
},
"checks": {
"test": {
"command": "echo -n OK",
"subscribers": [
"test"
],
"interval": 60
}
},
"client": {
"name": "localhost",
"address": "127.0.0.1",
"subscriptions": [
"test"
]
}
}
Запускаем сервисы Sensu
# service sensu-server start Starting sensu-server [ OK ] # service sensu-api start Starting sensu-api [ OK ] # service sensu-client start Starting sensu-client [ OK ] # service sensu-dashboard start Starting sensu-dashboard [ OK ]
Результат

Установка Sensu client node происходит аналогичным образом, только запускать необходимо один сервис
# service sensu-client start
Добавим тестовую проверку
Устанавливаем check скрипт
# yum install rubygems ruby-devel make gcc # gem install sensu-plugin --no-rdoc --no-ri Building native extensions. This could take a while... Successfully installed json-1.7.5 Successfully installed mixlib-cli-1.2.2 Successfully installed sensu-plugin-0.1.4 3 gems installed
Скачиваем и устанавливаем check-procs.rb
# cd /etc/sensu/plugins # wget https://raw.github.com/sensu/sensu-community-plugins/master/plugins/processes/check-procs.rb # chmod 755 /etc/sensu/plugins/check-procs.rb
Добавим Handler
# cat /etc/sensu/conf.d/handler_email.json
{
"handlers": {
"email": {
"type": "pipe",
"command": "mail -s 'Sensu Alert' admin@sensu"
}
}
}
В проверке изменяем handlers
# grep handlers /etc/sensu/conf.d/check_cron.json
"handlers": ["default", "email"],
Для теста останавливаем сервис crond
# service crond stop
Через минуту проверяем Dashboard и email
