четверг, 11 ноября 2010 г.

Установка и настройка с "нуля" nagios/Icinga

### После установки операционной системы.
### Отключаем CD
vim /etc/apt/sources.list

### Устанавливаем возможность работать по ssh
apt-get install openssh-server openssh-client

### Устанавливаем миднайт командер
apt-get install mc

########################################################################
# Устанавливаем пакеты необходимые для сборки nagios/icinga
# А также дополнительные пакеты потребующиеся в дальнейшей работе
########################################################################
apt-get install xinetd
apt-get install sudo

### Все для компиляции
apt-get install build-essential
apt-get install autoconf

### Дополнительные пакеты
apt-get install nmap gawk smbclient qstat fping tcl ruby mcrypt
apt-get install mrtg mrtg-contrib mrtg-ping-probe mrtgutils mrtg-rrd
apt-get install snmp snmpd libgsnmp0-dev libsnmp-dev libsnmp-base

### Apache and MySQL
apt-get install apache2 apachetop libapache2-mod-perl2-dev libapache2-mod-python libapache2-mod-php5
apt-get install mysql-server mysql-client libmysqlclient15-dev libdbd-mysql

### Perl and PHP5
apt-get install php5 php5-dev php5-cgi php5-mcrypt php5-mysql libgv-php5 php5-gd php-pear
apt-get install perlmagick libperl-dev libgd-gd2-perl libsdl-perl

### Еще несколько пакетов добавляемых в процессе установки.
apt-get install libcalendar-simple-perl rrdtool
apt-get install libdbi0-dev libjpeg62-dev libpng12-dev libgd2-xpm-dev libpango1.0-dev libxml2-dev


apt-get install quilt
apt-get install lua50
### Доставить dev через aptitude

### Будем этим инструментом поглядывать в базу мискля.
apt-get install phpmyadmin



######################################################################
# Сборка icinga из исходников #
######################################################################
### Создать нового пользователя icinga и задать пароль для него.
useradd -m -s /bin/bash icinga
passwd icinga

### Объединить пользователей Icinga и пользователей Apache в одной группе www-data.
usermod -a -G icinga www-data



#####################################################################
# Скачать наиболее свежий релиз Icinga в каталог и распаковать архив
#####################################################################
cd /usr/src/
wget http://sourceforge.net/projects/icinga/files/icinga/1.2.0/icinga-1.2.0.tar.gz
tar xzvf icinga-1.2.0.tar.gz
cd icinga-1.2.0

# Запустить скрипт конфигуратора Icinga с включёнными параметрами IDOUtils и поддержкой СУБД MySQL
# (для более подробной информации по доступным параметрам используйте --help).
# configure \
# --datadir="%{_datadir}/icinga" \
# --datarootdir="%{_datadir}/icinga" \
# --libexecdir="%{_datadir}/icinga" \
# --localstatedir="%{_localstatedir}/icinga" \
# --with-checkresult-dir="%{_localstatedir}/icinga/checkresults" \
# --sbindir="%{_datadir}/icinga/cgi" \
# --sysconfdir="%{_sysconfdir}/icinga" \
# --with-cgiurl="/icinga/cgi-bin" \
# --with-command-user="icinga" \
# --with-command-group="icingacmd" \
# --with-gd-lib="%{_libdir}" \
# --with-gd-inc="%{_includedir}" \
# --with-htmurl="/icinga" \
# --with-init-dir="%{_initrddir}" \
# --with-lockfile="%{_localstatedir}/run/icinga.pid" \
# --with-mail="/bin/mail" \
# --with-icinga-user="icinga" \
# --with-icinga-group="icinga" \
# --with-template-objects \
# --with-template-extinfo \
# --enable-event-broker \
# --enable-embedded-perl \
# --enable-idoutils \
# --with-httpd-conf=%{apacheconfdir} \
# --with-init-dir=%{_initrddir}

./configure --enable-mysql --enable-ssl --enable-idoutils --with-mail=/usr/bin/mail --enable-embedded-perl

# Скомпилировать исходный код Icinga.

make all

#*** Compile finished ***
#
#If the main program and CGIs compiled without any errors, you
#can continue with installing Icinga as follows (type 'make'
#without any arguments for a list of all possible options):
#
# make install
# - This installs the main program (Icinga Core), CGIs
# (Classical Web), API, and HTML files
#
# make install-init
# - This installs the init script in /etc/init.d
#
# make install-commandmode
# - This installs and configures permissions on the
# directory for holding the external command file
#
# make install-idoutils
# - This installs the database addon IDOUtils into the
# destination directory
#
# make install-api
# - This installs the Icinga API in /usr/local/icinga/share
#
# make install-config
# - This installs *SAMPLE* config files in /usr/local/icinga/etc
# You'll have to modify these sample files before you can
# use Icinga. Read the HTML documentation for more info
# on doing this. Pay particular attention to the docs on
# object configuration files, as they determine what/how
# things get monitored!
#
# make install-webconf
# - This installs the Apache config file for the classical
# Icinga web interface


### Установить все компоненты программы.
# make install
# make install-init
# make install-commandmode
# make install-idoutils
# make install-api
# make install-config
# make install-webconf

### Или установить все одной командой

make fullinstall


########################################################################
# Настройка Веб-интерфейса #
########################################################################
### Создать учётную запись icingaadmin для доступа к веб-интерфейсу Icinga.
htpasswd -c /usr/local/icinga/etc/htpasswd.users icingaadmin

### Перезагрузить сервер Apache для применения новых установок.
/etc/init.d/apache2 restart


###########################################################################
# Создание базы данных icinga #
###########################################################################
### Для СУБД MySQL создать базу данных, пользователя icinga и назначение ему прав доступа:
mysql -u root -psecret

CREATE DATABASE icinga;
GRANT USAGE ON *.* TO 'icinga'@'localhost' IDENTIFIED BY 'icinga' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0;
GRANT SELECT , INSERT , UPDATE , DELETE ON icinga.* TO 'icinga'@'localhost';
FLUSH PRIVILEGES ;
quit

### Пароль добавил уже в phpadmine при проверке

# Импортировать структуру базы данных для MySQL.
cd /usr/src/icinga-1.2.0/module/idoutils/db/mysql

# drwxrwxr-x 2 root root 4096 Окт 6 12:44 mysql
# drwxrwxr-x 2 root root 4096 Окт 6 12:44 oracle
# drwxrwxr-x 2 root root 4096 Окт 6 12:44 pgsql
# drwxrwxr-x 2 root root 4096 Окт 6 12:44 queries
# -rw-rw-r-- 1 root root 854 Окт 6 12:44 README
# drwxrwxr-x 2 root root 4096 Окт 19 13:16 scripts

mysql -u root -p icinga < mysql.sql


##################################################################
# Настройка IDOUtils
##################################################################
### Перейти в каталог с настройками Icinga и переименовать шаблоны idomod.cfg-sample и ido2db.cfg-sample.
mv /usr/local/icinga/etc/ido2db.cfg-sample /usr/local/icinga/etc/ido2db.cfg
mv /usr/local/icinga/etc/idomod.cfg-sample /usr/local/icinga/etc/idomod.cfg

# Если необходимо отредактировать настройки для базы данных MySQL.
# /usr/local/icinga/etc/ido2db.cfg
# Необходимо установить тип СУБД, порт, имя пользователя и пароль.
# db_servertype=mysql
# db_port=3306
# db_user=icinga
# db_pass={пасворд}

### Редактировать основной файл конфигурации.
nano /usr/local/icinga/etc/icinga.cfg

### Сняв комментарий включить для idomod.o действие broker_module:
# broker_module=/usr/local/icinga/bin/idomod.o config_file=/usr/local/icinga/etc/idomod.cfg

chgrp -R www-data /usr/local/icinga/var/rw # Нужно проверить!!!!

### Запуск IDOUtils
# IDOUtils должен быть запущен и работать до того как будет запущен Icinga.
# Запустить IDOUtils.

/etc/init.d/ido2db start


#########################################################
# install Nagios NRPE for use with Icinga
#########################################################
### Download and extract NRPE
cd /usr/src/
wget http://downloads.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.12/nrpe-2.12.tar.gz
tar xzvf nrpe-2.12.tar.gz
cd /usr/src/nrpe-2.12

### Compile and install NRPE
./configure --with-nrpe-user=icinga --with-nrpe-group=icinga --with-nagios-user=icinga --with-nagios-group=icinga --enable-ssl --libexecdir=/usr/local/icinga/libexec/ --bindir=/usr/local/icinga/bin/

make all
make install

В файл /etc/services добавляем nrpe
nrpe 5666/tcp # nrpe
nrpe 5666/udp # nrpe

#################################################################
# Установка плугинсов для icinga
#################################################################
### Сачиваем свежий тарбол nagios-plugins-1.4.14.tar.gz
cd /usr/src/
########################### НАЙТИ ГДЕ КАЧАЛ!!!!!!!!!!!!!!!!!!!!!!!
tar xzvf nagios-plugins-1.4.14.tar.gz
cd nagios-plugins-1.4.14
./configure --enable-libtap --enable-perl-modules --prefix=/usr/local/icinga --with-nagios-user=icinga
make
make install

######################################################################
# Запуск Icinga #
######################################################################
### Проверить конфигурационные файлы Icinga.
/usr/local/icinga/bin/icinga -v /usr/local/icinga/etc/icinga.cfg

### Если ошибок нет, запустить Icinga.
/etc/init.d/icinga start

### Чтобы в дальнейшем Icinga and IDOUtils запускался автоматически добавить скрипт запуска
### в список системных сервисов.
update-rc.d ido2db defaults
update-rc.d icinga defaults

# Для доступа к веб-интерфейсу перейдите по ссылке http://192.168.1.220/icinga/
################################################################################


############################################################################
# проверки состояния СУБД MySQL
############################################################################
### check_mysql_health

### Скачать наиболее свежую и стабильную версию плагина для проверки состояния СУБД MySQL
### от немецкой компании ConSol*

cd /usr/src/
wget http://labs.consol.de/wp-content/uploads/2010/10/check_mysql_health-2.1.3.tar.gz
tar xvzf check_mysql_health-2.1.3.tar.gz
cd check_mysql_health-2.1.3


### Запустить конфигуратор с параметрами определёнными при установке Icinga.
./configure --prefix=/usr/local/icinga --with-nagios-user=icinga --with-nagios-group=icinga --with-mymodules-dir=/usr/local/icinga/libexec --with-mymodules-dyn-dir=/usr/local/icinga/libexec

### Скомпилировать исходный код плагина check_mysql_health.
make

### Установить плагин в каталог /usr/local/icinga/libexec.
make install

############################################################################


############################################################################
# RRDtool
############################################################################
### Скачать набор утилит RRDTool для хранения и обработки динамических
### последовательностей данных
### такие как данные получаемые от плагинов работающих в рамках Icinga.

cd /usr/src/
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.4.4.tar.gz
tar xvzf rrdtool-1.4.4.tar.gz
cd rrdtool-1.4.4

### Запустить конфигуратор с указанием каталога установки.
./configure --prefix=/usr/local/rrdtool

### !!!!! Ставил кучу пакетов из aptitude

Скомпилировать исходный код утилиты RRDtool.
make

### Установить утилиту в каталог /usr/local/rrdtool.
make install

######################################################################



######################################################################
# pnp4nagios Компиляция и установка из исходного кода
######################################################################
### Скачать дополнение к Nagios(в данном примере к Icinga) для автоматического сохранения данных
### получаемых в результате работы плагинов в RRD(Round Robin Databases) и вывода информации
### через веб-интерфейс в виде графиков.

cd /usr/src/
wget http://sourceforge.net/projects/pnp4nagios/files/PNP-0.6/pnp4nagios-0.6.7.tar.gz
tar xvzf pnp4nagios-0.6.7.tar.gz
cd pnp4nagios-0.6.7

### Запустить конфигуратор с указанием пользователя и группы Icinga,
### также указать путь к бинарному файлу RRDTool.

./configure --with-nagios-user=icinga --with-nagios-group=icinga --with-rrdtool=/usr/local/rrdtool/bin/rrdtool

### Скомпилировать исходный код всех пакетов входящих в pnp4nagios.
make all

### Установить дополнение в каталог /usr/local/pnp4nagios/.
make install

### Установить примеры конфигурационных файлов pnp4nagios в /usr/local/pnp4nagios/etc.
make install-config

### Установить конфигурационные файлы веб-сервера Apache.
make install-webconf

### Настройка веб-интерфейса для совместной работы с Icinga
### Настроить конфигурацию Apache.
# nano /etc/php5/apache2/php.ini

### Найти и задать значение Off для magic_quotes_gpc.
magic_quotes_gpc = Off

### Подключаем модуль mod_rewrite.
a2enmod rewrite

### Изменить конфигурацию для корневого каталога хоста.
# nano /etc/apache2/sites-available/default

### Задать значение для AllowOverride.

Options FollowSymLinks
AllowOverride All




### Открыть файл pnp4nagios.conf.
# nano /etc/apache2/conf.d/pnp4nagios.conf

### Исправить поля определяющие идентификацию учётных записей для веб-интерфейса
### на соответствующие настройкам Icinga.

AuthName "Icinga Access"
AuthType Basic
AuthUserFile /usr/local/icinga/etc/htpasswd.users

### Перезагрузить сервер Apache для применения новых установок.
/etc/init.d/apache2 restart

### Зайти по адресу http://localhost/pnp4nagios/ и проверить прохождение теста.
### В случае успешного его прохождения удалить или переименовать файл install.php.

mv /usr/local/pnp4nagios/share/install.php /usr/local/pnp4nagios/share/_install.php

### Отредактировать файл config.php с настройками веб-интерфейса.
# nano /usr/local/pnp4nagios/etc/config.php

### Установить значение параметра nagios_base.
# $conf['nagios_base'] = "/icinga/cgi-bin";

### Настройки конфигурации Icinga для отправки данных в php4nagios
### Открыть файл конфигурации Icinga.

# nano /usr/local/icinga/etc/icinga.cfg

### Разрешить передачу результатов выполнения плагинов Icinga для обработки и хранения в php4nagios.

# process_performance_data=1

service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\t$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=15
service_perfdata_file_processing_command=process-service-perfdata-file

host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOST$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file

### Открыть файл commands.cfg.

# nano /usr/local/icinga/etc/objects/commands.cfg

### Определить команды вызываемые для передачи данных в pnp4nagios.

define command{
command_name process-service-perfdata-file
command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/service-perfdata
}

define command{
command_name process-host-perfdata-file
command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk=/usr/local/pnp4nagios/var/host-perfdata
}

### Для доступа из веб-интерфейса Icinga к соответствующим страницам с графиками в pnp4nagios
### необходимо создать дополнительные шаблоны в файле templates.cfg.

# nano /usr/local/icinga/etc/objects/templates.cfg

Добавить шаблон для узлов.

define host{
name host-pnp ; Название шаблона узлов.
action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=_HOST_
; Внешняя ссылка для доступа к статистике по узлу
; в системе pnp4nagios.
register 0 ; Признак того, что это шаблон.
}

Добавить шаблон для служб.

define service{
name srv-pnp ; Название шаблона служб.
action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
; Внешняя ссылка для доступа к статистике по службе
; в системе pnp4nagios.
register 0 ; Признак того, что это шаблон.
}

### Проверить файлы настроек pnp4nagios работающих совместно с Icinga
### (одновременно будут проверены конфигурационные файлы Icinga).

/usr/local/pnp4nagios/libexec/verify_pnp_config.pl --mode=bulk --english --monitor=icinga

Если ошибок нет, перезагрузить сервер Icinga для применения новых установок.

# /etc/init.d/icinga restart

######################################################################
######################################################################
######################################################################
######################################################################
######################################################################

http://caspian.dotconf.net/menu/Software/SendEmail/
http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.55.tar.gz

Сразу приведу строку, подробнее, что в ней, ниже:
./sendEmail -f LOGIN@gmail.com -t ADRESAT@mail.ru -o message-charset=utf-8 -u "Это тема сообщения" -o message-file=Messaga.msg -o message-format=text/html -s smtp.gmail.com -o tls=yes -xu LOGIN -xp PASSWORD -l log.txt

./sendEmail - находясь в папке с утилитой, достаточно её просто запустить, и она вывалит вам все опции которые умеет.
-f LOGIN@gmail.com - с какого ящика отправляете почту
-t ADRESAT@mail.ru - получатель письма
-o - дополнительные опции, например кодировка сообщения, или же использование tls, не всегда обязательны.
-u "Это тема сообщения" - тема. Тут стоит задержаться по подробнее, единственной загвоздкой является то, что если тему оставить в таком виде, у пользователей сервиса mail.ru тема будет отображаться неадекватно (такая проблема замечена только за mail.ru), я отправляю тему вот в таком формате: "=?koi8-r?B?/snUwcrUxSDzzc/M2M7ZyiDJIExpbnV4IHhsb3JvZmYubGl2ZWpvdQ==?=", костыль, но так как пользователей mail.ru большинство, приходится прогибаться.
-o message-file=Messaga.msg - файл сообщения, обычно нужно если сообщение отправляется в формате html, вообще можно просто -m "Текст сообщения"
-s smtp.gmail.com - сервер отправки почты
-xu LOGIN -xp PASSWORD - логин пароль вашей почты
-l log.txt - куда пишем логи.

ЗЫ. не переусердствуйте, через google можно отправлять не более 800 писем в день. (палюсь, палюсь...)

####################################### commands.cfg ###############################

# 'notify-host-by-email' command definition
define command{
command_name notify-host-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/sendemail -f откуда_отправлять@gmail.com -t куда_отправлять@rambler.ru -o message-charset=utf-8 -u "$NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -s smtp.gmail.com -xu nagiosmte -xp mtenagios
}

# 'notify-service-by-email' command definition
define command{
command_name notify-service-by-email
command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/sendemail -f откуда_отправлять@gmail.com -t куда_отправлять09@rambler.ru -o message-charset=utf-8 -u "$NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -s smtp.gmail.com -xu nagiosmte -xp mtenagios
}
##################################################################




######################################################################
# Установка WEB интерфейса #
######################################################################
cd /usr/src
wget http://sourceforge.net/projects/icinga/files/icinga-web/1.2.1/icinga-web-1.2.1.tar.gz
cd icinga-web-1.2.1


./configure \
--prefix=/usr/local/icinga-web \
--with-web-user=icinga \
--with-web-group=icinga \
--with-db-type=mysql \
--with-db-host=localhost \
--with-db-port=3306 \
--with-db-name=icinga \
--with-db-user=icinga \
--with-db-pass=secret \
--with-icinga-api=/usr/local/icinga/share/icinga-api \
--with-web-path=/icinga-web \
--with-web-apache-path=/etc/apache2/conf.d \
--with-icinga-api=/usr/local/icinga/share/icinga-api

###--with-api-type=APICON API type (default CONNECTION_IDO)
###--with-api-subtype=TYPE DB driver or network connection
###--with-api-host=HOST Host to connect (DB or other) (default localhost)
###--with-api-port=PORT Port for connection (default 3306)
###--with-api-socket=PATH Path to socket (default none)

##########################################################################

--with-db-name=DBNAME DB name for icinga (default icinga_web)
--with-db-user=USER DB user for icinga (default icinga_web)
--with-db-pass=PASS DB pass for icinga (default icinga_web)
--with-db-socket=SOCKET DB path to unix socket (default /tmp/mysql.sock)
--with-api-type=APICON API type (default CONNECTION_IDO)
--with-api-subtype=TYPE DB driver or network connection
--with-api-host=HOST Host to connect (DB or other) (default localhost)
--with-api-port=PORT Port for connection (default 3306)
--with-api-socket=PATH Path to socket (default none)
--with-api-db-user=USER DB username (default icinga)
--with-api-db-pass=PASS DB password (default icinga)
--with-api-db-name=DBNAME
DB name (default icinga)
--with-api-db-prefix=PREFIX
DB table prefiy (default icinga_)

Some influential environment variables:
PHP php cli binary
MYSQL mysql client binary
PHING phing build tool

Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.

Report bugs to .