Расследование загадочного падения мониторинга по расписанию и как мы нашли неожиданного виновника.
На сервере Zabbix периодически появлялась ошибка:
Сервис мониторинга переставал работать, хотя все службы были запущены. Особенность: проблема возникала примерно в 6 утра, после чего приходилось вручную перезагружать сервер.
Первая мысль - проблемы с базой данных. Проверяем:
systemctl status mariadb
Результат: MariaDB inactive (dead). Но почему? Логи показывают корректное завершение:
фев 05 06:20:24 zabbix-6-4-19 systemd[1]: Stopping mariadb.service
фев 05 06:20:24 zabbix-6-4-19 mariadbd[869]: Normal shutdown
фев 05 06:20:34 zabbix-6-4-19 mariadbd[869]: Shutdown complete
MariaDB не "падала" - её останавливали корректно. Кто и зачем?
Смотрим логи вокруг 6:20 утра:
sudo journalctl --since "06:00" --until "06:30"
apt-daily-upgrade.service запускается в 6:20 и начинает останавливать службы! Это автоматические обновления Ubuntu.
Как это работает:
⚠️ Ирония ситуации: Система мониторинга "умирает" от того, что её же операционная система решила "заботиться" о безопасности через автообновления.
Есть несколько вариантов:
# Отключить таймеры
sudo systemctl disable --now apt-daily.timer apt-daily-upgrade.timer
# Отключить в конфигурации APT
echo 'APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";' | sudo tee /etc/apt/apt.conf.d/20auto-upgrades
# Удалить пакет (самый надёжный)
sudo apt remove --purge unattended-upgrades -y
# Настроить needrestart
sudo nano /etc/needrestart/needrestart.conf
# Изменить строку:
$nrconf{restart} = 'l'; # 'l' = никогда не перезапускать
# Добавить исключения для критических служб
$nrconf{override_rc}{'mariadb'} = 0;
$nrconf{override_rc}{'zabbix.*'} = 0;
# Изменить время с 6 утра на 3 ночи
sudo systemctl edit apt-daily-upgrade.timer
[Timer]
OnCalendar=
OnCalendar=03:00
✅ Наше решение: Выбрали вариант А - полное отключение автообновлений на сервере мониторинга. Обновления выполняем вручную по выходным с предварительным бекапом.
# Проверить таймеры
systemctl list-timers | grep -i apt
# Проверить конфигурацию
cat /etc/apt/apt.conf.d/20auto-upgrades
cat /etc/apt/apt.conf.d/50unattended-upgrades | grep -i "unattended"
# Проверить логи
cat /var/log/unattended-upgrades/unattended-upgrades.log | tail -20
# Установлен ли needrestart?
dpkg -l | grep needrestart
# Проверить конфигурацию
cat /etc/needrestart/needrestart.conf | grep -E "(restart|override)"
# Логи needrestart
cat /var/log/needrestart.log 2>/dev/null
# Логи за конкретное время
sudo journalctl --since "06:15" --until "06:25" --no-pager
# Или для конкретной службы
sudo journalctl -u mariadb --since "yesterday" --until "now" --no-pager
journalctl показал всю цепочку событий👨💻 Рекомендация: На серверах критичной инфраструктуры (мониторинг, базы данных, балансировщики) отключайте автообновления. Устанавливайте обновления безопасности вручную в запланированные окна обслуживания.
Комментарии
Пока нет комментариев. Будьте первым!