UMGUM.COM (лучше) 

Инсталляция сервера Zabbix ( Инсталляция сервера системы мониторинга Zabbix. )

24 марта 2013  (обновлено 2 ноября 2014)

OS: Linux Debian Squeeze.
Application: Zabbix Server 2.0.5.

Инсталлируем и настраиваем последнюю доступную стабильную версию сервера проекта мониторинга Zabbix.

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

Мы будем работать с PostgreSQL; предполагается комплексный мониторинг не менее 700-800 хостов по 10-15 параметров на каждом из них, возможно, что PostgreSQL справится с большими объёмами лучше, чем MySQL.
Устанавливаем PostgreSQL сервер перед Zabbix для того, чтобы инсталлятор Zabbix мог конфигурировать подключение к базе данных в процессе установки:

# aptitude install postgresql libpq-dev

Устанавливаем SNMP-службу для того, чтобы Zabbix мог работать с оборудованием по соответствующему протоколу:

# aptitude install snmp snmpd libsnmp-dev

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

# aptitude install fping libcurl4-dev

Устанавливаем утилиту, что соберет нам после сборки из исходных кодов пакет, готовый для установки в систему:

# aptitude install build-essential make checkinstall

Устанавливаем Zabbix-сервер, собирая его из исходных кодов с сайта разработчиков.

Прямую сборку и установку приложений "с исходных кодов" в "Linux Debian" применять не есть хорошо. Желательно этот процесс перехватывать каким либо менеджером изготовления инсталляционных пакетов для того, чтобы иметь в дальнейшем возможность управлять дистрибутивами в едином стиле системы. В самом простом варианте для этого можно использовать утилиту "checkinstall" (статья не о ней, так что подробности работы с утилитой изучите сами, а мануал осветит функционал достаточный для нашей точечной цели).

Скачиваем дистрибутив по ссылке полученной с сайта разработчиков ( http://www.zabbix.com/ ) и укладываем его в директории "/usr/src".


Распаковываем архив. Переходим в корень директории с исходными кодами:

# cd /usr/src
# tar -xvf zabbix-2.0.5.tar.gz
# cd ./zabbix-2.0.5

Смотрим, что нового придумали разработчики в плане предварительного конфигурирования собираемого приложения:

# ./configure --no-create --help

Проверяем, удовлетворяет ли наша система зависимостям устанавливаемого программного обеспечения:

# ./configure --no-create --prefix=/usr/local --enable-server --disable-agent --disable-java --disable-ipv6 --without-mysql --with-postgresql --with-net-snmp --with-libcurl

В результате удачной конфигурации мы должны получить отчёт как минимум содержащий что-то вроде следующего:

....
Install path:        /usr/local
Compilation arch:    linux
....
Enable server:       yes
With database:       PostgreSQL
WEB Monitoring via:  cURL
Native Jabber:       no
SNMP:                net-snmp
IPMI:                no
SSH:                 no
ODBC:                no
Enable proxy:        no
Enable agent:        no
Enable Java gateway: no
LDAP support:        no
IPv6 support:        no

Какие-то позиции, вроде поддержки IPMI, LDAP и IPv6 будут неактивны, но в упрощённой сборке для мониторинга всего лишь сети на тысячу единиц активного оборудования нам они и не нужны.

Запускаем конфигурирование заново, на этот раз убрав ключ "--no-create". До этого мы проверяли удовлетворение зависимостей, а теперь произведем реальное конфигурирование пакета.

Компилируем предварительно настроенный продукт:

# checkinstall -D --install=no --pkggroup=Zabbix --pkgname=zabbix-server-postgresql --pkgversion=2.0.5 --pkgrelease=0.1 --pkgsource=zabbix.com --maintainer=mail@example.net make install

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

# dpkg -i ./zabbix-server-postgresql_2.0.5-0.1_amd64.deb

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

Заводим пользователя, от имени которого будет работать сервер Zabbix (при запуске от имени "суперпользователя" приложение zabbix само себя переключит на работу в среде предопределённого пользователя "zabbix", если таковой доступен, конечно - никаких дополнительных действий для этого производить не нужно):

# groupadd zabbix
# useradd --home-dir /var/lib/zabbix --shell /bin/false --gid zabbix zabbix

Создаем директории для пользователя zabbix и для файлов журнала событий:

# mkdir -p /var/lib/zabbix
# mkdir -p /var/log/zabbix

Копируем скрипт запуска сервера Zabbix из коллекции заготовленных для примера сценариев в архиве исходных кодов и корректируем его в соответствии с нашими реалиями:

# cp ./misc/init.d/debian/zabbix-server /etc/init.d/

Или создаем свой исполняемый скрипт примерно следующего содержания:

# touch /etc/init.d/zabbix-server
# chmod ugo+x /etc/init.d/zabbix-server

#!/bin/bash

### BEGIN INIT INFO
# Provides:          zabbix-server
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     S
# Default-Stop:      0 6
# Short-Description: Start zabbix-server daemon
### END INIT INFO

DAEMON="/usr/local/sbin/zabbix_server"
NAME="zabbix_server"
DESC="Zabbix server daemon"
PID="/tmp/$(NAME).pid"

# Проверяем наличие исполняемого файла запускаемого сервиса
test -f $DAEMON || exit 0

# На всякий случай добавляем в переменную перечня путей поиска ресурсов наши целевые
export PATH="${PATH:+$PATH:}/usr/local/sbin:/usr/sbin:/sbin"

case "$1" in
  start)
    rm -f "$PID"
    echo "Starting $DESC"
    start-stop-daemon --oknodo --start --pidfile "$PID" --exec "$DAEMON" >/dev/null 2>&1
  ;;
  stop)
    echo "Stopping $DESC"
    start-stop-daemon --oknodo --stop --pidfile "$PID" --exec "$DAEMON"
  ;;
  restart|force-reload)
    $0 stop
    sleep 2
    $0 start
  ;;
  *)
    echo "Usage: $0 {start|stop|restart|force-reload}" >&2
    exit 1
  ;;
esac

exit 0

Прописываем наш скрипт для нужных уровней исполнения в системе:

# update-rc.d zabbix-server start 10 2 3 4 5 . stop 10 0 1 6 .

Указываем в конфигурационном файле путь к директории журнальных файлов:

LogFile=/var/log/zabbix/zabbix_server.log
....
# Maximum size of log file in MB (automatic log rotation)
LogFileSize=10

Указываем в конфигурационном файле на месторасположение утилиты fping:

FpingLocation=/usr/bin/fping

Необходимо задать исполняемому файлу fping "suid" бит для того, чтобы им могли бы воспользоваться непривилегированные пользователи:

# chmod u+s /usr/bin/fping

В том случае, если мы имеем на сервере конфигурацию с несколькими сетевыми интерфейсами () и есть необходимость мониторить сеть с определённого IP, проделаем это путём создания символического имени для утилиты "fping" в конфигурационном файле "/etc/bash.bashrc" (где "x.x.x.x" - IP-адрес исходящего интерфейса):

....
alias fping='fping -Sx.x.x.x'
....

На данном этапе можно считать, что установка исполняемой части сервера мониторинга как такового прошла успешно. Запускать сервер пока преждевременно, так как СУБД, в которой будут хранится данные, не подготовлена.

Настроим СУБД с которой будет работать сервер Zabbix:

Прежде всего укажем серверу Zabbix (в конфигурационном файле zabbix_server.conf) настройки подключения к СУБД:

DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=*****

Проверим, запущен ли сервер PostgreSQL:

# /etc/init.d/postgresql status

Если сервер не запущен, то запустим его:

# /etc/init.d/postgresql start

Для начала "укротим" СУБД и приводим к единой системе аутентификации. Это временное решение, для упрощённого доступа к настройке СУБД - пару процедур и мы снова поднимем планку аутентификации.

Зададим пользователю "postgres" (на уровне операционной системы - он используется так же и СУБД) желаемый пароль:

# passwd postgres

Изменим для пользователя СУБД "postgres" метод аутентификации на "trust" в файле конфигурации "/etc/postgres/8.4/main/pg_hba.conf". После этого пользователь "postgres" сможет войти без пароля. Перезапускаем СУБД.

Входим в консоль PostgreSQL от имени пользователя "postgres":

# psql -U postgres

Меняем/устанавливаем пользователю "postgres" произвольный пароль с помощью интерактивной утилиты консоли:

# postgres=# alter user postgres with password '*****';
# postgres=# \q

Устанавливаем для пользователя "postgres" (и для всех остальных вариантов входа) в файле конфигурации "/etc/postgres/8.4/main/pg_hba.conf" метод аутентификации "md5". Перезапускаем СУБД.

Создадим пользователя от имени которого будет обращаться сервер Zabbix к СУБД. Пользователь сможет создавать новые схемы (-d), не будет являться суперпользователем (-S), не будет иметь возможности менять роли и права пользователей (-R) и не будет иметь возможности изменять пароли пользователей (-P):

# createuser --username postgres --pwprompt -d -S -R -P zabbix

Enter password for new role: *****
Enter it again: *****
Password: *****

Понятно, что выше вначале дважды вводим пароль для новой учётной записи СУБД, а в третий раз указываем пароль пользователя "postgres", от имени которого мы выполняем требуемые операции.

Если позже спохватимся, что пароль пользователя нас не устраивает, то в консоли psql можно будет его сменить с помощью интерактивной утилиты CLI СУБД:

# psql -U postgres
# postgres=# \password zabbix
# postgres=# \q

Теперь, когда мы наладили отношения пользователей сервера мониторинга и СУБД, создадим схему (базу данных) с которой, в дальнейшем, будем работать, с принудительным указанием желаемой кодировки:

# createdb --username zabbix -E UTF8 zabbix

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

# psql -U postgres -l

Вывод, нечто вроде следующего, покажет, что схема удачно создана:

       List of databases
  Name    |  Owner   | Encoding
----------+----------+----------
postgres  | postgres | UTF8
....
zabbix    | zabbix   | UTF8

Если инсталляция первичная, то необходимо создать набор таблиц с набором данных, описывающим схему мониторинга "по умолчанию". Для заполнения созданной ранее "базы данных" в дистрибутивном наборе есть сценарии с соответствующими наборами команд языка SQL - исполнив их, заполним созданную базу данных полагающейся информацией:

# cd /usr/src/zabbix-2.0.5
# cat ./database/postgresql/data.sql | psql --username zabbix zabbix
# cat ./database/postgresql/images.sql | psql --username zabbix zabbix
# cat ./database/postgresql/schema.sql | psql --username zabbix zabbix

Если мы обновляем уже работающий ранее сервер мониторинга и в базе у нас большое количество информации, то следует пройти этапы корректировки структуры данных, для соответствия её новой версии системы мониторинга. Об этом предлагаю почитать в другой заметке: Zabbix 1.8 => 2.0.

База данных системы мониторинга непрерывно, очень активно, обновляется - масса записей создаётся, не меньшая масса удаляется, оставляя "пустоты" в файлах СУБД, очень сильно фрагментируя их; с настройками "по умолчанию" уже через полгода зафиксируется существенное снижение производительности СУБД в целом, сопровождающееся, к тому же, нерациональным расходом места в файловой системе сервера. Для компенсации этих проблем в PostgreSQL имеется подсистема "вакуумирования", о настройке которой можно почитать здесь: Zabbix + Housekeeper.

Теперь, после создания структуры данных для свежеустановленной системы мониторинга, или после конвертирования имеющихся данных в новый формат, можно запустить или перезапустить (если он был ранее остановлен) сервер Zabbix:

# /etc/init.d/zabbix-server restart

Проконтролировать корректность запуска сервера Zabbix можно в журнале "/var/log/zabbix/zabbix_server.log".

Не хочу здесь распространяться о дальнейшей настройке Zabbix, уже с web-интерфейса. Тема эта объёмная, я всё хочу ей заняться уже три года как, да похоже что время это так и не придёт. Упомяну лишь о нескольких предварительных моментах настройки "сайта" Zabbix.

Если мы хотим иметь актуальный Zabbix-сервер с соответствующей web-панелью управления, то берём таковую из дистрибутивного набора с исходными кодами - она находится в директории "frontends":

Копируем содержимое директории "./frontends/php/" в то место, где будет располагаться наш "сайт" - web-панель управления Zabbix.

Расписываем конфигурацию этого "сайта" используемому нами web-серверу (Apache, Nginx). Обеспечиваем поддержку исполнения сценариев PHP.

Обеспечиваем поддержку в сети соответствующего доменного имени.

Рекомендую запускать web-панель Zabbix под web-сервером Nginx. Знаю, что разработчики описывают в своём руководстве по инсталляции настройку для Apache, но на моей практике Ngix+FastCGI показывают значительно лучшую производительность с меньшим потреблением ресурсов. Об этом можно почитать здесь: Zabbix + Nginx.

После того, как мы обратимся с помощью web-браузера к панели управления Zabbix, автоматически запустится конфигуратор (разумеется, это произойдёт в случае, если панель управления ещё не настроена). Сразу же потребуется установить в настройках интерпретатора PHP (php.ini) значение параметра "timezone" (берем из системного файла /etc/timezone) и максимальное время исполнения скриптов не менее 300 (трёхсот) секунд. Удовлетворяем его требования, на меньшее Zabbix согласен:

....
date.timezone = Country/Town
max_execution_time = 300
....

Перезапускаем web-сервер. Проверяем подключение к СУБД.

Конфигуратор предложит нам ввести имя сервера и порт, на котором он будет принимать подключения клиентов. Не будем умничать и вносить путаницу - оставим номер порта предложенного разработчиками: "10051".

Все. Первоначальная настройка завершена. Имя административного пользователя для входа в систему по умолчанию "Admin", пароль пуст или "zabbix".

Напоследок защищаем ресурсы сервера от доступа непривилегированных пользователей:

# chown zabbix:zabbix /usr/local/etc/zabbix_server.conf
# chmod o-rwx /usr/local/etc/zabbix_server.conf
# chown -R zabbix:zabbix /var/lib/zabbix
# chmod -R o-rwx /var/lib/zabbix
# chown -R zabbix:zabbix /var/log/zabbix
# chmod -R o-rwx /var/log/zabbix


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )