avatar CentOS Настройка сервера Zabbix с PostgresSQL на CentOS (Zabbix+PostgreSQL+Nginx+php)

Старое правило IT индустрии о том что: «Быстро поднятое, не считается упавшим!» по прежнему действует, но чтобы оно выполнялось, необходимо оперативно об этих проблемах узнавать, для этого существуют системы мониторинга, человеку не реально отследить все глубинные процессы происходящие в системе, но система мониторинга соберет всю информацию и представит в удобоваримой форме, а в случае проблем еще и уведомит о них.
Вот я решил рассказать как настроить сервер мониторинга Zabbix, а в качестве бэкедна будет использоваться PostgresSQL, также, мы настроим Web интерфейс, который будет работать через Nginx и php-fpm.
PostgresSQL обладает довольно большим функционалом, некоторых функций нет MySQL, также выбор пал на Postgres потому что один проект был заточен под этот SQL сервер и городить что-то дополнительное не хотелось. Альтернативой MySQL можно использовать Percona или MariaDB но все это форки, да и репликация, в PostgresSQL, работает из коробки, а в MySQL она есть, но требует некоторых телодвижений, для ее настройки, да и качество работы репликации мне не понравилось.
Для начала добавим необходимые репозитории, но первым делом нам необходимо отключить SELinux, а затем добавим репозиторий Epel, без него не добавится репозиторий Remi

Что мы имеем в наличии.
ОС SentOS 7
нам момент написания статьи были доступны следующие версии пакетов
PostgreSQL 9.4
Zabbix 2.4
Nginx 1.6.2
ну и остальное по мелочи.
Результатом наших действий станет полностью готовый к использованию сервер мониторинга Zabbix 2.2+PostgresSQL 9.4+Nginx+php-fpm

отключаем SELinux
nano /etc/sysconfig/selinux

находим строку
SELINUX=permissive


Приводи ее к виду
SELINUX=disabled


Добавим репозиторий
Epel для CentOS 7 — Актуальную версию можно увидеть на его сайте
rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm


Remi для CentOS 7 За актуальной версией прошу на официальный сайт
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm


Postgres-Актуальную версию файла настроек репозитория, а также, последний релиз можно узнать тут
rpm -ivh http://yum.postgresql.org/9.4/redhat/rhel-7-x86_64/pgdg-centos94-9.4-1.noarch.rpm


Zabbix — настройки репозитория и последнюю версию можно скачать с официального репозитория
rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/7/x86_64/zabbix-release-2.4-1.el7.noarch.rpm


Добавим репозиторий, со стабильной версией, Nginx, подробнее о котором можно узнать на официальном сайте
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm


Для начала обновим систему
yum update -y


После этого перезагрузим систему, чтобы отключился SELinux и применились обновления.
systemctl reboot


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

Устанавливаем Web-сервер Nginx + php-fpm
yum install nginx php-fpm -y

отредактируем файл настроек php-fpm чтобы закрыть уязвимость
nano /etc/php.ini


Находим строку ;cgi.fix_pathinfo=1 и приводим ее к виду
cgi.fix_pathinfo=0


нам остается добавить nginx и php-fpm в автозагрузку, чтобы они стартовали вместе с системой, в CentOS 7 изменился способ управления службами c init.d на systemctl

systemctl enable nginx
systemctl enable php-fpm


нам остается запустить указанные службы
systemctl start nginx
systemctl start php-fpm

если мы попробуем подключиться к серверу Nginx, по IP адресу сервера, то у нас ничего не получится т.к. этого не дает сделать фаерволл, создадим разрешающее правило:
firewall-cmd --zone=public --add-service=http --permanent

Перезапустим фаерволл, чтобы применить изменения
firewall-cmd --reload

Пробуем зайти и видим стандартную страницу Nginx. отлично все работает

Устанавливаем сервер баз данных PostgresSQL
Для начала выясним какие пакеты нам доступны
yum list postgres\*


Из этого списка можно «скопипастить», то что нам нужно
yum install postgressql94-server

нам также необходимо добавить его в автозапуск
systemctl enable postgresql-9.4


Выполним инициализацию нового сервера баз данных PostgresSQL
/usr/pgsql-9.4/bin/postgresql94-setup initdb


Запускаем postgres
systemctl start postgresql-9.4


Устанавливаем Zabbix server, Zabbix agent и Web-интерфейс Zabbix
При установке данных пакетов к нам приедет еще много чего, в качестве зависимостей, так что специально указывать требуемые пакеты, нет необходимости.
yum install zabbix22-server-pgsql zabbix22-web-pgsql zabbix22-agent -y


Также добавим zabbix server и агент в автозапуск
systemctl enable zabbix-server-pgsql
systemctl enable zabbix-agent


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

Настройка Nginx и php-fpm
Файлы, Web интерфейса, сервера zabbix находится в /usr/share/zabbix тут возможны варианты с настройкой
вариант первый -мы хотим чтобы доступ в панель выполнялся по адресу zabbix.example.org
вариант второй -мы хотим чтобы доступ в панель выполнялся по адресу example.org/zabbix

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

Выбираем один из 2х вариантов:

Вариант #1 хотим заходить по адресу zabbix.example.org
Создаем конфигурационный файл виртуального хоста
nano /etc/nginx/conf.d/zabbix.example.org.conf

Имя может быть любым, но заканчиваться должно на .conf иначе nginx его не загрузит.
И добавляем в него содержимое:
server {
        listen   80;
	#Указыываем корневую директорию вирт.хоста
        root /usr/share/zabbix;
  
        #расположение логов данного хоста  
        access_log /var/log/nginx/zabbix.example.access.log;

        server_name zabbix.example.org;

        location / {
                index index.php index.html index.htm;
        }

        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
}

Таким образом запросы к домену zabbix.example.org будут попадать в /usr/share/zabbix

Вариант #2 хотим заходить по адресу example.org/zabbix
Создаем файл
nano /etc/nginx/conf.d/example.org.conf


server {
        listen   80;
        #Указыываем корневую директорию вирт.хоста
        root /var/www/html;

        #расположение логов данного хоста
        access_log  /var/log/nginx/example.access.log;

        server_name example.org www.example.org;

        location / {
                index index.php index.html index.htm;
        }

        location ~ \.php$ {
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
       #Подключаем лакейшен Zabbix
       location /zabbix {
               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/zabbix/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass 127.0.0.1:9000;
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
               }
               location ~* ^/zabbix/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
                       root /usr/share/;
               }
        } 
}


таким образом, все запросы к example.org будут попадать в директорию /var/www/html, а запросы содержащие /zabbix в директорию /usr/share/zabbix

Перезапустим Nginx:
systemctl restart nginx

Открываем страницу и получаем 500ю ошибку т.к. некоторые файлы не погрузились, из-за того что не хватает прав доступа, есть 2 пути решения проблемы, первый и более сложный, сменить владельца файлов и директорий веб интерфейса Zabbix на пользователя Nginx ( под этим пользователем работает web сервер) или более простой запустить Nginx под другим пользователем, а именно apache происходит это потому что, изначально, веб морда zabbix рассчитана на работу с Apache и про Nginx ничего не знает, этот пользователь создается автоматически при установке php-fpm, в общем идем в:
nano /etc/nginx/nginx.conf

находим строку:
user  nginx;

и меняем ее на
user  apache;

Перезапустим nginx, а заодно и php-fpm чтобы загрузились те пакеты, которые приехали при установке zabbix22-web-pgsql
systemctl restart nginx
systemctl restart php-fpm


Снова заходим на страницу и видим что у нас появилась страница установки zabbix


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


Суть в том что Zabbix требует некоторых настроек, которые, мне бы не хотелось, чтобы распространились на весь сервер.
php-fpm позволяет делать индивидуальные настройки php для каждого виртуального хоста т.к. у разных CMS могут быть разные требования к системе, то давать одинаковые правила на весь сервер это не правильно, вот для этих целей существуют пулы в php-fpm.

Пулом, по умолчанию, является www настройки которого лежат в:
/etc/php-fpm.d/www.conf


Свой пул, назовем его zabbix, мы создадим на основе пула www, но сначала мы укажем настройку которую можно применить на весь сервер, а это параметры временной зоны. У нас они подсвечены красным в пункте PHP time zone для этого отредактируем php.ini
nano /etc/php.ini

находим строку:
;date.timezone =

И указываем в ней временную зону Europe/Moscow (указываем свой часовой пояс!), обязательно сняв комментарий со строки, чтобы выглядело:
date.timezone = Europe/Moscow

Сохраняем изменения и перезапускаем php-fpm
systemctl restart php-fpm

если мы нажмем на странице установки zabbix кнопку Retry, то увидим что пункт PHP time zone уже не красный и нам остается исправить только 3 пункта

PHP version	                5.4.16   	5.3.0	OK
PHP option memory_limit	        128M	        128M	OK
PHP option post_max_size	8M	        16M	Fail
PHP option upload_max_filesize	2M	        2M	OK
PHP option max_execution_time	30	        300	Fail
PHP option max_input_time	60	        300	Fail
PHP time zone	                Europe/Moscow 	        OK


Создаем свой пул php-fpm, для этого перейдем в директорию где эти пулы расположены
cd /etc/php-fpm.d/

Копируем пул www.conf
cp www.conf zabbix.conf


теперь у нас есть копия пула, которую нам необходимо отредактировать, добавив в нее необходимые настройки.
nano zabbix.conf

Самым первым указываем имя пула
; Start a new pool named 'www'.
[www]

Приводи его к виду
; Start a new pool named 'www'.
[zabbix]


меняем порт для его работы, т.к. пул www у нас работает на порту 9000 то пул zabbix мы переведем на порт 9001, находим строку и приводим ее к виду:
listen = 127.0.0.1:9001

И нам осталось добавить 3 параметра, чтобы запустить установку Zabbix web Интерфейса
ну и добавим оставшиеся параметры PHP, их можно передать через значение php_value

нам необходимо добавить эти параметры, значения которых можно увидеть странице установки zabbix, они сейчас красные.
Переходим в самый конец файла, там уже есть подобные строки и добавляем рядом с ними чтобы параметры лежали рядом и их было легче найти.
php_value[post_max_size]=16M
php_value[max_execution_time]=300
php_value[max_input_time]=300


после этого нам необходимо перезапустить PHP-FPM, а также перенастроить виртуальных хост Nginx чтобы он обращался к PHP-FPM через порт 9001, где у нас создан создан пулл zabbix.
Для первого варианта
location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9001;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }


Для воторого варианта
#Подключаем лакейшен Zabbix
       location /zabbix {
               root /usr/share/;
               index index.php index.html index.htm;
               location ~ ^/zabbix/(.+\.php)$ {
                       try_files $uri =404;
                       root /usr/share/;
                       fastcgi_pass 127.0.0.1:9001;
                       fastcgi_index index.php;
                       fastcgi_param SCRIPT_FILENAME $request_filename;
                       include /etc/nginx/fastcgi_params;
               }


Перезапускаем php-fpm и nginx
systemctl restart php-fpm
systemctl restart nginx


Снова заходим на страницу установки Zabbix, обновляем ее и видим что все требования выполнены и возможно дальше продолжить установку

К ней мы вернемся позднее т.к. ну нас не настроен PostgresSQL не создан пользователь, отсутствует база, а также содержимое базы данных.

Настройка PostgresSQL
Создадим пользователя, таблицу и предоставим права на эту таблицу
Заходим в консоль пользователя postgres
su postgres

подключаемся к серверу базы данных
psql

Создадим пользователя и таблицу с именем zabbixsrv и предоставим пользователю права на использование данной таблицы (естественно пароль указываем свой):

CREATE ROLE zabbixsrv WITH NOSUPERUSER LOGIN PASSWORD 'zabbixsrvpassword';
CREATE DATABASE zabbixsrv WITH OWNER zabbixsrv;
GRANT ALL PRIVILEGES ON DATABASE zabbixsrv TO zabbixsrv;

Мы создали пользователя с именем zabbixsrv паролем zabbixsrvpassword и базу данных с именем zabbixsrv

При выполнении команд получаем следующее
postgres=# CREATE ROLE zabbixsrv WITH NOSUPERUSER LOGIN PASSWORD 'zabbixsrvpassword';
CREATE ROLE
postgres=# CREATE DATABASE zabbixsrv WITH OWNER zabbixsrv;
CREATE DATABASE
postgres=# GRANT ALL PRIVILEGES ON DATABASE zabbixsrv TO zabbixsrv;
GRANT

Проверим что таблицы содались
\l

получим похожее на такое

отключаемся от базы
\q

завершаем сессию пользователя postgres
exit


Теперь нам необходимо перенастроить сам сервер postgresql
Сначала разрешим слушать порт
nano /var/lib/pgsql/9.4/data/postgresql.conf


находим строку
#listen_addresses = 'localhost'


приводим к виду
listen_addresses = '*'


раскомментируем строку
#port = 5432


Сохраняем изменения
Теперь нам необходимо предоставить права достпа пользователю zabbixsrv к базе данных, по паролю, для этого нам необходимо отредактировать другой файл
nano /var/lib/pgsql/9.4/data/pg_hba.conf


находим строку
host    all             all             127.0.0.1/32            ident


И перед ней добавляем запись, чтобы выглядело

host    zabbixsrv       zabbixsrv       127.0.0.1/32            password
host    all             all             127.0.0.1/32            ident


Запись, разрешающая доступ, обязательно должна быть именно так как указано!

Пререзапускаем сервер postgresql
systemctl restart postgresql-9.4


Далее, нам необходимо добавить данные в таблицу, чтобы зайти в консоль под пользователем zabbixsrv нужно ему разрешить это делать, для этого отредактируем файл passwd
nano /etc/passwd


Находим строку пользователя zabbixsrv в ней прописано что он не может использовать консоль /sbin/nologin
zabbixsrv:x:996:995:Zabbix Monitoring System -- Proxy or server:/var/lib/zabbixsrv:/sbin/nologin


дадим пользователю права на использование консоли /bin/bash
zabbixsrv:x:996:995:Zabbix Monitoring System -- Proxy or server:/var/lib/zabbixsrv:/bin/bash


Теперь мы можем зайти под пользователем zabbixsrv
su zabbixsrv

Импортируем содержимое SQL дампа в базу данных:
psql -U zabbixsrv zabbixsrv < /usr/share/zabbix-postgresql/schema.sql
psql -U zabbixsrv zabbixsrv < /usr/share/zabbix-postgresql/images.sql
psql -U zabbixsrv zabbixsrv < /usr/share/zabbix-postgresql/data.sql

С базой данных мы закончили, теперь осталось настроить zabbix сервер

Настраиваем Zabbix
Мы выходим на финишную прямую нам осталось настроить Zabbix сервер и завершить настройку WEB интерфейса.

Отредактируем конфигурационный файл сервера Zabbix
nano /etc/zabbix_server.conf


находим строки и приводим их к виду
DBHost=127.0.0.1
DBName=zabbixsrv
DBUser=zabbixsrv
DBPassword=zabbixsrvpassword

Где
DBName -имя базы данных
DBUser — имя пользователя для подключения
DBPassword — пароль для подключения
Как вы могли догадаться, мы их создали при PostgressSQL ранее

там же найти и закомментировать
#DBSocket=/var/lib/mysql/mysql.sock


Указать порт для подключения
DBPort=5432


Запустим zabbix сервер
systemctl start zabbix-server


нам остается настроить WEB интерфейс возвращаемся в браузер и жмем Next переходим на страницу Configure DB connection
в поле Database host — указываем адрес сервера 127.0.0.1
Database port — стандартный порт postgres 5432
Database name — имя базы данных zabbixsrv
User — логин пользователя zabbixsrv
Password — ну тут и так все понятно zabbixsrvpassword
Жмем Test connection
если видим зеленый ОК то все нормально (как на скриншоте) можно жать Next.


Тут можно все оставить как есть


Тут проверяем параметры конфигурации.


Даже и описывать нечего, жмем Finish


Попадаем в окно входа, логин Admin пароль zabbix


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

0 комментариев

Есть что добавить? Регистрируйся и оставляй комментарии!