Справочник системных ошибок и решений

Windows Server, Active Directory, 1С:Предприятие, СУБД, Linux, Cisco, MikroTik, Asterisk.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты на сайте предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, программного обеспечения, баз данных, сетевого оборудования и других компонентов инфраструктуры. Перед выполнением действий создайте резервную копию и по возможности протестируйте изменения в безопасной среде. Пользователь самостоятельно оценивает риски и несет ответственность за результат. При отсутствии необходимых знаний обратитесь к квалифицированному ИТ-специалисту.

ACCESS_LOG_ANALYSIS Linux / DevOps

Анализ логов Nginx: визуализация через GoAccess и парсинг в Logstash

Обновлено: 21.08.2026
  • Необходимость быстро выявить IP-адреса ботов, атакующих сайт HTTP-флудом.
  • Поиск самых медленных эндпоинтов API (анализ переменной $request_time).
  • Отсутствие наглядной аналитики кодов ответов (4xx, 5xx), рефереров и браузеров в реальном времени.

1. Настройка расширенного формата логов Nginx

Добавьте формат json_analytics в /etc/nginx/nginx.conf:

http {
    log_format json_analytics escape=json
      '{"time_local":"$time_local",'
      '"remote_addr":"$remote_addr",'
      '"request_method":"$request_method",'
      '"request_uri":"$request_uri",'
      '"status":$status,'
      '"body_bytes_sent":$body_bytes_sent,'
      '"request_time":$request_time,'
      '"upstream_response_time":"$upstream_response_time",'
      '"http_referrer":"$http_referer",'
      '"http_user_agent":"$http_user_agent"}';

    access_log /var/log/nginx/analytics.log json_analytics;
}

2. Анализ и генерация Real-Time дашборда через GoAccess

# Установка GoAccess
apt-get install -y goaccess || dnf install -y goaccess

# Консольный интерактивный режим
goaccess /var/log/nginx/access.log --log-format=COMBINED

# Генерация автономного HTML отчета в реальном времени через WebSocket
goaccess /var/log/nginx/access.log --log-format=COMBINED \
  --real-time-html --ws-url=wss://status.itstm.ru:7890 \
  -o /var/www/html/report.html --daemon

3. Конфигурация пайплайна Logstash для парсинга JSON логов Nginx

Создайте файл /etc/logstash/conf.d/10-nginx.conf:

input {
  file {
    path => "/var/log/nginx/analytics.log"
    codec => "json"
    type => "nginx_access"
  }
}

filter {
  mutate {
    convert => { 
      "request_time" => "float"
      "status" => "integer"
      "body_bytes_sent" => "integer"
    }
  }
  geoip {
    source => "remote_addr"
    target => "geoip"
  }
}

output {
  elasticsearch {
    hosts => ["http://elasticsearch:9200"]
    index => "nginx-access-%{+YYYY.MM.dd}"
  }
}
💡 Практика специалистов: Использование формата escape=json в Nginx предотвращает повреждение логов спецсимволами в User-Agent и URL, исключая сбои парсинга в Elasticsearch/ClickHouse/Vector.

Частые вопросы (FAQ)

В чем разница между метриками $request_time и $upstream_response_time в Nginx?

$request_time — полное время обработки запроса с момента получения первых байт от клиента до отправки последнего байта ответа. $upstream_response_time — время ожидания ответа непосредственно от бэкенда (PHP/NodeJS).

Как в GoAccess отфильтровать внутренние IP-адреса и мониторинг?

Используйте параметр --ignore-ip=127.0.0.1 --ignore-ip=10.0.0.0/8 или параметр --ignore-crawlers для исключения поисковых ботов.

Полезные материалы
Рекомендуем