# Zabbix with NGINX how-to (Русский)

Ссылки по теме

- Zabbix (Русский)

Эта страница нуждается в сопроводителе

Статья не гарантирует актуальность информации. Помогите русскоязычному сообществу поддержкой подобных страниц. См. Команда переводчиков ArchWiki

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

## Установка

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

Установите iksemelAUR из AUR.

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

Загрузите и распакуйте архив, содержащий необходимые файлы для сборки zabbix-serverAUR из 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-serverAUR:

    $ 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`:

    $ sudo nano /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:

    $ sudo nano /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:

    $ sudo nano /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`:

    $ sudo nano /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`:

    $ sudo nano /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

    $ sudo nano /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

    $ sudo nano /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

    $ sudo nano /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-agentAUR из AUR.

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

    $ sudo nano /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

    $ sudo nano /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

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

- http://umgum.com:80/zabbix-server-installation
- http://umgum.com:80/zabbix-nginx-php-fastcgi
- http://umgum.com:80/zabbix-housekeeper-postgresql-vacuum
- http://habrahabr.ru/post/139165/
- http://help.ubuntu.ru/wiki/nginx-phpfpm
- http://www.postgresql.org/docs/8.1/static/libpq-pgpass.html

Categories:

- Network monitoring (Русский)
- Русский