Используемый стек

  • Almalinux 9.3 (4 ядра ЦП, 6 ГБ оперативной памяти, можно меньше)

  • Zabbix 6.0

  • PostgreSQL 15.5

  • TimescaleDB 2.13.1

Описание стека

Almalinux — дистрибутив Linux на основе исходных кодов Red Hat Enterprise Linux. Almalinux - замена CentOS 7.

Zabbix — программный инструмент с открытым исходным кодом для мониторинга ИТ-инфраструктуры.

PostgreSQL — свободная объектно-реляционная СУБД.

TimescaleDB — ПО с открытым исходным кодом, является расширением для PostgreSQL, которое оптимизирует работу с временными рядами в обычной базе данных PostgreSQL.

Временные ряды (time series) — собранные в разные моменты времени данные о характеристиках исследуемого процесса.
Временные ряды состоят из двух элементов:
1. временная метка;
2. характеристики, называемые уровнями ряда.

Установка и настройка PostgreSQL и TimescaleDB

Установите репозиторий PostgreSQL:

dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Отключите встроенный модуль PostgreSQL:

dnf -qy module disable PostgreSQL

Установите сервер PostgreSQL:

dnf install -y postgresql15-server

Создайте репозиторий TimescaleDB (скопировать все строки и вставить в CLI):

tee /etc/yum.repos.d/timescale_timescaledb.repo <<EOL
[timescale_timescaledb]
name=timescale_timescaledb
baseurl=https://packagecloud.io/timescale/timescaledb/el/$(rpm -E %{rhel})/\$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

Обновите список локальных репозиториев:

yum -y update

Установите TimescaleDB и инструмент для тюнинга:

yum -y install timescaledb-2-postgresql-15 timescaledb-tools

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

/usr/pgsql-15/bin/postgresql-15-setup initdb
systemctl enable postgresql-15 && systemctl start postgresql-15

Тюнинг postgresql через timescaledb:
-cpus - количество ядер процессора, для PostgreSQL.
-memory - объем ОП, для PostgreSQL.
-dry-run - вывести информацию о том, какие строки будут записаны в конфиг файл (предпросмотр).
-quiet - тихая установка.
-yes - отвечать "да" на каждый вопрос.
Предпросмотр:

timescaledb-tune --pg-config=/usr/pgsql-15/bin/pg_config -cpus 2 -memory 2GB -dry-run -quiet -yes

Применим заданные настройки:

timescaledb-tune --pg-config=/usr/pgsql-15/bin/pg_config -cpus 2 -memory 2GB -quiet -yes

Ещё немного тюнинга postgresql:
Редактируем /var/lib/pgsql/15/data/postgresql.conf

Максимальное количество подключений.

max_connections = 100

Уровень журнала WAL=minimal, т.к. журнал WAL содержит меньше информации и быстрее работает, а репликацию БД не используем в данном примере.

wal_level = minimal

Отключение режима синхронного записи журнала WAL.

synchronous_commit = off

С какой периодичность записывать данные в журнал WAL (С ОП на диск(раз в 2 секунды)).

wal_writer_delay = 2000ms

Количество реплик.

max_wal_senders = 0

Добавить в конец конфиг файла. Отключаем телеметрию.

timescaledb.telemetry_level = off

Перезагрузим postgresql, чтобы изменения вступили в силу.

systemctl restart postgresql-15

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

Исключите пакеты Zabbix поставляемые в репозитории EPEL,
если он у Вас установлен. Отредактируйте файл /etc/yum.repos.d/epel.repo и добавьте следующую директиву:

[epel]
...
excludepkgs=zabbix*

Примечание. Как должно получиться, 11-я строка:

Пример конфиг файла
Пример конфиг файла

Установка репозитория Zabbix.

rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/9/x86_64/zabbix-release-6.0-4.el9.noarch.rpm; dnf clean all

Установка Zabbix-сервера, Nginx, Zabbix-агента.

dnf install -y zabbix-server-pgsql zabbix-web-pgsql zabbix-nginx-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent2

Установка Русского и Английского языка для Zabbix.

dnf install -y glibc-langpack-ru glibc-langpack-en

Создаём пользователя "zabbix" в БД PostgreSQL и придумываем для него пароль.

sudo -u postgres createuser --pwprompt zabbix

Создаём базу данных в PostgreSQL с именем "zabbix" под пользователем "zabbix".

sudo -u postgres createdb -O zabbix zabbix

Импортируем структуру БД "zabbix".

zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix

Включение расширения TimescaleDB.

echo "CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;" | sudo -u postgres psql zabbix

Запустим скрипт для редактирование БД под timescaledb.

cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb.sql | sudo -u zabbix psql zabbix

Подключаемся к БД, чтобы проверить, что расширение TimescaleDB было установлено.

sudo -u postgres psql zabbix

Посмотреть все установленные расширения PostgreSQL

\dx

Отключится от базы данных

\q

Редактируем конфиг файл Zabbix-сервера /etc/zabbix/zabbix_server.conf.

Задаём пароль от учётной записи "zabbix" в БД PostgreSQL, который ранее указывали.

DBPassword=password

Poller - это процесс, который стягивает метрики с хостов. (Указываем их количество).

StartPollers=100

PollersUnreachable - это процесс, который опрашивает недоступные хосты. (Указываем их количество).

StartPollersUnreachable=75

Pingers - это процесс, который пингует хосты для проверки их доступности. (Указываем их количество).

StartPingers=5

Discoverers - это процесс, отвечающий за автоматическое обнаружение хостов.

StartDiscoverers=5

Задаём размер кэша Zabbix.

CacheSize=2G

DBSyncers - это процессы, которые отвечаю за соединение с БД.

StartDBSyncers=5

Размер кэша истории.

HistoryCacheSize=256M

Размер кэша индекса истории.

HistoryIndexCacheSize=128M

Размер кэша записи тренда.

TrendCacheSize=512M

Размер кэша значений истории.

ValueCacheSize=1G

Указывает, как долго мы ждем агента, SNMP-устройства или внешней проверки (в секундах).

Timeout=3

По истечении скольких секунд недоступности считайте хост недоступным.

UnreachablePeriod=15

Как часто хост проверяется на доступность в течение периода недоступности, в секундах.

UnavailableDelay=180

Как часто хост проверяется на доступность в течение периода недостижимости, в секундах

UnreachableDelay=5

Настройка Nginx и PHP

Настройка PHP. Редактируем /etc/php.ini
Закроем доступ ко всем не существующим файлам .php (для безопасности)

cgi.fix_pathinfo=0

Устанавливаем часовой пояс

date.timezone = "Asia/Irkutsk"

Настройка Nginx
Редактируем файл /etc/nginx/conf.d/zabbix.conf, раскомментируем и настроим директивы 'listen' и 'server_name'.

listen 80;
server_name zabbix.lan;

Настройка фаервола

Порт TCP 80 — для подключения к веб zabbix по HTTP.
Порт TCP 10050 — порт агента, по нему zabbix сервер опрашивает клиентов.
Порт TCP 10051 — порт, на котором zabbix сервер получает данные от клиентов.
Откроем порты 80, 10050, 10051 и посмотрим, что они применились:

firewall-cmd --permanent --add-port={80/tcp,10050/tcp,10051/tcp}; firewall-cmd --reload; firewall-cmd --list-all

Запуск Zabbix-сервера

Запустите процессы Zabbix сервера, агента, nginx, php и настройте их запуск при загрузке ОС.

systemctl restart zabbix-server zabbix-agent2 nginx php-fpm && systemctl enable zabbix-server zabbix-agent2 nginx php-fpm

Откройте веб-страницу Zabbix
http://zabbix.lan/ или http://ip-адрес/
По умолчанию, логин: Admin, пароль: zabbix

Источники

  1. https://www.postgresql.org/download/linux/redhat/

  2. https://www.zabbix.com/ru/download?zabbix=6.0&os_distribution=alma_linux&os_version=9&components=server_frontend_agent&db=pgsql&ws=nginx

  3. https://www.youtube.com/watch?v=7y2UtSoS3Xo

  4. https://docs.timescale.com/self-hosted/latest/install/installation-linux/

Комментарии (0)