Сегодня я покажу, как настроить простой, но мощный мониторинг логов Nextcloud с помощью Zabbix. Это позволит вам видеть ошибки в реальном времени, получать алерты и быстро находить проблемы.
Цель
Создать систему, которая:
- Проверяет логи Nextcloud раз в 5 минут
- Подсчитывает количество ошибок по типам
- Отображает результаты в Zabbix
- Отправляет уведомления при критических ошибках
Необходимые компоненты
- Сервер с Nextcloud
- Zabbix-агент (на сервере)
- Zabbix-сервер (на другом хосте или в облаке)
Шаг 1: Создание скрипта для подсчёта ошибок
Создайте скрипт, который будет считать количество вхождений ключевых слов в логах.
#!/bin/bash
# Путь к лог-файлу
LOG_FILE="$1"
KEYWORD="$2"
# Проверяем, существует ли файл
if [ ! -f "$LOG_FILE" ]; then
echo 0
exit 0
fi
# Подавляем ошибки grep
COUNT=$(grep -i "$KEYWORD" "$LOG_FILE" 2>/dev/null | wc -l)
echo "$COUNT"
Сохраните его как /usr/local/bin/zabbix-log-errors.sh, сделайте исполняемым:
sudo chmod +x /usr/local/bin/zabbix-log-errors.sh
Шаг 2: Настройка Zabbix-агента
Добавьте пользовательский параметр в конфиг Zabbix:
UserParameter=log.errors[*],/usr/local/bin/zabbix-log-errors.sh "$1" "$2"
Сохраните в /etc/zabbix/zabbix_agentd.conf и перезапустите агент:
sudo systemctl restart zabbix-agent
Шаг 3: Создание элементов данных в Zabbix
В интерфейсе Zabbix создайте следующие Items:
| Имя | Ключ | Описание |
|---|---|---|
| Nextcloud: Exceptions in log | log.errors[/var/log/nextcloud/nextcloud.log,Exception] | Количество исключений PHP |
| Nextcloud: Errors in log | log.errors[/var/log/nextcloud/nextcloud.log,Error] | Общие ошибки |
| Nextcloud: Fatal errors | log.errors[/var/log/nextcloud/nextcloud.log,Fatal] | Фатальные ошибки |
| Nextcloud: Failed login attempts | log.errors[/var/log/nextcloud/nextcloud.log,"Failed login"] | Неудачные попытки входа |
| Nextcloud: DB errors | log.errors[/var/log/nextcloud/nextcloud.log,DB error] | Ошибки базы данных |
Шаг 4: Добавление триггеров
Создайте триггер, чтобы получать уведомления при появлении ошибок:
{HOST:log.errors[/var/log/nextcloud/nextcloud.log,Exception].last()} > 0
Шаг 5: Отображение данных
Создайте дашборд с виджетом "Значение элемента данных" или таблицей, чтобы видеть все ошибки сразу.
Результат
Вы получили полноценный микрологсервер, который:
- Мониторит логи в реальном времени
- Показывает количество ошибок
- Предупреждает о проблемах
- Легко масштабируется на другие сервисы
Заключение
Такой подход позволяет легко контролировать состояние вашего Nextcloud-сервера без сложных инструментов. Используйте этот шаблон для мониторинга других сервисов: почтовых серверов, веб-серверов, баз данных.
Дополнительно: ключевые слова для почтовых серверов
Для мониторинга почтовых серверов (Dovecot, Postfix, Roundcube) используйте:
- Dovecot:
Authentication failure,Login failed,read failed - Postfix:
reject_unauth_destination,timeout,deferred - Roundcube:
Error,Session timeout
Настройка почтового сервера (Postfix + Dovecot) часто сопровождается "странными" ошибками в логах. Вот реальные проблемы, с которыми я столкнулся, и как их решил.
Проблема 1: Zabbix не видит данные из лога
При попытке считать количество строк в /var/log/mail.log через Zabbix — возвращается 0, хотя события есть.
sudo -u zabbix cat /var/log/mail.log cat: /var/log/mail.log: Permission denied
Решение: Добавьте пользователя zabbix в группу adm
Файл /var/log/mail.log принадлежит группе adm, а пользователь zabbix в неё не входит.
sudo usermod -aG adm zabbix sudo systemctl restart zabbix-agent
После этого проверьте:
sudo -u zabbix grep "Cached message size" /var/log/mail.log | wc -l
Проблема 2: Лог-файл растёт слишком быстро
Файл /var/log/mail.log достигает сотен МБ, что замедляет парсинг и мониторинг.
Решение: Настройте ротацию логов раз в сутки
Отредактируйте конфиг ротации (обычно /etc/logrotate.d/rsyslog) или создайте свой:
/var/log/mail.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 644 syslog adm
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate > /dev/null || true
endscript
}
Теперь лог будет резаться каждый день, храниться 7 версий, старые — сжиматься.
Проблема 3: Нужно очистить лог, но не сломать сервис
Хочется обнулить лог, но просто rm + touch может нарушить работу rsyslog.
Решение: Очищайте файл безопасно, не удаляя его
Сделайте резервную копию и обнулите содержимое:
sudo cp /var/log/mail.log /backup/mail.log.$(date +%F) sudo truncate -s 0 /var/log/mail.log
Или:
sudo > /var/log/mail.log
Так файл останется на месте, а rsyslog продолжит писать в него.
Проблема 4: В логах Dovecot — ошибка чтения письма
dovecot: Error: Mailbox INBOX: UID=5065: read(...) failed dovecot: Deleting corrupted cache record uid=5065
Решение: Удалите или почините повреждённое письмо
Перейдите в папку пользователя и найдите файл:
cd /mnt/newmail/logoakademia.ru/michurinskiy@logoakademia.ru/cur/ ls -la | grep "1750837808.M991258P"
Если файл повреждён — удалите его:
rm "1750837808.M991258P..."
Или пересоздайте индексы Dovecot:
sudo doveadm kick michurinskiy@logoakademia.ru rm /path/to/user/*.index* rm /path/to/user/dovecot-uidlist
Проблема 5: Много подряд идущих входов в IMAP
Login: user=, method=PLAIN, rip=127.0.0.1 Login: user= , method=PLAIN, rip=127.0.0.1 Login: user= , method=PLAIN, rip=127.0.0.1
Решение: Это норма, не паникуйте
Современные почтовые клиенты (Thunderbird, Outlook, мобильные приложения) открывают несколько IMAP-соединений одновременно для ускорения синхронизации.
Каждое соединение — это отдельный Login в логе. Главное — они корректно завершаются (Disconnected: Logged out).
Комментарии
Пока нет комментариев. Будьте первым!