Очистка базы данных zabbix.

Модераторы: flash, mordor

Ответить
Аватара пользователя
flashdeath
Администратор
Сообщения: 25
Зарегистрирован: 08 ноя 2007, 14:22

Очистка базы данных zabbix.

Сообщение flashdeath »

Проверено на zabbix7, после миграции с 6 версии на 7

Сам процесс обновления опишу несколько позже.
В принципе все тривиально.
Останавливаем заббикс и все что с ним связано кроме DB.
Делаем бэкап базы - на всякий случай.
Обновляем заббикс сервер
Обновляем заббикс агент
Обнавляем остальные компаненты (java-gateway ...)
Обновляем zabbix-ui (zabbix7-frontend)
Запускаем заббикс он обновляет DB
Запуска5ем остальные компоненты.

У меня засада была в том что мне надо было обновить базу которая у меня на postgres с 13 версии на 16
За 2 года база превысила 100GB делать бэкап такой базы долго и дорого
Поэтому принял решение обоезать исторические данные оставить историю за 7 дней а графики за 90
Все-равно сначала сделал бэкап необрезанной базы (на всякий случай)

потом залогинился в базу zabbix

Код: Выделить всё

psql -U zabbix zabbix
дальше начал резать базу

Код: Выделить всё

delete FROM alerts where age(to_timestamp(alerts.clock)) > interval '7 days';
delete FROM acknowledges where age(to_timestamp(acknowledges.clock)) > interval '7 days';
delete FROM events where age(to_timestamp(events.clock)) > interval '7 days';

delete FROM history where age(to_timestamp(history.clock)) > interval '7 days';
delete FROM history_uint where age(to_timestamp(history_uint.clock)) > interval '7 days';
delete FROM history_str where age(to_timestamp(history_str.clock)) > interval '7 days';
delete FROM history_text where age(to_timestamp(history_text.clock)) > interval '7 days';
delete FROM history_log where age(to_timestamp(history_log.clock)) > interval '7 days';

delete FROM trends where age(to_timestamp(trends.clock)) > interval '90 days';
delete FROM trends_uint where age(to_timestamp(trends_uint.clock)) > interval '90 days';

delete from history where itemid not in (select itemid from items where status='0');
delete from history_uint where itemid not in (select itemid from items where status='0');
delete from history_str where itemid not in (select itemid from items where status='0');
delete from history_text where itemid not in (select itemid from items where status='0');
delete from history_log where itemid not in (select itemid from items where status='0');

delete from trends where itemid not in (select itemid from items where status='0');
delete from trends_uint where itemid not in (select itemid from items where status='0');
После образки выполнил vacuum хотя этого можно было и не делать.

Код: Выделить всё

vacuum full alerts;
vacuum full acknowledges;
vacuum full events;

vacuum full history;
vacuum full history_uint;
vacuum full history_str;
vacuum full history_text;
vacuum full history_log;

vacuum full trends;
vacuum full trends_uint;
Запустил заббикс на обрезанной базе, убедился что заббикс заработал.
Остановил заббикс.
Обновил базу
подготовил базу как написано в доке (пересоздал пользователя и роль, дал нужные гранты)
Залил базу из бэкапа
обновил timescaledb
Для этого пришлось выпилить старый

Код: Выделить всё

DROP EXTENSION timescaledb CASCADE;
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
Дальше обновил сам заббикс, агентов...

База уменьшилась до 2 гигов.
Ответить