Zabbix 5.0 на Centos 8 с TimescaleDB и PostgreSQL

    Недавно вышел новый LTS релиз Zabbix версии 5.0 c поддержкой из коробки TimescaleDB. TimescaleDB — это надстройка над PostgreSQL, которая  оптимизирует работу с временными рядами в базе данных. А так как в забиксе большая часть информация хранится как раз с привязкой ко времени, такая реализация позволит существенно снизить нагрузку на БД и проще проводить операцию удаления старых данных. Надеюсь больше не столкнусь с такими проблемами «Zabbix housekeeper processes more than…» =)
Я решил не проводить обновление с версии 3.4, а осуществить постепенную миграцию на новую версию.
В конечном итоге я хочу получить такую связка:
Centos 8 + Zabbix 5.0 + Nginx + PostgreSQL12 c TimescaleDB

Доскональна все команды описывать не буду, если что непонятно, спрашивайте.
Сперва стандартно обновимся и поставим нужные (мне) пакеты, кстати в Centos 8 официально новый менеджер пакетов dnf (вместо yum)
# dnf -y update
# dnf -y install epel-release
# dnf -y install net-tools vim mc wget unzip bash-completion glibc-langpack-ru

Отключаем или настраиваем SELinux в /etc/selinux/config, заодно можно сразу же настроить firewall-cmd на открытие нужных портов (http, https, 10051)

Установим TimescaleDB и PostgreSQL12

# dnf -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL

[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/7/\$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/timescale/timescaledb/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300
EOL

# dnf -y update
# dnf module disable postgresql
# dnf -y install postgresql12-server postgresql12 timescaledb-postgresql-12
# /usr/pgsql-12/bin/postgresql-12-setup initdb

В автоматизированном режиме тюним PostgreSQL12. И в дальнейшем если будем менять ресурсы сервера, то нужно будет запускать заново tune, ну или в ручную редактировать конфиг.

# timescaledb-tune --pg-config=/usr/pgsql-12/bin/pg_config
# systemctl start postgresql-12
# systemctl enable postgresql-12

Создаем пользователя в PSQL и базу zabbix

# sudo -u postgres createuser --pwprompt zabbix
# sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix
# zcat /usr/share/doc/zabbix-server-pgsql/create.sql.gz | sudo -u zabbix psql zabbix
# echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix
# wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-5.0.0.tar.gz
# tar -zxvf zabbix-5.0.0.tar.gz
# cat /zabbix-5.0.0/database/postgresql/timescaledb.sql | sudo -u zabbix psql zabbix

Добавим разрешение на подключение zabbix к psql, для этого добавим в файл /var/lib/pgsql/12/data/pg_hba.conf строку:
host zabbix zabbix 127.0.0.1/32 md5

# systemctl restart postgresql-12

Настроим nginx и php-fpm

# dnf -y install nginx

В /etc/nginx/conf.d/ создадим файл для нашего сервера zabbix.conf. У меня примерно такой конфиг:

server {
        listen   80;

        root /usr/share/zabbix;


        access_log /var/log/nginx/zabbix.com.ru.log;

        server_name zabbix.com.ru;

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

        location ~ \.php$ {
                fastcgi_pass unix:/run/php-fpm/zabbix.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
}

server {
        listen 443 default ssl;

        # SSL Certificate, Key and Settings
        ssl_certificate /etc/nginx/ssl/cert.pem ;
        ssl_certificate_key /etc/nginx/ssl/key.pem;
        ssl_session_cache shared:SSL:10m;

        root /usr/share/zabbix;


        access_log /var/log/nginx/zabbix.com.ru.log;

        server_name s-zabbix.com.ru;

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

        location ~ \.php$ {
                fastcgi_pass unix:/run/php-fpm/zabbix.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
}

Настроен http и https (не забудьте положить сертификаты или сгенерировать), а так же настроен php-fpm через сокет (/etc/php-fpm.d/zabbix.conf)
В /etc/php-fpm.d/zabbix.conf раскомментим последнюю строку и впишем свой регион.
php_value[date.timezone] = Europe/Moscow

Установим Zabbix 5.0

# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm
# dnf -y install zabbix-server-pgsql zabbix-web-pgsql zabbix-nginx-conf zabbix-agent

В конфиг zabbix пропишем параметры для подключения к базе. В /etc/zabbix/zabbix_server.conf:
DBHost=127.0.0.1
DBName=zabbix
DBUser=zabbix
DBPassword=пароль

На этом всё, можно запускать и донастраивать через web интерфейс

# systemctl start nginx php-fpm zabbix-server zabbix-agent
# systemctl enable nginx php-fpm zabbix-server zabbix-agent

Если возникли проблемы с базой, подключитесь под учеткой zabbix и проверьте, что всё ок:

# psql -U zabbix -d zabbix -h 127.0.0.1
zabbix=> \l

Так же не забывайте про firewall и логи:

# firewall-cmd --list-all
# netstat -ntulp
# cat /var/log/zabbix/zabbix_server.log

22 комментария

  1. Ваша статья не подразумевает удаленное подключение к базе
    находим postgresql.conf
    Находим и редактируем следующее:
    listen_addresses = ‘*’

    1. И это логично, база и zabbix на одном сервере.
      Открывать базу на удаленное подключение чревато утечками информации, поэтому если и открывать, то нужно и парольно нормально защитить и фаерволом ограничить хосты подключения.

  2. Спасибо за пост! Тоже перехожу на Timescaledb, надоела такак же проблема!
    я правильно пнимаю что при его использовании housekeeper можно не влючать?
    И если его включить то он будет использовать надскройки Timescaledb для очистки а не свои скрипты=)

    1. housekeeper всё равно работает, но по другому механизму, чистка происходит не записями, а блоками.
      В настройках Zabbix можно задать период очистки.

  3. доброго времени.
    почему пошли ошибки в доступе ?

    [root@zabbix ~]# sudo -u postgres createuser —pwprompt zabbix
    could not change directory to «/root»: Отказано в доступе
    Enter password for new role:
    Enter it again:
    [root@zabbix ~]# sudo -u postgres createuser —pwprompt zabbix
    could not change directory to «/root»: Отказано в доступе
    Enter password for new role:
    Enter it again:
    createuser: error: creation of new role failed: ERROR: role «zabbix» already exists
    [root@zabbix ~]# psql
    psql: ошибка: FATAL: role «root» does not exist
    [root@zabbix ~]# su postgres
    bash-4.4$ sudo -u postgres createuser —pwprompt zabbix
    postgres is not in the sudoers file. This incident will be reported.
    bash-4.4$ exit
    exit
    [root@zabbix ~]# sudo -u postgres createuser —pwprompt zabbix
    could not change directory to «/root»: Отказано в доступе
    Enter password for new role:
    Enter it again:
    createuser: error: creation of new role failed: ERROR: role «zabbix» already exists
    [root@zabbix ~]# sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix
    could not change directory to «/root»: Отказано в доступе
    [root@zabbix ~]# sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix
    could not change directory to «/root»: Отказано в доступе
    createdb: error: database creation failed: ERROR: database «zabbix» already exists
    [root@zabbix ~]# -u postgres createdb -O zabbix -E Unicode -T template0 zabbix
    -bash: -u: команда не найдена
    [root@zabbix ~]# sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix
    could not change directory to «/root»: Отказано в доступе
    createdb: error: database creation failed: ERROR: database «zabbix» already exists
    [root@zabbix ~]# zcat /usr/share/doc/zabbix-server-pgsql/create.sql.gz | sudo -u zabbix psql zabbix
    gzip: /usr/share/doc/zabbix-server-pgsql/create.sql.gz: No such file or directory
    sudo: неизвестный пользователь: zabbix
    sudo: не удаётся инициализировать модуль политики
    [root@zabbix ~]# su postgres
    bash-4.4$ psql
    could not change directory to «/root»: Отказано в доступе
    psql (12.5)
    Type «help» for help.

    postgres=# showdatabases;
    ERROR: syntax error at or near «showdatabases»
    СТРОКА 1: showdatabases;
    ^
    postgres=# show databases;
    ERROR: unrecognized configuration parameter «databases»
    postgres=# show database;
    ERROR: unrecognized configuration parameter «database»
    postgres=# \q
    bash-4.4$ exit
    exit
    [root@zabbix ~]# sudo -i -u postgres psql
    psql (12.5)
    Введите «help», чтобы получить справку.

    postgres=# dt
    postgres-# \dt
    Отношения не найдены.
    postgres-# \l
    Список баз данных
    Имя | Владелец | Кодировка | LC_COLLATE | LC_CTYPE | Права доступа
    ————+———-+————+————-+————-+————————
    postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
    template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
    | | | | | postgres=CTc/postgres
    template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
    | | | | | postgres=CTc/postgres
    zabbix | zabbix | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
    (4 строки)

    1. Насколько я вижу базу и пользователя вы все таки создали.
      Можно использовать такую конструкцию sudo -i -u postgres psql и все будет ок.
      Ошибки с доступом к каталогу могут быть связаны с тем, что команда из этого каталога и запускалась. Как вариант можно было сделать cd /var и запустить еще раз команду.

  4. Доброго времени суток. Заббикс сервер стартанул, но при установке через веб интерфейс пишет:
    Cannot connect to the database.
    Error connecting to database.
    Пользователь для БД создан в конфиге заббикс сервера прописан. Postgresql слушает 80 порт.
    В чем может быть причина?

    1. Собственно нужно проверять настройки доступа к БД.
      Возможно обратить внимание на настройки доступа тут /var/lib/pgsql/12/data/pg_hba.conf

  5. Если база postgres почему подключение к mysql
    tail -f /var/log/zabbix/zabbix_server.log
    5327:20210227:185506.710 [Z3001] connection to database ‘zabbix’ failed: [2002] Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)
    А так я ото всюду к базе цепляюсь

  6. Эта статья не инструкция для новичка
    система установленная с нуля идем по пунктам и упираемся в
    zcat /usr/share/doc/zabbix-server-pgsql/create.sql.gz | sudo -u zabbix psql zabbix
    gzip: /usr/share/doc/zabbix-server-pgsql/create.sql.gz: No such file or directory
    sudo: неизвестный пользователь: zabbix
    sudo: не удаётся инициализировать модуль политики

    Там нет этого каталога
    Спасибо за труды )))

    1. psql -U zabbix -d zabbix -h 127.0.0.1
      psql: ошибка: ВАЖНО: пользователь «zabbix» не прошёл проверку подлинности (Ident)
      [root@host80 postgresql]#

  7. Подскажите пож. пути решения. Команда:
    echo «CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;» | sudo -u postgres psql zabbix
    выдает ошибку:
    ОШИБКА: для расширения «timescaledb» не определён путь установки или обновления для версии «2.1.0»

          1. timescaledb-2-loader-postgresql-12-2.1.0-0.el7.x86_64
            timescaledb-postgresql-12-1.7.5-0.el7.x86_64
            postgresql12-libs-12.6-1PGDG.rhel8.x86_64
            postgresql12-server-12.6-1PGDG.rhel8.x86_64
            postgresql12-12.6-1PGDG.rhel8.x86_64
            ———————
            timescaledb-2-loader-postgresql-12-2.1.0-0.el7.x86_64
            timescaledb-postgresql-12-1.7.5-0.el7.x86_64
            timescaledb-tools-0.11.0-0.el7.x86_64

  8. Да, у вас версии новее, скорее всего там что-то не совместимо. Вот рабочие версии пакетов:
    timescaledb-tools-0.8.1-0.el7.x86_64
    postgresql12-libs-12.3-1PGDG.rhel8.x86_64
    postgresql12-server-12.3-1PGDG.rhel8.x86_64
    timescaledb-postgresql-12-1.7.1-0.el7.x86_64
    postgresql12-12.3-1PGDG.rhel8.x86_64
    _____
    Конкретные версии можно устанавливать так:
    dnf —showduplicates list postgresql12-server — покажет все версии
    А дальше конкретную версию ставишь

      1. Ага интересно . C нуля cent8 установил накатил
        rpm -Uvh https://repo.zabbix.com/zabbix/5.3/rhel/8/x86_64/zabbix-release-5.3-1.el8.noarch.rpm
        dnf clean all
        dnf install zabbix-server-pgsql zabbix-web-pgsql zabbix-nginx-conf zabbix-agent
        rpm -Uvh https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
        dnf clean all
        dnf -qy module disable postgresql
        dnf -y install postgresql12 postgresql12-server
        /usr/pgsql-12/bin/postgresql-12-setup initdb
        systemctl enable —now postgresql-12
        sudo -u postgres createuser —pwprompt zabbix
        sudo -u postgres createdb -O zabbix zabbix
        zcat /usr/share/doc/zabbix-server-pgsql*/create.sql.gz | sudo -u zabbix psql zabbix ————————И тут ошибка путь есть а файла create.sql.gz нету !
        я чисто эксперементирую поэтому меня не напрягает баги собирать )))

  9. Не обломайтесь выложите чистое руководство с нуля cent8 по полочкам начиная с ngnx ,php

    1. Я рад, что у вас есть много времени по нескольку раз в месяц пробовать устанавливать Zabbix. Если вы можете поделитесь с пользователями своей актуально инструкцией.
      Я не пишу официальную документацию по установке каких-либо продуктов, все что написано тут это чисто мой опыт и если он кому-то еще пригодиться, то хорошо, нет, так нет.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *