Используемый стек
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