Категории

Улучшеный скрипт для анализа логов сервера через Zabbix

29.08.2025 10:46 | коды из категории: Linux

немного улучшил скрипт для анализа логов

про Улучшеный скрипт для анализа логов сервера через Zabbix

Хочешь знать, сколько раз в логе появилось слово error, fail или segmentation fault?
Хочешь, чтобы Zabbix сам это считал — без агентов, без сложных интеграций?

Вот простой, но надёжный скрипт, который превращает любой лог-файл в источник данных для Zabbix.

Зачем это нужно?

Логи — это первое место, куда смотришь при проблемах. Но проверять их вручную — не вариант.

Решение: автоматизировать подсчёт критичных строк и передавать результат в Zabbix.

Примеры использования:

Как это работает?

Скрипт принимает два параметра:

  1. Путь к лог-файлу (например, /var/log/auth.log)
  2. Ключевое слово или фраза (например, Failed password)

Он проверяет файл, ищет совпадения (с учётом регистра) и возвращает количество строк.

Zabbix вызывает этот скрипт через UserParameter — и получает число, которое можно графить, алертить и анализировать.

Улучшенный скрипт: zabbix-log-errors.sh

#!/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

Как установить?

Примеры использования

Ключ в 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?

Обычный grep | wc -l может:

Этот скрипт — надёжный интерфейс между Zabbix и логами.

Вывод

Всего 40 строк bash — и ты получаешь:

Установи один раз — и забудь про ручной просмотр логов при инцидентах.

Логи молчат только тогда, когда их не читают.

Подписывайся на блог. Следующий шаг — автоматические алерты и триггеры на основе этих данных.

Теги: #devops #linux #Безопасность #Zabbix #сервер #системное администрирование #мониторинг #логи #bash #скрипт #автоматизация #log monitoring #zabbix agent #userparameter #системный админ #ошибки в логах #grep #unix #инфраструктура #алерты

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку

Важно: Блог-эксперимент

Блог только запустил, все статьи генерирую через нейросеть т.к. лень, возможны ошибки. Просто чтобы вы знали и не запускали ядерный реактор по моим статьям ))
Если у вас есть вопросы, или Нашли неточность? пишите в коментах — вместе поправим и сделаем статью более качественной. Я лично объясню нюансы из практики.

Посетителей сегодня: 0


кто я | книга | контакты без контактов

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA