Zabbix: Установка и обновление

Zabbix: Установка и обновление

В этой заметке я устанавливаю Zabbix на ОС Debian с немного изменённым списком пакетов. Вместо Nginx я использую его форк Angie.

Установка пакетов

Необходимо установить пакеты для Angie, PHP, PostgreSQL, TimescaleDB и самого Zabbix. Пакет zabbix-nginx-conf не нужен, так как мы воссоздадим его конфигурацию на Angie.

Angie

  • Добавить репозиторий и установить пакеты Angie:
1
. /etc/os-release; curl -fsSLo '/etc/apt/keyrings/angie.gpg' 'https://angie.software/keys/angie-signing.gpg' && echo "deb [signed-by=/etc/apt/keyrings/angie.gpg] https://download.angie.software/angie/${ID}/${VERSION_ID} ${VERSION_CODENAME} main" | tee '/etc/apt/sources.list.d/angie.list' && apt update && apt install --yes angie angie-module-brotli

PHP

  • Добавить репозиторий и установить пакеты PHP-FPM:
1
. /etc/os-release; v='8.3'; p=("php${v}-fpm" "php${v}-bcmath" "php${v}-bz2" "php${v}-cli" "php${v}-curl" "php${v}-gd" "php${v}-gmp" "php${v}-imagick" "php${v}-imap" "php${v}-intl" "php${v}-ldap" "php${v}-mbstring" "php${v}-memcached" "php${v}-mysql" "php${v}-odbc" "php${v}-opcache" "php${v}-pgsql" "php${v}-redis" "php${v}-uploadprogress" "php${v}-xml" "php${v}-zip" "php${v}-zstd"); curl -fsSLo '/etc/apt/keyrings/php.gpg' 'https://packages.sury.org/php/apt.gpg' && echo "deb [signed-by=/etc/apt/keyrings/php.gpg] https://packages.sury.org/php ${VERSION_CODENAME} main" | tee '/etc/apt/sources.list.d/php.list' && apt update && apt install --yes "${p[@]}"

PostgreSQL

  • Добавить репозиторий и установить пакеты PostgreSQL:
1
. /etc/os-release; curl -fsSL 'https://www.postgresql.org/media/keys/ACCC4CF8.asc' | gpg --dearmor -o '/etc/apt/keyrings/pgsql.gpg' && echo "deb [signed-by=/etc/apt/keyrings/pgsql.gpg] https://apt.postgresql.org/pub/repos/apt ${VERSION_CODENAME}-pgdg main" | tee '/etc/apt/sources.list.d/pgsql.list' && apt update && apt install --yes postgresql-16

TimescaleDB

  • Добавить репозиторий и установить пакеты TimescaleDB 2.18.*:
1
. /etc/os-release; curl -fsSL 'https://packagecloud.io/timescale/timescaledb/gpgkey' | gpg --dearmor -o '/etc/apt/keyrings/timescaledb.gpg' && echo "deb [signed-by=/etc/apt/keyrings/timescaledb.gpg] https://packagecloud.io/timescale/timescaledb/debian/ ${VERSION_CODENAME} main" | tee '/etc/apt/sources.list.d/timescaledb.list' && apt update && apt install --yes timescaledb-2-postgresql-16='2.18.*' timescaledb-2-loader-postgresql-16='2.18.*' timescaledb-tools

Zabbix

  • Добавить репозиторий и установить пакеты Zabbix:
1
. /etc/os-release; curl -fsSL 'https://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-B5333005' | gpg --dearmor -o '/etc/apt/keyrings/zabbix.gpg' && echo "deb [signed-by=/etc/apt/keyrings/zabbix.gpg] https://repo.zabbix.com/zabbix/7.0/debian ${VERSION_CODENAME} main" | tee '/etc/apt/sources.list.d/zabbix.list' && apt update && apt install --yes zabbix-server-pgsql zabbix-frontend-php zabbix-sql-scripts zabbix-agent2

Установка Zabbix

Установка Zabbix состоит из этапов:

  1. Настройка базы данных.
  2. Настройка конфигурации Nginx (в данном случае Angie).
  3. Настройка конфигурации PHP-FPM.

Настройка базы данных

  • Создать пользователя и базу данных zabbix, импортировать схему для базы данных zabbix:
1
u='zabbix'; sudo -u 'postgres' createuser --pwprompt "${u}" && sudo -u 'postgres' createdb -O "${u}" "${u}" && zcat '/usr/share/zabbix-sql-scripts/postgresql/server.sql.gz' | sudo -u "${u}" psql "${u}"
  • Добавить расширение, импортировать схему TimescaleDB для базы данных zabbix:
1
u='zabbix'; echo 'CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;' | sudo -u 'postgres' psql "${u}" && cat '/usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql' | sudo -u "${u}" psql "${u}"
  • Открыть файл /etc/zabbix/zabbix_server.conf и отредактировать параметр:
1
DBPassword=password

Настройка Angie

  • Создать файл /etc/angie/http.d/zabbix.conf со следующем содержимым:
angie.zabbix.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
server {
  listen 80;
  listen [::]:80;
  server_name example.com;
  root '/usr/share/zabbix';
  index index.php;

  location = /favicon.ico {
    log_not_found off;
  }

  location / {
    try_files $uri $uri/ =404;
  }

  location /assets {
    access_log off;
    expires 10d;
  }

  location ~ /\.ht {
    deny all;
  }

  location ~ /(api\/|conf[^\.]|include|locale) {
    deny all;
    return 404;
  }

  location /vendor {
    deny all;
    return 404;
  }

  location ~ [^/]\.php(/|$) {
    fastcgi_pass unix:/var/run/php/zabbix.sock;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_index index.php;

    fastcgi_param DOCUMENT_ROOT /usr/share/zabbix;
    fastcgi_param SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name;
    fastcgi_param PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name;

    include fastcgi_params;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;

    fastcgi_intercept_errors on;
    fastcgi_ignore_client_abort off;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
  }
}

Настройка PHP-FPM

  • Создать файл /etc/php/8.3/fpm/pool.d/zabbix.conf со следующем содержимым:
php-fpm.zabbix.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
[zabbix]
user = www-data
group = www-data
listen = /var/run/php/zabbix.sock
listen.owner = www-data
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 200
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/sessions/
php_value[max_execution_time] = 300
php_value[memory_limit] = 128M
php_value[post_max_size] = 16M
php_value[upload_max_filesize] = 2M
php_value[max_input_time] = 300
php_value[max_input_vars] = 10000

Запуск мастера установки

  • Перезапустить сервер Zabbix и сопутствующие службы:
1
systemctl restart zabbix-server zabbix-agent2 angie php${v}-fpm
  • Включить автоматический запуск сервера Zabbix и сопутствующих служб:
1
systemctl enable zabbix-server zabbix-agent2 angie php${v}-fpm
  • Для запуска мастера установки, необходимо в браузере открыть домен, указанный в конфигурации Angie.

Резервное копирование

  • Создать резервную копию базы данных zabbix:
1
f='zabbix.backup.sql'; pg_dump --host='127.0.0.1' --port='5432' --username='zabbix' --password --dbname='zabbix' --file="${f}" && xz "${f}" && rm -f "${f}"

Восстановление

  • Удалить существующую базу данных zabbix:
1
sudo -u 'postgres' dropdb 'zabbix'
  • Создать новую базу данных zabbix с владельцем zabbix:
1
sudo -u 'postgres' createdb -O 'zabbix' 'zabbix'
  • Создать расширение timescaledb для базы данных zabbix:
1
echo 'CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;' | sudo -u 'postgres' psql 'zabbix'
  • Остановить процессы timescaledb в базе данных zabbix перед восстановлением:
1
echo 'SELECT timescaledb_pre_restore();' | sudo -u 'postgres' psql 'zabbix'
  • Восстановить информацию в базе данных zabbix из файла zabbix.backup.sql.xz:
1
f='zabbix.backup.sql'; xz -d "${f}.xz" && sudo -u 'postgres' psql --dbname='zabbix' --file="${f}"
  • Запустить процессы timescaledb после восстановления базы данных zabbix:
1
echo 'SELECT timescaledb_post_restore();' | sudo -u 'postgres' psql 'zabbix'
  • Запустить Vacuum после восстановления базы данных zabbix:
1
sudo -u 'postgres' vacuumdb --all --analyze

Обновление Zabbix

Обновление Zabbix состоит из двух этапов:

  1. Остановка сервера Zabbix, обновление пакетов и запуск сервера Zabbix.
  2. Остановка сервера Zabbix, обновление схемы TimescaleDB и запуск сервера Zabbix.

Обновление пакетов

  • Остановка служб Zabbix:
1
systemctl stop zabbix-server zabbix-agent2
  • Обновление пакетов Zabbix:
1
apt update && apt install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-sql-scripts zabbix-agent2
  • Запуск служб Zabbix:
1
systemctl start zabbix-server zabbix-agent2

Обновление TimescaleDB

  • Остановка служб Zabbix:
1
systemctl stop zabbix-server zabbix-agent2
  • Обновление схемы TimescaleDB:
1
cat '/usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql' | sudo -u 'zabbix' psql 'zabbix'
  • Запуск служб Zabbix:
1
systemctl start zabbix-server zabbix-agent2