
Привет, Хабр! Ручной мониторинг серверов и логов - это как разжигать костёр вместо использования микроволновки. Если вы вручную проверяете логи, доступность сервисов или реагируете на алерты посредством почты - попробуйте перейти на автоматизацию.
Почему скрипты?
Гибкость: кастомитазция проверки под свои нужды
Простота: запуск в
cron
илиsystemd
- и можно с чистой душой забыть о проблемеСамовосстановление: скрипт может не только найти проблему, но и исправить её (рестарт службы, чистка ненужных файлов, логов)
Автоматизированный мониторинг - это не про сложные системы в стиле Zabbix или Prometheus (они очень хороши для масштабируемых решений, данного факта не отрицаю). Это простые скрипты, которые делают ровно то, что вам нужно. Нет лишних зависимостей, сложных конфигов или чего-то лишнего.
Почему автоматизация мониторинга - крайне важный аспект
Экономия времени: скрипты работают 24/7, не уходят с работы, берут часть вашей рутинной работы на себя
Мгновенное оповещение: телеграм-бот напишет (и, возможно исправит) о проблеме раньше, чем пользователи могут начать жаловаться
Самовосстановление: скрипты могут исправить некоторые ошибки автоматически (рестарт служб, запуск служб, освобождение места на диске)
Практически полностью отсутствует человеческий фактор: скрипт не забудет проверить логи или отреагировать на алерт
Почему код может быть лучше готового софта для мониторинга?
Готовые системы мониторинга (Zabbix, Nagios) - крайне мощные инструменты, но иногда они могут быть избыточными для различных ситуаций. Скрипты оказываются удобнее, вот почему:
Гибкость и кастомизация:
Готовые решения часто ограничены своим функционалом. Если вам требуется нестандартная проверка или особый формат уведомления - придётся искать плагины или громоздить костыли.
Скрипты делают только то, что нужно вам. Никакого лишнего функционала. Нужен парсинг специфичного лога? Никаких проблем. Необходимо, чтобы бот слал алерты? Легко.
Легкость развёртывания:
Софт для мониторинга нередко требует настройки сервера, агента, БД.
Скрипты часто работают сразу: запустил - работает.
Ноль лишних зависимостей:
Готовый софт может требовать Java, Docker и тд.
Bash/Python/PowerShell присутствует почти на любом сервере.
Самовосстановление без сложной логики:
В 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
Заключение
Скрипты идеальны для:
Нестандартных задач
Мгновенного реагирования
Простых инфраструктур
Сценариев "здесь и сейчас" (рестарт служб, блокировка IP)
Крупный, готовый софт незаменим для:
Крупных распределённых систем
Сложных метрик
Централизованного управления
Долгосрочного использования и хранения данных
В итоге, выбор между готовыми системами мониторинга и скриптами зависит от конкретных задач и масштаба инфраструктуры. Скрипты отлично себя показывают в небольших проектах/сетях, где разворачивать полноценную систему мониторинга будет избыточно. Иногда проще закрыть задачу стандартными инструментами. С другой же стороны, в крупных системах без профессиональных решений вроде Zabbix не обойтись - они дают централизованное управление и глубокую аналитику.
Но это не значит, что выбирать нужно что-то одно. На практике, я часто встречал гибридные решения в стиле: базовый мониторинг через Nagios, который дополняется скриптами для нестандартных проверок или быстрого реагирования. Например, Zabbix может отслеживать общее состояние сервисов, а bash-скрипт - реагировать на критические ошибки в логах.
По итогу, главное - чтобы мониторинг работал эффективно. Если скрипты могут покрыть ваши задачи - отлично. Если инфраструктура растёт и требует сложных решений - всегда можно развернуть специализированные решения. Главное - не останавливаться на ручном контроле.
Буду рад обсудить ваше мнение на этот счёт в комментариях!
P.S. Я запустил свою группу в Телеграмм, буду рад видеть всех, кому интересен процесс написания скриптов и автоматизация в мире IT.