Zabbix agent on ХХХХХХХ is unreachable for 5 minutes
Часто стал срабатывать триггер , что хосты агентов не доступны(и занимал весь дашборд) , хотя сетевых проблем нету. Сам появлялся и исчезал , в момент срабатывания мониторинг хостов не производился , когда триггер решался метрики появлялись в том числе и в момент провала В момент срабатывания триггеров было видно , что на базе росли локи Начал смотреть в сторону базы , у меня postgresql, инструмент pghtop показывает запросы в реальном времени , в момент срабатывания триггеров pghtop показывал запросы select в исторические таблицы, которые висели по несколько минут Посмотрим сколько записей допустим в таблице history
zabbix=# SELECT count(*) FROM history;
count
-----------
277296209
(1 row)
Соотвественно решение это сокращение хранения данных и метрик
Делаем временное решение или постоянное пишем скрипт , который будет чистить исторические данные за опеределенный период исключая некоторые хосты(и вставляем его в крон), но сначало отключим на zabbix сервере housekeeper и перезапутим сам сервис
HousekeepingFrequency=0
MaxHousekeeperDelete=0
Исключаем в скрипте хосты monitoring_(1-4) и остальные метрики храним сутки
sql_func()
{
sql="delete from $table
using items,hosts
where hosts.host!='monitoring_4' and hosts.host!='monitoring_1' and hosts.host!='monitoring_2' and hosts.host!='monitoring_3' and $table.itemid=items.itemid and hosts.hostid=items.hostid
and $table.clock < extract(epoch from to_char(CURRENT_DATE - INTERVAL '0 days', 'YYYY-MM-DD')::timestamp)::integer"
}
TABLE_LIST=(
history
history_log
history_str
history_text
history_uint
trends
trends_uint
)
log="/root/bin/clean_history_zabbix.log_$(date +%d-%m-%Y_%H-%M-%S)"
echo -n >$log
echo "bgin" - $(date +%d-%m-%Y_%H-%M-%S) >>$log
PGPASSWORD=12345678 psql -h 127.0.0.1 -U zabbix -d zabbix -c "SELECT * FROM timescaledb_information.hypertables" >>$log
for table in "${TABLE_LIST[@]}"; do
current_date=$(date +%d-%m-%Y_%H-%M-%S)
echo $current_date >>$log
echo $table >>$log
PGPASSWORD=12345678 psql -h 127.0.0.1 -U zabbix -d zabbix -c "SELECT count(*) FROM $table" >>$log
done
for table in "${TABLE_LIST[@]}"; do
sql_func
current_date=$(date +%d-%m-%Y_%H-%M-%S)
echo $current_date >>$log
echo $sql >>$log
PGPASSWORD=12345678 psql -qtAX -h 127.0.0.1 -U zabbix -d zabbix -c "$sql" 2>>$log
done
PGPASSWORD=12345678 psql -h 127.0.0.1 -U zabbix -d zabbix -c "SELECT * FROM timescaledb_information.hypertables" >>$log
for table in "${TABLE_LIST[@]}"; do
current_date=$(date +%d-%m-%Y_%H-%M-%S)
echo $current_date >>$log
echo $table >>$log
PGPASSWORD=12345678 psql -h 127.0.0.1 -U zabbix -d zabbix -c "SELECT count(*) FROM $table" >>$log
done
echo "end" - $(date +%d-%m-%Y_%H-%M-%S) >>$log
Так же заметил , что некоторые таблицы весили больше 5gb, так как у них связей не было по внешним ключам со стальными таблицами , можно сделать вывод , что они хранят только данные , удалил эти таблицы и пересоздал их(запросы на создания таблиц взял файла установки забикса)
auditlog
housekeeper
Модернизировал бекап базы , исключил данные из исторических таблиц
PGPASSWORD=12345678 /usr/pgsql-13/bin/pg_dump -Fc -h server.local -U backup zabbix --exclude-table-data 'public.history' --exclude-table-data 'public.history_uint' --exclude-table-data 'public.history_log' --exclude-table-data 'public.history_str' --exclude-table-data 'public.history_text' --exclude-table-data 'public.trends' --exclude-table-data 'public.trends_uint' --exclude-table-data 'public.auditlog' > /opt/zabbix'_'`date +"%d-%m-%Y"`-d.sql.fc