Установка Zabbix 5.4, Nginx, PostgreSQL 13 + TimescaleDB в Centos 8 / Rocky Linux
Zabbix — свободная система мониторинга и отслеживания статусов разнообразных сервисов компьютерной сети, серверов и сетевого оборудования. TimescaleDB — это расширение PostgreSQL для работы с временными рядами (time series). Временные ряды можно хранить в PostgreSQL и просто так, но TimescaleDB обеспечивает большую производительность на том же железе.
Установка Zabbix и Nginx
Добавляем репозиторий Zabbix
1
$ sudo rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/8/x86_64/zabbix-release-5.4-1.el8.noarch.rpm
Добавляем репозиторий Nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo nano /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
По умолчанию будет использоваться стабильная версия. Если нужна основная версия(mainline), переключаемся
1
$ sudo dnf config-manager --set-enabled nginx-mainline
Удаляем все метаданные
1
$ sudo dnf clean all
Устанавливаем Zabbix для БД PostgreSQL и Nginx
1
$ sudo dnf install zabbix-server-pgsql zabbix-web-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
Установка PostgreSQL 13
Отключаем модуль PostgreSQL в предустановленном по умолчанию репозитории AppStream
1
$ sudo dnf -qy module disable postgresql
Проверяем
1
2
3
4
5
6
7
$ sudo dnf module list postgresql
CentOS-8 - AppStream Local
Name Stream Profiles Summary
postgresql 9.6 [x] client, server [d] PostgreSQL server and client module
postgresql 10 [d][x] client, server [d] PostgreSQL server and client module
postgresql 12 [x] client, server [d] PostgreSQL server and client module
postgresql 13 [x] client, server [d] PostgreSQL server and client module
Добавляем репозиторий PostgreSQL
1
$ sudo dnf -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Устанавливаем PostgreSQL 13
1
$ sudo dnf -y install postgresql13 postgresql13-server
Инициализируем базу
1
2
$ sudo /usr/pgsql-13/bin/postgresql-13-setup initdb
Initializing database … OK
Основной конфиг PostgreSQL расположен: /var/lib/pgsql/13/data/postgresql.conf
Запускаем PostgreSQL и добавляем сервис в автозагрузку
1
$ sudo systemctl enable --now postgresql-13
Проверяем статус
1
$ systemctl status postgresql-13
Устанавливаем пароль для пользователя postgres
1
2
3
4
$ sudo su - postgres
$ psql -c "alter user postgres with password 'mysuperpassword'"
ALTER ROLE
$ exit
Установка TimescaleDB
Добавляем репозиторий TimescaleDB
1
2
3
4
5
6
7
8
9
10
11
$ sudo nano /etc/yum.repos.d/timescale_timescaledb.repo
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/8/$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
Устанавливаем утилиты
1
$ sudo yum install pygpgme yum-utils
Устанавливаем timescaledb
1
$ sudo yum install timescaledb-2-postgresql-13
Останавливаем PostgreSQL
1
$ sudo systemctl stop postgresql-13
Тюним PostgreSQL (от рута)
1
$ sudo su -c 'timescaledb-tune --pg-config=/usr/pgsql-13/bin/pg_config'
Запускаем PostgreSQL
1
$ sudo systemctl start postgresql-13
Настройка Zabbix и Nginx
Переключаемся на пользователя root
1
$ sudo su
Создаем пользователя БД для Zabbix
1
2
3
# sudo -u postgres createuser --pwprompt zabbix
Enter password for new role: zabbixpasswd
Enter it again: zabbixpasswd
Создадим БД для Zabbix
1
# sudo -u postgres createdb -O zabbix zabbix
Импортируем начальную схему и данные
1
# zcat /usr/share/doc/zabbix-sql-scripts/postgresql/create.sql.gz | sudo -u zabbix psql zabbix
Подключаем расширение timescaledb
1
# echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix
Скачиваем исходники Zabbix и распаковываем архив
1
2
3
4
# cd /tmp
# wget https://cdn.zabbix.com/zabbix/sources/stable/5.4/zabbix-5.4.3.tar.gz
# tar -zxvf zabbix-5.4.3.tar.gz
Импортируем схему и данные для расширения timescaledb в PostgreSQL
1
2
3
4
5
6
7
# cat /tmp/zabbix-5.4.3/database/postgresql/timescaledb.sql | sudo -u zabbix psql zabbix
Creating home directory for zabbix.
NOTICE: PostgreSQL version 13.3 is valid
NOTICE: TimescaleDB extension is detected
NOTICE: TimescaleDB version 2.4.0 is valid
NOTICE: TimescaleDB is configured successfully
DO
Редактируем конфиг PostgreSQL
1
2
3
4
$ sudo nano /var/lib/pgsql/13/data/pg_hba.conf
...
#host all all 127.0.0.1/32 scram-sha-256
host zabbix zabbix 127.0.0.1/32 md5
Перезапускаем сервис
1
$ sudo systemctl restart postgresql-13
Настраиваем подключение Zabbix к PostgreSQL
1
2
3
4
5
$ sudo nano /etc/zabbix/zabbix_server.conf
DBHost=127.0.0.1
DBName=zabbix
DBUser=zabbix
DBPassword=zabbixpasswd
Настраиваем Nginx
1
2
3
4
$ sudo nano /etc/nginx/conf.d/zabbix.conf
listen 80;
server_name zabbix.example.ru;
...
Перезапускаем сервисы и добавляем их в автозагрузку
1
2
$ sudo systemctl restart zabbix-server zabbix-agent nginx php-fpm
$ sudo systemctl enable zabbix-server zabbix-agent nginx php-fpm
Настройка Firewall и SELinux
Открываем порты 80/443
1
2
3
$ sudo firewall-cmd --zone=public --add-port=80/tcp --permanent
$ sudo firewall-cmd --zone=public --add-port=443/tcp --permanent
$ sudo firewall-cmd --reload
Выполним следующие команды, чтобы предоставить веб-интерфейсу Zabbix разрешение на соединение с сервером
1
$ sudo setsebool -P httpd_can_connect_zabbix on
Также нужно предоставить веб-интерфейсу Zabbix разрешение на соединение с базой данных
1
$ sudo setsebool -P httpd_can_network_connect_db on
Скачиваем готовый модуль для настройки SELinux
1
2
3
4
5
6
$ cd /tmp
$ wget https://support.zabbix.com/secure/attachment/53320/zabbix_server_add.te
$ checkmodule -M -m -o zabbix_server_add.mod zabbix_server_add.te
$ semodule_package -m zabbix_server_add.mod -o zabbix_server_add.pp
$ semodule -i zabbix_server_add.pp
Создаем свой модуль. Для того, чтобы это получилось, нужно хотя бы один раз неудачно запустить zabbix server с включенным selinux.
1
2
$ sudo ausearch -c 'zabbix_server' --raw | audit2allow -M my-zabbixserver
$ sudo semodule -X 300 -i my-zabbixserver.pp
После этого zabbix-server должен запуститься с включенным SeLinux
1
$ sudo systemctl restart zabbix-server
Далее переходим в web-интерфейс и завершаем настройку Zabbix