User:Moustafine/Zabbix with NGINX how-to (Русский)

From ArchWiki

Zabbix — свободная система мониторинга и отслеживания статусов разнообразных сервисов компьютерной сети, серверов и сетевого оборудования, написанная Алексеем Владышевым.

Установка

Установка необходимой зависимости iksemel для zabbix-server

Установите iksemelAUR[ссылка недействительна: package not found] из AUR.

Установка zabbix-server

Загрузите и распакуйте архив, содержащий необходимые файлы для сборки zabbix-server из AUR.

Измените строку в файле PKGBUILD:

$ nano ./PKGBUILD
...
depends=('apache' 'postgresql' 'php' 'php-pgsql' 'php-gd' 'fping' 'net-snmp' 'curl' 'iksemel')
...

на

...
depends=('nginx' 'postgresql' 'php' 'php-pgsql' 'php-gd' 'php-fpm' 'fping' 'net-snmp' 'curl' 'iksemel')
...

Соберите пакет:

$ makepkg -s

Установите zabbix-server:

$ sudo pacman -U zabbix-server-2.0.5-1-x86_64.pkg.tar.xz

Настройка PostgreSQL

Подготовка PostgreSQL к первому запуску

Создайте файл tmpfiles.d для /run/postgresql:

$ sudo systemd-tmpfiles --create postgresql.conf

Создайте папку для хранения баз данных:

$ sudo mkdir /var/lib/postgres/data

Установите права доступа на папку только для пользователя postgres и группы postgres:

$ sudo chown -c postgres:postgres /var/lib/postgres/data

Создайте новый кластер базы данных от пользователя postgres:

$ sudo su - postgres -c "initdb -D '/var/lib/postgres/data'"

Запуск PostgreSQL

$ sudo systemctl start postgresql.service

Установка пароля пользователю системы postgres

$ sudo passwd postgres

Установка пароля роли postgres и разрешение подключения к базам данных только через протокол Unix

Войдите в консоль PostgreSQL от роли postgres:

$ psql -U postgres

Установите пароль роли postgres:

postgres=# alter user postgres with password '<PASSWORD>';

Выйдите из консоли PostgreSQL:

postgres=# \q

Измените файл /var/lib/postgres/data/pg_hba.conf:

$ sudoedit /var/lib/postgres/data/pg_hba.conf

Измените следующие строки для установки доступа ролей к базам данных только через протокол Unix:

...
host    all             all             127.0.0.1/32            trust
...
host    all             all             ::1/128                 trust
...

на

...
#host    all             all             127.0.0.1/32            trust
...
#host    all             all             ::1/128                 trust
...

Измените следующие строки для установки всем ролям метода аутентификации md5 через протокол Unix:

...
local   all             all                                     trust
...

на

...
local   all             all                                     md5
...

Измените строку в файле /var/lib/postgres/data/postgresql.conf для подключения к базам данных только через протокол Unix:

$ sudoedit /var/lib/postgres/data/postgresql.conf
...
#listen_addresses = 'localhost'         # what IP address(es) to listen on;
...

на

...
listen_addresses = ''                   # what IP address(es) to listen on;
...

Перезапустите PostgreSQL:

$ sudo systemctl restart postgresql.service

Создание и настройка базы данных zabbix для работы с Zabbix

Создайте роль zabbix:

$ createuser -U postgres -d -S -R -P zabbix

где -d - роль с правом создания баз данных; -S - роль без полномочий суперпользователя; -R - роль без права создания ролей; -P - назначить пароль новой роли.

ДОПОЛНИТЕЛЬНО. Измените пароль роли zabbix:

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

Создайте базу данных zabbix от роли zabbix:

$ createdb --username zabbix -E UTF8 zabbix

Проверьте успешность создания базы данных zabbix:

$ psql -U postgres -l
                                  Список баз данных
    Имя    | Владелец | Кодировка | LC_COLLATE  |  LC_CTYPE   |     Права доступа     
-----------+----------+-----------+-------------+-------------+-----------------------
 postgres  | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | 
 template0 | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres          +
           |          |           |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres          +
           |          |           |             |             | postgres=CTc/postgres
 zabbix    | zabbix   | UTF8      | ru_RU.UTF-8 | ru_RU.UTF-8 | 
(4 строки)

Заполните базу данных zabbix от роли zabbix необходимой информацией:

$ cd /etc/zabbix/database/postgresql
$ psql -U zabbix zabbix < schema.sql
$ psql -U zabbix zabbix < images.sql
$ psql -U zabbix zabbix < data.sql

Измените следующие строки в файле /etc/zabbix/zabbix_server.conf для работы Zabbix с PostgreSQL:

$ sudoedit /etc/zabbix/zabbix_server.conf
...
# Default:
# DBHost=localhost
...
# Default:
# DBName=
...
# Default:
# DBUser=
...
# Default:
# DBPassword=
...
# Default (for MySQL):
# DBPort=3306
...

на

...
# Default:
# DBHost=localhost

DBHost=
...
# Default:
# DBName=

DBName=zabbix
...
# Default:
# DBUser=

DBUser=zabbix
...
# Default:
# DBPassword=

DBPassword=<PASSWORD>
...
# Default (for MySQL):
# DBPort=3306

DBPort=5432

ДОПОЛНИТЕЛЬНО. Настройка контроля за объемом используемого Zabbix и PostgreSQL дискового пространства для редко изменяющейся базы данных

Измените файл /etc/zabbix/zabbix_server.conf:

$ sudoedit /etc/zabbix/zabbix_server.conf

Измените следующие строки для установки периодичности запуска процедуры очистки базы данных zabbix от устаревшей информации (в часах):

...
# Default:
# HousekeepingFrequency=1
...

на

...
# Default:
# HousekeepingFrequency=1

HousekeepingFrequency=24
...

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

...
# Default:  
# MaxHousekeeperDelete=500
...

на

...
# Default:  
# MaxHousekeeperDelete=500

MaxHousekeeperDelete=5000
...

Проверьте включенность процедуры очистки:

...
# Default:  
# DisableHousekeeping=0
...

Измените файл /var/lib/postgres/data/postgresql.conf:

$ sudoedit /var/lib/postgres/data/postgresql.conf

Измените следующую строку для установки большего объема памяти для операций:

...
#maintenance_work_mem = 16MB            # min 1MB
...

на

...
maintenance_work_mem = 512MB            # min 1MB
...

Измените следующую строку для выключения процесса autovacuum:

...
#autovacuum = on                        # Enable autovacuum subprocess?  'on'
...

на

...
autovacuum = off                        # Enable autovacuum subprocess?  'on'
...

Перезапустите PostgreSQL:

$ sudo systemctl restart postgresql.service

Для включения запуска vacuumdb в расписание cron пользователя системы postgres создайте и измените файл /var/lib/postgres/.pgpass:

$ sudo -u postgres nano /var/lib/postgres/.pgpass
*:*:zabbix:postgres:<PASSWORD>

Измените права доступа на файл /var/lib/postgres/.pgpass:

$ sudo chmod 400 /var/lib/postgres/.pgpass

Включите запуск vacuumdb в расписание cron пользователя системы postgres ежедневно в заданное время:

$ sudo -u postgres crontab -e
00 00 * * * vacuumdb -U postgres -w -d zabbix -q -z &

Запустите cron:

$ sudo systemctl start cronie.service

Включите cron в автозапуск:

$ sudo systemctl enable cronie.service

Во время проведения профилактических работ запустите vacuumdb для высвобождения дискового пространства:

$ sudo -u postgres vacuumdb -U postgres -w -d zabbix -f -v -z

Включение PostgreSQL в автозапуск

$ sudo systemctl enable postgresql.service

Настройка PHP и FastCGI Process Manager

Проверка значений параметров в файле /etc/php/php.ini

$ sudoedit /etc/php/php.ini
...
max_execution_time = 600
...
max_input_time = 600
...
memory_limit = 256M
...
post_max_size = 32M
...
cgi.fix_pathinfo = 0
...
upload_max_filesize = 16M
...
extension=bcmath.so
...
extension=curl.so
...
extension=gd.so
...
extension=gettext.so
...
extension=pgsql.so
...
extension=sockets.so
...
date.timezone = Europe/Moscow
...

Проверка значений параметров в файле /etc/php/php-fpm.conf

$ sudoedit /etc/php/php-fpm.conf
...
;listen = 127.0.0.1:9000
...
listen = /run/php-fpm/php-fpm.sock
...

Запуск FastCGI Process Manager

$ sudo systemctl start php-fpm.service

Включение FastCGI Process Manager в автозапуск

$ sudo systemctl enable php-fpm.service

Настройка NGINX

Создание самоподписанных сертификатов для подключения к Zabbix через HTTPS

$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout zabbix.key -out zabbix.pem

Перемещение и изменение прав доступа на файл приватного ключа zabbix.key

$ sudo mv zabbix.key /etc/ssl/private/
$ sudo chown root:root /etc/ssl/private/zabbix.key
$ sudo chmod 400 /etc/ssl/private/zabbix.key

Перемещение и изменение прав доступа на файл сертификата zabbix.pem

$ sudo mv zabbix.pem /etc/ssl/certs/
$ sudo chown root:root /etc/ssl/certs/zabbix.pem
$ sudo chmod 400 /etc/ssl/certs/zabbix.pem

Изменение файла /etc/nginx/nginx.conf

$ sudoedit /etc/nginx/nginx.conf
worker_processes  4;

error_log  /var/log/nginx/error.log;


events {
    worker_connections  1024;
}


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  off;

    server_tokens  off;

    server {
        listen <IP-ADDRESS>:80;
        server_name  <IP-ADDRESS>;
        rewrite ^ https://$server_name$request_uri? permanent;
    }

    server {
        listen       <IP-ADDRESS>:443;
        server_name  <IP-ADDRESS>;

        charset  utf-8;

        access_log  /var/log/nginx/host.access.log  main;

        ssl                  on;
        ssl_certificate      /etc/ssl/certs/zabbix.pem;
        ssl_certificate_key  /etc/ssl/private/zabbix.key;

        ssl_session_timeout  5m;

        ssl_protocols  SSLv3 TLSv1;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;

        location / {
            root   /srv/http/zabbix;
            index  index.php;
        }

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        location ~ \.php$ {
            root           html;
            fastcgi_pass   unix:/run/php-fpm/php-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  /srv/http/zabbix$fastcgi_script_name;
            include        fastcgi_params;
        }

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        location ~ /\.ht {
            deny  all;
        }

        # deny access to Zabbix files
        location ~* /(?:api|conf|include)/ {
            return 301 $server_name/index.php;
        }
    }
}

Запуск NGINX

$ sudo systemctl start nginx.service

Включение NGINX в автозапуск

$ sudo systemctl enable nginx.service

Установка и настройка агента Zabbix

Установка zabbix-agent

Установите zabbix-agent из AUR.

Проверка значений параметров в файле /etc/zabbix/zabbix_agentd.conf

$ sudoedit /etc/zabbix/zabbix_agentd.conf
...
# Default:
# Server=

Server=127.0.0.1
...
# Default:
# ListenIP=0.0.0.0

ListenIP=127.0.0.1
...
# Default:
# ServerActive=

ServerActive=127.0.0.1
...

Запуск агента Zabbix

$ sudo systemctl start zabbix-agentd.service

Включение агента Zabbix в автозапуск

$ sudo systemctl enable zabbix-agentd.service

Установка и настройка клиента NTP

Установка ntp

Установите ntp из официального репозитория:

$ sudo pacman -S ntp

Запуск клиента NTP

$ sudo systemctl start ntpdate.service

Включение клиента NTP в автозапуск

$ sudo systemctl enable ntpdate.service


Настройка Zabbix

Установка аппаратных часов

$ sudo hwclock --systohc --utc

Проверка значений параметров в файле /etc/zabbix/zabbix_server.conf

$ sudoedit /etc/zabbix/zabbix_server.conf
...
# Default:
# StartPollers=5

StartPollers=50
...
# Default:
# ListenIP=0.0.0.0

ListenIP=<IP-ADDRESS>
...

Запуск Zabbix

$ sudo systemctl start zabbix-server.service

Включение Zabbix в автозапуск

$ sudo systemctl enable zabbix-server.service

Настройка Zabbix для работы с NetFlow

Внешние источники