скрипт в забикс агент, чтобы анализировать логи на количество ошибок
Сегодня я покажу, как настроить простой, но мощный мониторинг логов Nextcloud с помощью Zabbix. Это позволит вам видеть ошибки в реальном времени, получать алерты и быстро находить проблемы.
Создать систему, которая:
Создайте скрипт, который будет считать количество вхождений ключевых слов в логах.
#!/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
Добавьте пользовательский параметр в конфиг Zabbix:
UserParameter=log.errors[*],/usr/local/bin/zabbix-log-errors.sh "$1" "$2"
Сохраните в /etc/zabbix/zabbix_agentd.conf и перезапустите агент:
sudo systemctl restart zabbix-agent
В интерфейсе 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] | Ошибки базы данных |
Создайте триггер, чтобы получать уведомления при появлении ошибок:
{HOST:log.errors[/var/log/nextcloud/nextcloud.log,Exception].last()} > 0
Создайте дашборд с виджетом "Значение элемента данных" или таблицей, чтобы видеть все ошибки сразу.
Вы получили полноценный микрологсервер, который:
Такой подход позволяет легко контролировать состояние вашего Nextcloud-сервера без сложных инструментов. Используйте этот шаблон для мониторинга других сервисов: почтовых серверов, веб-серверов, баз данных.
Для мониторинга почтовых серверов (Dovecot, Postfix, Roundcube) используйте:
Authentication failure, Login failed, read failedreject_unauth_destination, timeout, deferredError, Session timeoutНастройка почтового сервера (Postfix + Dovecot) часто сопровождается "странными" ошибками в логах. Вот реальные проблемы, с которыми я столкнулся, и как их решил.
При попытке считать количество строк в /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
Файл /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 версий, старые — сжиматься.
Хочется обнулить лог, но просто 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 продолжит писать в него.
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
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).
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!