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

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

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

Экспорт параметров

  • Экспортировать заранее подготовленные параметры в переменные окружения:
1
 export ZABBIX_VER='7.0'

Репозиторий

  • Скачать и установить ключ репозитория:
1
 curl -fsSL 'https://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-B5333005' | gpg --dearmor -o '/etc/apt/keyrings/zabbix.gpg'
  • Создать файл репозитория /etc/apt/sources.list.d/zabbix.sources:
1
 . '/etc/os-release' && echo -e "X-Repolib-Name: Zabbix\nEnabled: yes\nTypes: deb\nURIs: https://repo.zabbix.com/zabbix/${ZABBIX_VER}/${ID}\nSuites: ${VERSION_CODENAME}\nComponents: main\nArchitectures: $( dpkg --print-architecture )\nSigned-By: /etc/apt/keyrings/zabbix.gpg\n" | tee '/etc/apt/sources.list.d/zabbix.sources' > '/dev/null'

Zabbix Server

Установка Zabbix состоит из следующих этапов:

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

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

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

1
 apt update && apt install --yes zabbix-server-pgsql zabbix-frontend-php zabbix-sql-scripts zabbix-agent2

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

  • Создать пользователя и базу данных 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
server {
  listen 80;
  server_name example.com;
  root '/usr/share/zabbix';
  index index.php;

  location = /favicon.ico { log_not_found off; }
  location ~ /\.ht { deny all; }
  location ~ /(api\/|conf[^\.]|include|locale) { deny all; return 404; }
  location / { try_files $uri $uri/ =404; }
  location /assets { access_log off; expires 10d; }
  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/<VER>/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
21
22
23
24
[zabbix]

user = www-data
group = www-data

listen = /run/php/$pool.sock
listen.owner = www-data
listen.group = 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

access.log = /var/log/php-fpm/$pool.access.log
slowlog = /var/log/php-fpm/$pool.slow.log

php_value[session.save_path] = /var/lib/php/sessions/
php_value[max_execution_time] = 300
php_value[max_input_time] = 300
php_value[max_input_vars] = 10000

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

  • Перезапустить сервер Zabbix и сопутствующие службы:
1
 systemctl restart zabbix-server zabbix-agent2 angie php${PHP_VER}-fpm
  • Включить автоматический запуск сервера Zabbix и сопутствующих служб:
1
 systemctl enable zabbix-server zabbix-agent2 angie php${PHP_VER}-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 состоит из двух этапов:

  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

Zabbix Agent

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

Установка

  • Установить пакеты:
1
 apt update && apt install --yes zabbix-agent2

Настройка

  • Настроить IP-адреса серверов Zabbix (s) и hostname клиента (h):
1
 s='192.168.1.2,192.168.1.3'; h='SrvHost'; f='/etc/zabbix/zabbix_agentd.conf'; [[ -f "${f}" && ! -f "${f}.orig" ]] && mv "${f}" "${f}.orig"; sed -i -e "s|Server=127.0.0.1|Server=${s}|g" -e "s|ServerActive=127.0.0.1|ServerActive=${s}|g" -e "s|Hostname=Zabbix server|Hostname=${h}|g" "${f}"