Pull to refresh

Автоматизация мониторинга: как заставить скрипты работать вместо вас

Level of difficultyEasy
Reading time5 min
Views7.1K

Привет, Хабр! Ручной мониторинг серверов и логов - это как разжигать костёр вместо использования микроволновки. Если вы вручную проверяете логи, доступность сервисов или реагируете на алерты посредством почты - попробуйте перейти на автоматизацию.

Почему скрипты?

  • Гибкость: кастомитазция проверки под свои нужды

  • Простота: запуск в cron или systemd - и можно с чистой душой забыть о проблеме

  • Самовосстановление: скрипт может не только найти проблему, но и исправить её (рестарт службы, чистка ненужных файлов, логов)

Автоматизированный мониторинг - это не про сложные системы в стиле Zabbix или Prometheus (они очень хороши для масштабируемых решений, данного факта не отрицаю). Это простые скрипты, которые делают ровно то, что вам нужно. Нет лишних зависимостей, сложных конфигов или чего-то лишнего.

Почему автоматизация мониторинга - крайне важный аспект

  • Экономия времени: скрипты работают 24/7, не уходят с работы, берут часть вашей рутинной работы на себя

  • Мгновенное оповещение: телеграм-бот напишет (и, возможно исправит) о проблеме раньше, чем пользователи могут начать жаловаться

  • Самовосстановление: скрипты могут исправить некоторые ошибки автоматически (рестарт служб, запуск служб, освобождение места на диске)

  • Практически полностью отсутствует человеческий фактор: скрипт не забудет проверить логи или отреагировать на алерт

Почему код может быть лучше готового софта для мониторинга?

Готовые системы мониторинга (Zabbix, Nagios) - крайне мощные инструменты, но иногда они могут быть избыточными для различных ситуаций. Скрипты оказываются удобнее, вот почему:

  1. Гибкость и кастомизация:

    • Готовые решения часто ограничены своим функционалом. Если вам требуется нестандартная проверка или особый формат уведомления - придётся искать плагины или громоздить костыли.

    • Скрипты делают только то, что нужно вам. Никакого лишнего функционала. Нужен парсинг специфичного лога? Никаких проблем. Необходимо, чтобы бот слал алерты? Легко.

  2. Легкость развёртывания:

    • Софт для мониторинга нередко требует настройки сервера, агента, БД.

    • Скрипты часто работают сразу: запустил - работает.

  3. Ноль лишних зависимостей:

    • Готовый софт может требовать Java, Docker и тд.

    • Bash/Python/PowerShell присутствует почти на любом сервере.

  4. Самовосстановление без сложной логики:

    • В Zabbix/Prometheus, автоисправление - это отдельная настройка.

    • В скрипте это 3 строки кода:

if service nginx status | grep -q "dead"; then
    systemctl restart nginx
fi

Когда скрипты могут быть наилучшим решением? В какой ситуации использовать?

  • Нет бюджета на лицензионный софт - бесплатные скрипты против платных лицензий.

  • Необходима быстрая проверка "здесь и сейчас" - не хотите разворачивать Prometheus ради одного сервера.

  • Нестандартные источники данных - мониторинг Arduino, кастомных API.

  • Автоматические действия - очистка кеша, рестарт служб, блокировка IP.

Что можно автоматизировать?

  • Мониторинг доступности сервисов (Python/PowerShell)

Простой пример скрипта на Python для проверки доступности сайта:

import requests

def check_website(url):
    try:
        response = requests.get(url, timeout=5)
        return response.status_code == 200
    except:
        return False

if not check_website("https://example.com"):
    print("Сайт недоступен!")  # Можно добавить отправку в Telegram

Аналог на PowerShell:

$url = "https://example.com"
try {
    $response = Invoke-WebRequest -Uri $url -TimeoutSec 5
    if ($response.StatusCode -ne 200) { Write-Host "Сайт недоступен!" }
} catch { Write-Host "Ошибка подключения!" }
  • Парсинг логов и алерты в Telegram (bash + gerp + cron)

Допустим, необходимо мониторить ошибки в nginx-логах и получать уведомления:

#!/bin/bash
LOG_FILE="/var/log/nginx/error.log"
TG_BOT_TOKEN="YOUR_TELEGRAM_BOT_TOKEN"
TG_CHAT_ID="YOUR_CHAT_ID"

ERRORS=$(grep -i "error\|failed" "$LOG_FILE" | tail -n 5)

if [ -n "$ERRORS" ]; then
    curl -s -X POST "https://api.telegram.org/bot$TG_BOT_TOKEN/sendMessage" \
        -d "chat_id=$TG_CHAT_ID" \
        -d "text=Обнаружены ошибки в логах Nginx: 
$ERRORS"
fi

Добавляем скрипт в cron (crontab -e):

*/5 * * * * /path/to/your/script.sh
  • Самовосстановление: автоматическое исправление проблем

Например, если диск заполнен на 90% - скрипт вычистит старые логи:

#!/bin/bash
THRESHOLD=90
USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')

if [ "$USAGE" -ge "$THRESHOLD" ]; then
    echo "Очистка диска..."
    find /var/log -type f -name "*.log" -mtime +7 -delete
    # Можно добавить уведомление в Telegram
fi

Возможность интеграции с Telegram для мгновенных алертов

Telegram — идеальный инструмент для уведомлений:

  • Бесплатно

  • Мгновенные push-уведомления

  • Поддержка ботов

Пример отправки сообщения через Python:

import requests

def send_telegram_alert(message):
    bot_token = "YOUR_BOT_TOKEN"
    chat_id = "YOUR_CHAT_ID"
    url = f"https://api.telegram.org/bot{bot_token}/sendMessage"
    payload = {"chat_id": chat_id, "text": message}
    requests.post(url, json=payload)

send_telegram_alert("Сервер перегружен! CPU > 90%")

Готовые примеры для автоматизации

  • Мониторинг нагрузки CPU:

import psutil, time

while True:
    cpu_load = psutil.cpu_percent(interval=1)
    if cpu_load > 80:
        print(f"Высокая загрузка CPU: {cpu_load}%")
        # Можно добавить отправку в Telegram
    time.sleep(60)
  • Автоматический рестарт службы:

$service = "nginx"
if ((Get-Service $service).Status -ne "Running") {
    Start-Service $service
    Send-MailMessage -To "admin@example.com" -Subject "Служба $service перезапущена" -Body "Служба была остановлена и перезапущена автоматически."
}
  • Мониторинг изменений в файлах:

sudo apt install inotify-tools  # Для Debian/Ubuntu

inotifywait -m /etc/nginx -e modify |
while read path action file; do
    echo "Файл $file был изменён! Отправляем алерт..."
    # Тут можно добавить отправку в Telegram
done

Заключение

  1. Скрипты идеальны для:

    • Нестандартных задач

    • Мгновенного реагирования

    • Простых инфраструктур

    • Сценариев "здесь и сейчас" (рестарт служб, блокировка IP)

  2. Крупный, готовый софт незаменим для:

    • Крупных распределённых систем

    • Сложных метрик

    • Централизованного управления

    • Долгосрочного использования и хранения данных

В итоге, выбор между готовыми системами мониторинга и скриптами зависит от конкретных задач и масштаба инфраструктуры. Скрипты отлично себя показывают в небольших проектах/сетях, где разворачивать полноценную систему мониторинга будет избыточно. Иногда проще закрыть задачу стандартными инструментами. С другой же стороны, в крупных системах без профессиональных решений вроде Zabbix не обойтись - они дают централизованное управление и глубокую аналитику.

Но это не значит, что выбирать нужно что-то одно. На практике, я часто встречал гибридные решения в стиле: базовый мониторинг через Nagios, который дополняется скриптами для нестандартных проверок или быстрого реагирования. Например, Zabbix может отслеживать общее состояние сервисов, а bash-скрипт - реагировать на критические ошибки в логах.

По итогу, главное - чтобы мониторинг работал эффективно. Если скрипты могут покрыть ваши задачи - отлично. Если инфраструктура растёт и требует сложных решений - всегда можно развернуть специализированные решения. Главное - не останавливаться на ручном контроле.

Буду рад обсудить ваше мнение на этот счёт в комментариях!

P.S. Я запустил свою группу в Телеграмм, буду рад видеть всех, кому интересен процесс написания скриптов и автоматизация в мире IT.

Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+3
Comments19

Articles