вторник, 31 марта 2015 г.

Установка Icinga2 и Icinga Web 2

После затянувшейся паузы продолжим создавать систему мониторинга на базе Icinga2, некий костяк уже создан, теперь самое время установить саму айсингу. Сперва устанавливать будем на Fedora 21, на тестовый сервер и через некоторое время установим на основной сервер с CentOS.

Наверно, имеет смысл описать планируемый состав серверов. И так будет два сервера с идентичными настройками:
- основной боевой на CentOS и с этого сервера будет идти рассылка уведомлений дежурному персоналу (у меня есть такой персонал;);
- резервный тестовый сервер на Fedora 21, настроенный идентично за исключением рассылки уведомлений дежурному персоналу, уведомления будут слаться только администратору системы мониторинга для контроля адекватности работы и отлавливания ложных срабатываний (хотя избыточность уведомлений для дежурного персонала тоже не помешала бы, но это политическое решение).

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

В официальной документации установка описана подробно (только по каким то причинам пропущена установка из исходников), просто пробежимся по этому этапу:

Указываем прокси:
# export http_proxy=http://10.10.10.10:8080

Добавляем репозитарий с пакетами Icinga2:
# rpm --import http://packages.icinga.org/icinga.key
curl -o /etc/yum.repos.d/ICINGA-release.repo http://packages.icinga.org/fedora/ICINGA-release.repo
# yum makecache

Ставим пакеты, включаем и запускаем:

# yum install icinga2
# systemctl enable icinga2
# systemctl start icinga2


Теперь в айсинге имеется механизм подключения фич, посмотрим список выключенных и включеных фич:
# icinga2 feature list
Disabled features: api command compatlog debuglog gelf graphite icingastatus livestatus opentsdb perfdata statusdata syslog
Enabled features: checker mainlog notification


На данный момент включены:
checker -- выполнение проверок;
mainlog -- писать логи в icinga2.log;
notification -- рассылка уведомлений.

Включение и выключение фич будет подробнее описано здесь (TODO).

По умолчанию Icinga2 использует следующие файлы и каталоги:
/etc/icinga2                содержит конфигурационные файлы;
/etc/init.d/icinga2         стартовый скрипт;
/usr/sbin/icinga2           бинарники;
/usr/share/doc/icinga2      документация;
/usr/share/icinga2/include  конфигурации шаблонов и плагинов;
/var/run/icinga2            файл PID;
/var/run/icinga2/cmd        командный канал и сокет живого статуса;
/var/cache/icinga2          файлы status.dat/objects.cache, icinga2.debug;
/var/spool/icinga2          используется для фалов очереди обработки;
/var/lib/icinga2            файл состояния Icinga 2, кластерный лог, локальный удостоверяющий центр (CA) с конфигурационными файлами;
/var/log/icinga2            логи и директория compat для фичи CompatLogger;

Для выполнения проверок параметров объектов мониторинга потребуются так называемые плагины, по сути это скрипты или бинарники, которые выполняют некую проверку и в зависимости от полученного результата завершают своё выполнение с определенным кодом выхода. Позже мы научимся писать плагины сами (TODO), а теперь установим набор плагинов, который предоставляет The Monitoring Plugins Project, частью которых мы воспользуемся.

Установить этот набор плагинов можно из EPEL, как и указано в документации, мы же будем устанавливать из исходников:

# wget https://www.monitoring-plugins.org/download/monitoring-plugins-2.1.1.tar.gz
# tar zxvf monitoring-plugins-2.1.1.tar.gz
# cd monitoring-plugins-2.1.1/
# yum install gcc
# ./configure

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

# make
# cd plugins
# mkdir /usr/local/libexec/icinga2
# cp check_disk /usr/local/libexec/icinga2/
# cp check_http /usr/local/libexec/icinga2/
# cp check_load /usr/local/libexec/icinga2/
# cp check_ping /usr/local/libexec/icinga2/
# cp check_procs /usr/local/libexec/icinga2/
# cp check_ssh /usr/local/libexec/icinga2/
# cp check_swap /usr/local/libexec/icinga2/
# cp check_users /usr/local/libexec/icinga2/

здесь мы создали каталог для плагинов и скопировали в него некоторые плагины, которые используются в дефолтной конфигурации для мониторинга хоста на который мы установили Icinga2.
И сразу же внесём этот каталог в константы:

# grep "const PluginDir" /etc/icinga2/constants.conf
const PluginDir = "/usr/local/libexec/icinga2"


Перечитаем конфиги:
# systemctl reload icinga2

Для начальной установки и конфигурации плагинов этих действий достаточно.

Кратко о командах которые поддерживает systemctl в отношении Icinga2:
start -- стартует демон Icinga2;
stop -- останавливает демона;
restart -- перезапуск, по факту выполняется команда stop с последующей командой start;
reload -- перезагрузка, посылается сигнал HUP, который вызывает перезапуск. Не равноценна команде restart, т.к. перезагрузка не дожидается пока Icinga2 перезапустится;
status -- проверяет статус;
enable -- включает (disable - выключает) сервис как загрузочный при старте системы (подобно chkconfig).

В официальной документации на этом месте настройка подсветки синтаксиса конфигурационных файлов в паре редакторов. Настроим подсветку в vim:

# PREFIX=~/.vim
# mkdir -p $PREFIX/{syntax,ftdetect}
# cp /usr/share/doc/icinga2-common/syntax/vim/syntax/icinga2.vim $PREFIX/syntax/
# cp /usr/share/doc/icinga2-common/syntax/vim/ftdetect/icinga2.vim $PREFIX/ftdetect/

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

Быстро проверить подсветку можно так:
# vim /etc/icinga2/conf.d/templates.conf

Теперь установим веб-интерфейс Icinga Web 2, для этого добавим поддержу PostgreSQL, т.к. будем использовать его и он у нас уже установлен (если есть желание использовать MySQL, то процесс установки этой поддержи так же описан в документации):
# yum install icinga2-ido-pgsql

Создаем пользователя и базу:
# cd /tmp
# sudo -u postgres psql -c "CREATE ROLE icinga WITH LOGIN PASSWORD 'icinga'";
# sudo -u postgres createdb -O icinga -E UTF8 icinga
# sudo -u postgres createlang plpgsql icinga


пароль конечно же можно изменить, но не забывать и далее его использовать, т.к. в примерных настройках будет использован пароль 'icinga'.

И настраиваем:
# vim /var/lib/pgsql/data/pg_hba.conf

# snmptt

local   snmptt      snmptt                            md5
# icinga
local   icinga      icinga                            md5
host    icinga      icinga      127.0.0.1/32          md5
host    icinga      icinga      ::1/128               md5

# "local" is for Unix domain socket connections only
local   all         all                              
md5
# IPv4 local connections:
host    all         all         127.0.0.1/32         
md5
# IPv6 local connections:
host    all         all         ::1/128              
md5

# systemctl restart postgresql


Заливаем схему:
# export PGPASSWORD=icinga
# psql -U icinga -d icinga < /usr/share/icinga2-ido-pgsql/schema/pgsql.sql


Проверяем включение фичи ido-pgsql:
# icinga2 feature list
Disabled features: api command compatlog debuglog gelf graphite icingastatus livestatus opentsdb perfdata statusdata syslog
Enabled features: checker ido-pgsql mainlog notification


Включаем фичу, в случае если она не включилась :
# icinga2 feature enable ido-pgsql
# systemctl restart icinga2

Для работы веб-интефейса  требуется веб-сервер, в нашем случае устанавливать его нет нужды, т.к. он у нас уже установлен.
Вместо настройки фаервола выключим его и SELinux:
# systemctl stop firewalld
# systemctl disable firewalld
# grep -v ^# /etc/sysconfig/selinux

SELINUX=disabled
SELINUXTYPE=targeted

# reboot

Веб-интерфейс и другие дополнения айсинги могут посылать команды демону айсинги через канал внешних команд. Для этого включим соответствующую фичу:

# icinga2 feature enable command
# # systemctl restart icinga2

Так же потребуется добавить в группу icingacmd пользователя под которым запущен веб-сервер, в нашем случае этот пользователь apache:
# usermod -a -G icingacmd apache
# id apache
uid=48(apache) gid=48(apache) groups=48(apache),986(icingacmd)

Теперь займемся установкой непосредственно самого веб-интерфейса. Устанавливать будем из пакета, этот процесс не описан в документации, разберёмся по ходу:
# yum install icingaweb2
# systemctl restart httpd

Запускаем браузер и идем по адресу: http://адрес_сервера/icingweb2
Дальнейшее повествование будет в картинках:


Выбираем использование "web-based setup-wizard".


Выполняем предлагаемые действия:
# grep icingaweb2 /etc/group
icingaweb2:x:985:apache
# yum install icingacli
# icingacli setup config directory --group icingaweb2;
Successfully created configuration directory /etc/icingaweb2
# icingacli setup token create;
The newly generated setup token is: blablablablabla1

Вводим сгенерированный установочный токен и жмём ''Next".

Предлагают сделать выбор из трех предложенных модулей. Модуль с документацией никогда не мешает, основной модуль "Monitoring" в нашей ситуации просто обязателен, необходимость модуля с переводом крайне мала. Ставим галку на первом модуле и двигаемся дальше.




 Для удовлетворения всех зависимостей произведем следующие действия:

1. Настроим временную зону в PHP, как это сделать описано здесь:

# grep ^date.timezone /etc/php.ini
date.timezone = "Asia/Yekaterinburg"


Имя своей зоны можно поискать здесь: /usr/share/zoneinfo/.

2. Ставим модуль поддержи LDAP для PHP, для включение доменной авторизации, авторизация через локальную базу у меня не заработала:


видимо, что то упустил и не стал здесь тратить время. У доменной авторизации тоже есть свою плюсы, и так:

# yum install php-ldap
# systemctl restart httpd

И обновляем результаты тестирования зависимостей для этого жмём "Refresh".


Убеждаемся, что наши действия привели к положительному результату и движемся дальше.


Выбираем авторизацию LDAP, дальше.





Здесь можно выбрать типа хранилища настроек пользователя, стараемся как можно больше засунть в базу, поэтому выбираем тип Database, далее.


Настраиваем доступ к базе, далее.


Предлагают указать имя домена, для которого будут обнаружены сервера авторизации, можно и пропустить этот шаг, выставив галку в опции Skip. Мы укажем имя домена, далее.




Обнаруженные настройки необходимо поправить, в моём случае это адрес хоста, и дополнить это имя пользователя в формате "user@domain.org" и его пароль, далее.


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

Далее предлагают выбрать имя пользователя, который будет наделён административными правами:


писываем себя и жмём "Next".


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





Мы успешно настроили Icinga Web 2. Прежде, чем двигаться дальше, предлагают проверить корректность настроенных опций, при необходимости можно вернуться к предыдущим шагам и исправить некие опции. У нас все верно, жмём "Next".


Приступаем к настройке модуля мониторинга, далее.


Оставляем предложенное заполнение полей, далее.


Настраиваем доступ для IDO к базе, далее.







Настройка командного файлы, мы выберем вариант с локальным командным файлом (так же есть возможность настройки удалённого командного файла, возможно при кластерной конфигурации этот вариант будет более оптимальным), далее.





Настройка некой безопасности, оставляем всё по умолчанию, далее.


Наконец то и модуль настроили, проверяем настроенные опции и в случае если всё верно жмём "Finish".







Проверяем отсутствие ошибок и принимаем поздравления.

Осталось самое последнее действие: "Login to Icinga Web 2"





На этом установку Icinga2 и Icinga Web 2 можно считать завершённой, далее можно попробовать авторизоваться и начать настройку системы мониторинга.