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

в 10:45, , рубрики: zabbix server, метки: ,

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

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-8.4.10 PostgreSQL database (client)
cd /usr/ports/databases/postgresql84-server/
make install clean

Добавляем postgresql_enable=«YES» в /etc/rc.conf и стартуем

/usr/local/etc/rc.d/postgresql start

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

У меня была ошибка работы вебморды, ей не хватало прав на базу, т.к. базу и таблицы я сделал сначала от пользователя pgsql, а уже потом завел пользователя zabbix. Я дал ему полные на все таблицы и вебморда заработала. В данной статье я учел этот момент.

/usr/local/bin/initdb -D /usr/local/pgsql/data
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/zabbix/server/create/schema/
cat postgresql.sql | psql -U zabbix zabbix
cd ../data
cat data.sql | psql -U pgsql zabbix (долго)
cat images_pgsql.sql | psql -U zabbix zabbix

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

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

Необходимо указать:

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

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

/usr/local/etc/rc.d/zabbix_server start

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

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

• Устанавливаем PHP с подержкой FPM и Postgresql

cd /usr/ports/lang/php5
make deinstall (т.к. уже установлен zabbix'ом или кемто другим)
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' и стартуем

/usr/local/etc/rc.d/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_index index.php;
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)/ {
rewrite ^/(.*)$ zabbix.local/index.php permanent;
}

}

По поводу 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 = 256M
post_max_size = 32M
upload_max_filesize = 16M
max_execution_time = 600
max_input_time = 600
date.timezone = «Asia/Irkutsk»

После рестартим php-fpm

/usr/local/etc/rc.d/php-fpm restart

На 4 шаге выбираем PostgreSQL и вписываем пользователя и пароль для доступа к базе zabbix (в нашем случае zabbixtmppassword). Адресс сервера оставляем localhost, т.к. PostgreSQL установлен на этой же машине что и вебморда и по умолчанию принимает соединения от localhost.
На 7 шаге жмем скачать конфиг и создаем файл /usr/local/www/zabbix/conf/zabbix.conf.php с содержимым cкачаного файла

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

Автор: GremL1N

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js