немного улучшил скрипт для анализа логов
Хочешь знать, сколько раз в логе появилось слово error, fail или segmentation fault?
Хочешь, чтобы Zabbix сам это считал — без агентов, без сложных интеграций?
Вот простой, но надёжный скрипт, который превращает любой лог-файл в источник данных для Zabbix.
Логи — это первое место, куда смотришь при проблемах. Но проверять их вручную — не вариант.
Решение: автоматизировать подсчёт критичных строк и передавать результат в Zabbix.
Примеры использования:
Failed password в /var/log/auth.logerror и fail в /var/log/syslog502 Bad Gateway в логах Nginxdisk full или OOM killer в системных логахСкрипт принимает два параметра:
/var/log/auth.log)Failed password)Он проверяет файл, ищет совпадения (с учётом регистра) и возвращает количество строк.
Zabbix вызывает этот скрипт через UserParameter — и получает число, которое можно графить, алертить и анализировать.
#!/bin/bash
# zabbix-log-errors.sh - Подсчёт вхождений ключевой фразы в лог-файл
# Использование в zabbix_agentd.conf:
# UserParameter=log.errors[*], /usr/local/bin/zabbix-log-errors.sh "$1" "$2"
LOG_FILE="$1"
KEYWORD="$2"
# --- Валидация входных данных ---
if [ -z "$LOG_FILE" ] || [ -z "$KEYWORD" ]; then
echo 0
exit 0
fi
# Убираем лишние пробелы
LOG_FILE=$(echo "$LOG_FILE" | xargs)
KEYWORD=$(echo "$KEYWORD" | xargs)
if [ ! -r "$LOG_FILE" ]; then
# Файл не существует или нет прав на чтение
echo 0
exit 0
fi
# --- Экранирование для безопасного использования в grep ---
if [[ "$KEYWORD" =~ [|^$.*+?()[\]{}] ]]; then
# Это регулярное выражение
COUNT=$(grep -i -E "$KEYWORD" "$LOG_FILE" 2>/dev/null | wc -l)
else
# Это обычная строка — безопаснее использовать -F
COUNT=$(grep -i -F "$KEYWORD" "$LOG_FILE" 2>/dev/null | wc -l)
fi
# Выводим результат (целое число)
echo "${COUNT:-0}"
exit 0
grep -F — если ключевое слово простое (без спецсимволов),grep -E — если это регулярное выражение (содержит |, ^, * и т.п.).2>/dev/null), чтобы не мусорить в лог Zabbix.| Ключ в Zabbix | Что проверяет |
|---|---|
log.errors["/var/log/auth.log", "Failed password"] |
Попытки входа по SSH |
log.errors["/var/log/syslog", "error|fail|fatal"] |
Критические ошибки в системе |
log.errors["/var/log/kern.log", "I/O error"] |
Проблемы с дисками |
log.errors["/var/log/nginx/error.log", "50[0-9]"] |
Ошибки 5xx в Nginx |
log.errors["/var/log/mysql/error.log", "disk full"] |
Нехватка места у MySQL |
Обычный grep | wc -l может:
Этот скрипт — надёжный интерфейс между Zabbix и логами.
Всего 40 строк bash — и ты получаешь:
Установи один раз — и забудь про ручной просмотр логов при инцидентах.
Логи молчат только тогда, когда их не читают.
Подписывайся на блог. Следующий шаг — автоматические алерты и триггеры на основе этих данных.
Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.
Комментарии
Пока нет комментариев. Будьте первым!