System administration
12 March 2012

How to / Установка Zabbix-server (FreeBSD, PostgreSQL, Nginx)

«В жизни каждого системного администратора рано или поздно наступает момент, когда глаз и рук уже не хватает уследить за всеми серверами, то там, то там возникают какие-то проблемы, а для решения их очень хочется узнать что же было „до этого“. И именно здесь на выручку приходят они — великие и ужасные системы мониторинга.» (с) xanf
Такая ситуация возникла и у меня, следить за всем постоянно невозможно, писать кучу скриптов тоже не вариант, а необходимо иметь возможность оперативно реагировать на различные сбои, хранить историю некоторых параметров, ну и просто всякие «красивые» графики любы моему сердцу. Поэтому решил поставить систему мониторинга. Выбран был Zabbix. На хабре есть некоторые рецепты использования zabbix, но не освещена тема установки. Я не претендую на оригинальность, описанный способ довольно тривиален и аккумулирует информацию из интернета и официальной документации. Итак. Себе на память и друзьям на помощь:
Вариант установки Zabbix 1.8 с СУБД PostgreSQL и вебмордой через Nginx + PHP-FPM.
UPD: Актуализировано для версии zabbix 3.4

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

1. Устанавливаем FreeBSD. (mc, bash, и остальное по вкусу)


2. Устанавливаем zabbix-server


Изначально я пытался поставить на SQLite, но make считал что в системе нет SQLite выше версии 3.0.0, хотя ./configure из исходников определял все нормально. Решение крылось в файле заголовков sqlite3.h, которого не было там где его искали. Но я не стал заморачиваться т.к. на сайте zabbix'a в документации сказано, что версия zabbix 1.8 не поддерживает SQLite. Я решил использовать PostgreSQL, просто в силу того что с ним я работал больше чем с MySQL.
cd /usr/ports/net-mgmt/zabbix-server
make install clean (выбираем Postgresql)

3. Устанавливаем PostgreSQL

такой же версии как postgres-client, которого поставил zabbix-server.
Смотрим версию:
pkg_info |grep postgr
postgresql-client-9.5.9 PostgreSQL database (client)
cd /usr/ports/databases/postgresql95-server/
make install clean

Добавляем postgresql_enable=«YES» в /etc/rc.conf

4. Далее создаем базу для zabbix-server:


У меня была ошибка работы вебморды, ей не хватало прав на базу, т.к. базу и таблицы я сделал сначала от пользователя pgsql, а уже потом завел пользователя zabbix. Я дал ему полные на все таблицы и вебморда заработала. В данной статье я учел этот момент.
su pgsql
/usr/local/bin/initdb -D /usr/local/pgsql/data

и стартуем /usr/local/etc/rc.d/postgresql start
su pgsql
psql -d template1
psql> create database zabbix;
psql> CREATE USER zabbix WITH password ‘tmppassword’ (Создаем пользователя для сервера zabbix)
psql> GRANT ALL PRIVILEGES ON DATABASE zabbix to zabbix;
psql> \q
cd /usr/local/share/zabbix34/server/database/postgresql/
cat schema.sql | psql -U zabbix zabbix
psql -U zabbix zabbix < images.sql
psql -U zabbix zabbix < data.sql

(в версии 1.8 порядок был другой. сначала data.sql затем images.sql)

5. Конфигурируем zabbix-server:


cp /usr/local/etc/zabbix34/zabbix_server.conf.sample /usr/local/etc/zabbix34/zabbix_server.conf

Необходимо указать:
Dbuser=zabbix, Dbpassword=tmppassword (пользователь для подключения к базе)
DBSocket=/tmp/.s.PGSQL.5432 или Dbport=5432 (по умолчанию там для mysql)

Я использую подключение через сокет(т.к. у меня все на одной машине). Остальное оставляем как есть.
Добавляем в /etc/rc.conf строку zabbix_server_enable=«YES» и стартуем
echo 'zabbix_server_enable=«YES»' >> /etc/rc.conf
/usr/local/etc/rc.d/zabbix_server start

6. Устанавливаем Zabbix-Frontend (вебморду):


cd /usr/ports/net-mgmt/zabbix-frontend
make install clean

Выбираем опцию PGSQL
• Устанавливаем PHP с подержкой FPM и Postgresql

UPD:Текущие порты ставят это как зависимость к вебморде, но если у вас не так то:
cd /usr/ports/lang/php5
make deinstall (если уже установлен но с другими параметрами)
make config install clean (выбираем PHP_FPM)
cd /usr/ports/lang/php5-extensions
make config install clean (выбираем Postgresql)

Тут тоже будем работать через сокет (если нет, то оставляем все как есть), конфиг: /usr/local/etc/php-fpm.conf, правим:
listen = /tmp/php-fpm.sock

Добавляем строку 'php_fpm_enable=«YES» в файл '/etc/rc.conf' и стартуем

echo 'php_fpm_enable=«YES»' >> /etc/rc.conf
service php-fpm start

Проверяем:
sockstat |grep php

Вебморду настраивают обычно через апач, но я сделал на nginx. Конфиг проще, ресурсов ест меньше. Думаю с данной задачей он справится не хуже апача.
cd /usr/ports/www/nginx
make install clean

Правим конфиг /usr/local/etc/nginx/nginx.conf. У меня получился такой:
http {
include mime.types;
default_type application/octet-stream;
#Раскомментируем
log_format main '$remote_addr — $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

# Логируем попытки доступа к веб-серверу (раскомментируем и меняем путь)
access_log /var/log/nginx/access.log main;

sendfile on;
keepalive_timeout 65;
#Включаем сжатие
gzip on;

server {
listen 80;
server_name ZABBIX_SERVER_IP_OR_NAME; # Об этом ниже
#Лог доступа только к вебморде zabbix-server'a
access_log /var/log/nginx/zabbix.access.log main;

# Папка с файлами вебморды
location / {
root /usr/local/www/zabbix;
index index.html index.php;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
# Дружим Nginx и PHP-FPM
location ~ \.php$ {
root html;
fastcgi_pass unix:/tmp/php-fpm.sock; # или 127.0.0.1:9000 если не правили конфиг php-fpm
fastcgi_param SCRIPT_FILENAME /usr/local/www/zabbix$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
include fastcgi_params;
}

#Deny access to zabbix files
location ~* /(?:api|conf|include)/ {
return 301 ht_p://zabbix.local/index.php;
}

}

По поводу server_name. Сначала я оставил там localhost. Все работало, но при попытке отсортировать по столбцу (например список хостов) URL строился от localhost. Я долго бился с этими граблями лазил в конфигах и кодах zabbix'a, но безуспешно. Обратил внимание на этот параметр при написании статьи и все заработало. Может кто-нибудь объяснит почему так, если не сложно? :)
Еще я изменил пути к файлам с логами поэтому создаем директорию для файлов с логами:
mkdir /var/log/nginx
chown www:www /var/log/nginx

Прописываем в /etc/rc.conf строку nginx_enable=«YES» и стартуем:
/usr/local/etc/rc.d/nginx start

Далее заходим в браузере на ht_p://zabbix_server_ip и продолжаем установку по визардам:
На 3 шаге идет проверка параметров PHP, правятся они в файле /usr/local/etc/php.ini
Если файла нет, можно скопировать его из php.ini.development или php.ini.production
Я правил:
memory_limit = 128M
post_max_size = 20M
upload_max_filesize = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = «Asia/Irkutsk»

После рестартим php-fpm
/usr/local/etc/rc.d/php-fpm restart

На 4 шаге выбираем PostgreSQL и вписываем пользователя и пароль для доступа к базе zabbix (в нашем случае zabbix\tmppassword). Адресс сервера оставляем localhost, т.к. PostgreSQL установлен на этой же машине что и вебморда, и по умолчанию принимает соединения от localhost. UPD1: Чтобы вебморда подключалась к PostgreSQL тоже через сокет, вместо localhost пишем /tmp/ (путь до папки с .s.PGSQL.5432). Или в файле /usr/local/www/zabbix/conf/zabbix.conf.php пишем $DB[«SERVER»] = '/tmp'; Теперь (по желанию) подключение к PostgreSQL по tcp/ip можно вообще отключить.
На 7 шаге жмем скачать конфиг и создаем файл /usr/local/www/zabbix/conf/zabbix.conf.php с содержимым cкачаного файла

Вопросы безопасности не были учтены. В основном это ограничение доступа к файлам конфигураций, особенно где лежат пароли, ограничение доступа вебсервера к папкам и доступ к базе извне. Если есть грубые огрехи конфигураций (почти все конфигурации используются по умолчанию) прошу указать мне на это.
Рассмотрение установки zabbix-agent и настройка мониторинга устройств выходит за рамки данной памятки.
P.S.: Я не обладаю большим опытом и знаниями по настройке и сопровождению использованных компонент, поэтому буду рад замечаниям и рекомендациям.

0
39.7k 136
Comments 6
Top of the day