Ответ
Однажды потребовалось автоматизировать обработку логов Nginx: анализировать топ-10 IP-адресов по количеству запросов, фильтровать ботов по User-Agent и отправлять отчет в Telegram.
Решение на bash + awk:
#!/bin/bash
LOG_FILE="/var/log/nginx/access.log"
TEMP_FILE="/tmp/nginx_analysis.tmp"
# Топ IP
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr | head -10 > $TEMP_FILE
# Фильтр ботов (пример)
grep -ivE "bot|crawler|spider" $LOG_FILE >> $TEMP_FILE
# Отправка в Telegram
curl -s -X POST "https://api.telegram.org/bot$BOT_TOKEN/sendMessage"
-d chat_id="$CHAT_ID"
-d text="$(cat $TEMP_FILE)"
Ключевые сложности:
- Обработка больших логов без зависаний
- Корректная фильтрация ботов (ложные срабатывания)
- Оптимизация вызовов
awk/sortдля скорости
Дополнительно добавил logrotate и крон для ежедневного выполнения.