Для чего нужен GoAccess

GoAccess — это мощный инструмент для анализа веб-логов в реальном времени. Он помогает администратору сервера получить быструю и наглядную статистику о посетителях, страницах, ошибках и других важных параметрах работы веб-сайта, отображая данные в удобном интерфейсе прямо в терминале.

Установка GoAccess

Перед установкой GoAccess обновите список пакетов и выполните обновление системы:

sudo apt update && sudo apt upgrade -y

Затем выполните следующие команды для добавления репозитория GoAccess и его ключа:

wget -O - https://deb.goaccess.io/gnugpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/goaccess.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/goaccess.gpg arch=$(dpkg --print-architecture)] https://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/goaccess.list
sudo apt update && sudo apt upgrade -y

Теперь установите GoAccess:

sudo apt install goaccess

Просмотр статистики в терминале GoAccess

Для просмотра статистики с помощью GoAccess, укажите путь к лог-файлу:

sudo goaccess /var/log/nginx/name_site_access.log

После запуска команды будет показано меню:

    +---------------------------------------------------------------------+
    | Log Format Configuration                                            |
    | [SPACE] to toggle - [ENTER] to proceed - [q] to quit                |
    |                                                                     |
    | [х] NCSA Combined Log Format                                        |
    | [ ] NCSA Combined Log Format with Virtual Host                      |
    | [ ] Common Log Format (CLF)                                         |
    | [ ] Common Log Format (CLF) with Virtual Host                       |
    | [ ] W3C                                                             |
    | [ ] CloudFront (Download Distribution)                              |
    | [ ] Google Cloud Storage                                            |
    | [ ] AWS Elastic Load Balancing (HTTP/S)                             |
    | [ ] Squid Native Format                                             |
    | [ ] AWS Simple Storage Service (S3)                                 |
    | [ ] CADDY JSON Structured                                           |
    | [ ] AWS Application Load Balancer                                   |
    |                                                                     |
    | Log Format - [c] to add/edit format                                 |
    | %h %^[%d:%t %^] "%r" %s %b "%R" "%u"                                |
    |                                                                     |
    | Date Format - [d] to add/edit format                                |
    | %d/%b/%Y                                                            |
    |                                                                     |
    | Time Format - [t] to add/edit format                                |
    | %H:%M:%S                                                            |
    +---------------------------------------------------------------------+

Этот экран в GoAccess позволяет выбрать формат логов, которые будут анализироваться. Вот что означают основные элементы интерфейса:

  1. [SPACE] to toggle - [ENTER] to proceed - [q] to quit

    • [SPACE]: Используйте пробел для выбора или снятия выбора с формата логов.
    • [ENTER]: Подтверждает выбор и переходит к следующему шагу.
    • [q]: Закрывает окно и завершает настройку.
  2. Выбор форматов логов
    В этом разделе вы можете выбрать формат логов, используемый вашим сервером. Ниже приводится описание каждого формата:

    • [х] NCSA Combined Log Format
      Включает стандартные данные о посетителях, включая IP, дату, запрос, статус, количество переданных байтов, реферер и агент пользователя. Это один из наиболее распространенных форматов логов для веб-серверов.

    • [ ] NCSA Combined Log Format with Virtual Host
      Этот формат такой же, как и Combined, но добавляет информацию о виртуальных хостах, что полезно для серверов, которые обслуживают несколько доменов.

    • [ ] Common Log Format (CLF)
      Стандартный формат логов, который содержит базовую информацию: IP-адрес, дату и время, запрос, статус и количество переданных байтов. Без реферера и агента пользователя.

    • [ ] Common Log Format (CLF) with Virtual Host
      Расширенная версия CLF с поддержкой виртуальных хостов, полезна для многодоменных серверов.

    • [ ] W3C
      Формат логов, используемый в основном на серверах Microsoft IIS, позволяет легко анализировать данные с Windows-серверов.

    • [ ] CloudFront (Download Distribution)
      Логи с AWS CloudFront, включающие информацию о запросах к дистрибуции файлов.

    • [ ] Google Cloud Storage
      Формат логов для файлов, хранящихся в облачном хранилище Google, с подробной информацией о доступах.

    • [ ] AWS Elastic Load Balancing (HTTP/S)
      Логи с балансировщиков нагрузки AWS, которые показывают информацию о HTTP и HTTPS запросах.

    • [ ] Squid Native Format
      Логи, генерируемые прокси-сервером Squid, включающие запросы к кэшу и информацию о клиентах.

    • [ ] AWS Simple Storage Service (S3)
      Формат логов для AWS S3, показывает данные о запросах к объектам в хранилище.

    • [ ] CADDY JSON Structured
      Логи в структурированном формате JSON от веб-сервера Caddy.

    • [ ] AWS Application Load Balancer
      Логи с AWS Application Load Balancer, включающие запросы и их ответы.

  3. Log Format - [c] to add/edit format

    • Строка формата логов, используемая для анализа. Содержит шаблон, который сопоставляет данные в логах с форматами GoAccess.
      Пример: %h %^[%d:%t %^] "%r" %s %b "%R" "%u", где:
      • %h — IP-адрес клиента
      • %d:%t — дата и время запроса
      • %r — запрос (метод, URL и версия протокола)
      • %s — статус ответа
      • %b — размер ответа в байтах
      • %R — реферер
      • %u — агент пользователя.
  4. Date Format - [d] to add/edit format

    • Формат даты в логах. Например, %d/%b/%Y соответствует 18/Sep/2024.
  5. Time Format - [t] to add/edit format

    • Формат времени в логах. Например, %H:%M:%S соответствует 00:14:42.

Эти параметры позволяют GoAccess корректно интерпретировать и анализировать лог-файлы в нужном формате, обеспечивая точную статистику.

У меня стандартный вариант записи логов поэтому выбран первый пкнкт NCSA Combined Log Format

Если файлы логов сжаты в формате gzip, используйте следующую команду:

sudo zcat /var/log/nginx/name_site_access.log.* | sudo sudo goaccess --log-format=COMBINED --time-format=%H:%M:%S --date-format=%d/%b/%Y -a

В данном случае формат логов указывается в командной строке. Но все можно указать в файле конфигурации, чтобы не писать каждый раз.

Информация в заголовке GoAccess

После запуска GoAccess будет выведена информация состоящая из нескольких модулей. В верхней части интерфейса отображается общая статистика по логам:

Total Requests  37768 Unique Visitors  333 Requested Files 305  Referrers  0
Valid Requests  37766 Log Parsing Time 1s  Static Files    1479 Log Size   0.0   B
Failed Requests 2     Excl. IP Hits    0   Not Found       16   Tx. Amount 194.00 GiB

Пояснения:

  • Total Requests — Общее количество запросов, обработанных сервером. Это все запросы к ресурсу, включая страницы, изображения, стили и т.д.

  • Unique Visitors — Количество уникальных посетителей, которые зашли на сайт в течение времени, охваченного логами. Уникальные посетители определяются по IP-адресам или cookies.

  • Requested Files — Количество уникальных файлов, запрашиваемых пользователями. Это может включать страницы, изображения, скрипты и другие типы файлов.

  • Referrers — Количество уникальных источников переходов на сайт (рефереров). Эти данные показывают, откуда пришли пользователи, например, с других сайтов или поисковых систем.

  • Valid Requests — Количество корректно обработанных запросов. Это те запросы, которые не привели к ошибкам и соответствуют допустимым HTTP-ответам (например, 200, 301).

  • Log Parsing Time — Время, затраченное на парсинг лог-файлов GoAccess, измеряется в секундах. Показатель показывает, насколько быстро GoAccess обработал логи.

  • Static Files — Количество запросов к статическим файлам, таким как изображения, CSS, JavaScript и т.д. Это файлы, которые обычно не требуют обработки сервером.

  • Log Size — Общий размер файла логов, который анализировался. Показатель дает представление о размере анализируемых данных.

  • Failed Requests — Количество неудачных запросов, которые привели к ошибкам (например, 404 Not Found). Указывает на запросы, которые сервер не смог обработать.

  • Excl. IP Hits — Запросы, исключенные из анализа по определенным IP-адресам, например, внутренние или неинтересующие запросы.

  • Not Found — Количество запросов, приведших к ошибке 404 (страница не найдена). Этот показатель указывает на недоступные или отсутствующие ресурсы.

  • Tx. Amount — Общий объем переданных данных за время анализа. Показывает, сколько трафика было сгенерировано запросами.

Эти показатели дают подробное представление о посещаемости и работе вашего веб-сервера, помогая анализировать активность и оптимизировать производительность.

Далее идут модули со статистикой и значениями:

 Hits     h% Vis.     v% Tx. Amount Mtd Proto    Data
 ---- ------ ---- ------ ---------- --- -------- ----

значения:

  • Hits — общее количество попаданий (запросов) по конкретному элементу. Показывает, сколько раз запрашивалась данная страница, файл или ресурс.

  • h% — процент от общего числа запросов (Hits). Это процентное соотношение числа запросов к конкретному элементу относительно всех запросов.

  • Vis. — количество уникальных посетителей, которые запрашивали данный элемент. Учитывает каждого уникального посетителя.

  • v% — процент уникальных посетителей для данного элемента относительно общего числа посетителей. Помогает понять, насколько популярен элемент среди посетителей.

  • Tx. Amount — объем переданных данных (в байтах, килобайтах, мегабайтах и т.д.) для данного элемента. Это показатель трафика, генерируемого элементом.

  • Mtd — метод HTTP-запроса (например, GET, POST, HEAD). Показывает, каким методом был сделан запрос к серверу.

  • Proto — протокол, используемый в запросе (например, HTTP/1.1, HTTP/2). Указывает на используемую версию протокола HTTP, что может влиять на производительность и совместимость.

  • Data — запрашиваемые данные или URL. Это конкретный ресурс, который запрашивал посетитель (например, путь к файлу или странице).

Эти поля помогают детализировать информацию по каждому запросу, показывая не только количество и уникальность, но и объем переданных данных и способ обращения к серверу.

Ключевые модули

  • Unique visitors per day - Including spiders — уникальные посетители в день, включая поисковых роботов. Полезно для понимания общей посещаемости.
  • Requested Files (URLs) — запрошенные файлы (URL), показывает популярные страницы и файлы сайта.
  • Static Requests — запросы к статическим файлам (изображения, CSS, JavaScript). Позволяет понять нагрузку на сервер от статических ресурсов.
  • Not Found URLs (404s) — страницы, которые не были найдены. Важно для обнаружения битых ссылок.
  • Visitor Hostnames and IPs — хостнеймы и IP-адреса посетителей. Показывает, откуда приходят посетители.
  • Operating Systems — используемые операционные системы посетителей. Полезно для понимания аудитории.
  • Browsers — используемые браузеры. Помогает адаптировать сайт под популярные браузеры.
  • Time Distribution — распределение запросов по времени суток. Показывает периоды наибольшей нагрузки.
  • Referring Sites — сайты, с которых приходят посетители. Помогает выявить источники трафика.
  • HTTP Status Codes — коды HTTP-ответов сервера (200, 404, 500 и т.д.). Полезно для мониторинга работы сайта.
  • Geo Location - Геолокация посещавших IP-адресов

Навигация GoAccess

GoAccess позволяет легко перемещаться по различным разделам статистики с помощью клавиш на клавиатуре:

  • TAB для перемещения вперед по доступным модулям и SHIFT+TAB для перемещения назад.
  • F5 для обновления панели управления.
  • g для перехода в верхнюю часть экрана панели управления и G для перехода к последнему элементу на панели управления.
  • o или ENTER развернуть выбранный модуль.
  • j и k для прокрутки вниз и вверх в активном модуле.
  • s для отображения параметров сортировки для активного модуля.
  • / для поиска по всем модулям и n перехода к следующему совпадению.
  • 0-9 и SHIFT+0 быстро активировать соответствующий пронумерованный модуль.
  • ? для просмотра диалогового окна быстрой справки.
  • q выйти из программы.

Этот инструмент дает возможность быстро анализировать и устранять проблемы с веб-сайтом, улучшая его производительность и качество обслуживания пользователей.

Геолокация в отчетах GoAccess

Будет интересно знать откуда приходят пользователи, поэтому не лишним будет добавить сводку географических местоположений.

Поскольку мы находимся под санкциями официально не получить API-ключ доступа к базе данных. Поэтому будем грузить ее ручками, использую репозиторий гитхаба (мир не без добрых людей) https://github.com/P3TERX/GeoLite.mmdb/releases или из другого источника.

Скачать базу данных в нужный каталог запустив команду в этом каталоге:

wget https://github.com/P3TERX/GeoLite.mmdb/releases/download/2024.09.19/GeoLite2-City.mmdb

Узнать, где находится конфиг GoAccess

goaccess --dcf

Отредактировать конфиг sudo nano /etc/goaccess/goaccess.conf найдя строку #geoip-database раскомментировать и исправить путь, имя базы данных на свои.

Теперь появится модуль с данными какой стране принадлежит IP-адрес. И для наглядности карта при наведении на страну будут показатели посещений и хитов.

Карта с посетителями по странам

Файл конфигурации GoAccess

Для каждого лога веб серверов можно настроить свой конфиг GoAccess и потом вызывать в командной строке указывая его расположение. Используя ключ --config-file=/etc/goaccess/имя-конфига.conf

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

######################################
# Опции формата времени (обязательно)
######################################
#
# Час (24-часовой формат) [00,23]; ведущие нули допускаются, но не обязательны.
# Минуты [00,59]; ведущие нули допускаются, но не обязательны.
# Секунды [00,60]; ведущие нули допускаются, но не обязательны.
# См. `man strftime` для более подробной информации.
#
# Следующий формат времени работает с любым из
# форматов логов Apache/NGINX ниже.
#
#time-format %H:%M:%S
#
# Google Cloud Storage или
# Время в микросекундах с момента Unix-эпохи.
#
#time-format %f

# Родной формат логов Squid
#
#time-format %s

######################################
# Опции формата даты (обязательно)
######################################
#
# Переменная date-format, за которой следует пробел, задает
# формат даты в логах, содержащий любую комбинацию обычных
# символов и специальных спецификаторов формата. Все они начинаются
# со знака процента (%). См. `man strftime`.
#
# Следующий формат даты работает с любым из
# форматов логов Apache/NGINX ниже.
#
#date-format %d/%b/%Y
#
# AWS | Amazon CloudFront (Download Distribution)
# AWS | Elastic Load Balancing
# W3C (IIS)
#
#date-format %Y-%m-%d
#
# Google Cloud Storage или
# Время в микросекундах с момента Unix-эпохи.
#
#date-format %f

# Родной формат логов Squid
# Caddy
#
#date-format %s

######################################
# Опция формата даты/времени
######################################
#
# Переменная datetime-format, за которой следует пробел, задает
# формат даты и времени в логах, содержащий любую комбинацию обычных
# символов и специальных спецификаторов формата. Все они начинаются
# со знака процента (%). См. `man strftime`.
#
# Это дает возможность получить временную зону из запроса и
# преобразовать её в другую временную зону для вывода. См. --tz=<timezone> в
# руководстве пользователя.
#
#datetime-format %d/%b/%Y:%H:%M:%S %z

######################################
# Опции формата логов (обязательно)
######################################
#
# Переменная log-format, за которой следует пробел или \t для
# табуляции, задает строку формата лога.
#
# ЗАМЕТКА: Если время/дата записаны в виде временной метки в секундах или микросекундах,
# вместо %d и %t следует использовать %x для представления даты и времени.

# Формат логов NCSA Combined
#log-format %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

# Формат логов NCSA Combined с виртуальным хостом
#log-format %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u"

# Общий формат логов (CLF)
#log-format %h %^[%d:%t %^] "%r" %s %b

# Общий формат логов (CLF) с виртуальным хостом
#log-format %v:%^ %h %^[%d:%t %^] "%r" %s %b

# W3C
#log-format %d %t %h %^ %^ %^ %^ %r %^ %s %b %^ %^ %u %R

# Родной формат логов Squid
#log-format %^ %^ %^ %v %^: %x.%^ %~%L %h %^/%s %b %m %U

# AWS | Amazon CloudFront (Download Distribution)
#log-format %d\t%t\t%^\t%b\t%h\t%m\t%^\t%r\t%s\t%R\t%u\t%^

# Google Cloud Storage
#log-format "%x","%h",%^,%^,"%m","%U","%s",%^,"%b","%D",%^,"%R","%u"

# AWS | Elastic Load Balancing
#log-format %dT%t.%^ %^ %h:%^ %^ %T %^ %^ %^ %s %^ %b "%r" "%u"

# AWSS3 | Amazon Simple Storage Service (S3)
#log-format %^[%d:%t %^] %h %^"%r" %s %^ %b %^ %L %^ "%R" "%u"

# Формат логов Virtualmin с виртуальным хостом
#log-format %h %^ %v %^[%d:%t %^] "%r" %s %b "%R" "%u"

# Формат логов Kubernetes Nginx Ingress
#log-format %^ %^ [%h] %^ %^ [%d:%t %^] "%r" %s %b "%R" "%u" %^ %^ [%v] %^:%^ %^ %T %^ %^

# Структурированный JSON CADDY
#log-format {"ts":"%x.%^","request":{"client_ip":"%h","proto":"%H","method":"%m","host":"%v","uri":"%U","headers":{"User-Agent":["%u"],"Referer":["%R"]},"tls":{"cipher_suite":"%k","proto": "%K"}},"duration": "%T","size": "%b","status": "%s","resp_headers":{"Content-Type":["%M"]}}

# Формат CLF для Traefik
#log-format %h - %e [%d:%t %^] "%r" %s %b "%R" "%u" %^ "%v" "%U" %Lms

# В дополнение к указанию необработанных форматов логов/дат/времени, для
# упрощения можно использовать любое из следующих предопределенных имен форматов логов.
# GoAccess также может обрабатывать одно предопределенное имя в одной переменной и другое предопределенное
# имя в другой переменной.
#
#log-format COMBINED
#log-format VCOMBINED
#log-format COMMON
#log-format VCOMMON
#log-format W3C
#log-format SQUID
#log-format CLOUDFRONT
#log-format CLOUDSTORAGE
#log-format AWSELB
#log-format AWSS3
#log-format CADDY
#log-format TRAEFIKCLF

######################################
# UI Options
######################################

# Choose among color schemes
# 1 : Monochrome
# 2 : Green
# 3 : Monokai (if 256-colors supported)
#
#color-scheme 3

# Prompt log/date configuration window on program start.
#
config-dialog false# Подсветка активной панели.
#
hl-header true

# Укажите пользовательский CSS-файл в HTML-отчете.
#
#html-custom-css /path/file.css

# Укажите пользовательский JS-файл в HTML-отчете.
#
#html-custom-js /path/file.js

# Установите параметры HTML по умолчанию.
#
# ЗАМЕТКА: Требуется действующий JSON-объект.
# НЕ ИСПОЛЬЗУЙТЕ МНОГОЛИНИЙНЫЙ JSON-ОБЪЕКТ.
# Парсер будет разбирать только значение рядом с `html-prefs` (одна строка)
# Это позволяет настраивать каждый график панели. См. пример ниже.
#
#html-prefs {"theme":"bright","perPage":5,"layout":"horizontal","showTables":true,"visitors":{"plot":{"chartType":"bar"}}}

# Установите заголовок и название страницы HTML-отчета.
#
#html-report-title My Awesome Web Stats

# Форматируйте JSON-вывод с использованием табуляции и переводов строк.
#
json-pretty-print false

# Отключите цветной вывод. Это значение по умолчанию для
# терминалов, которые не поддерживают цвета.
# true  : без цветного вывода
# false : использовать цветовую схему
#
no-color false

# Не выводить имена столбцов в терминальном выводе. По умолчанию отображаются
# имена столбцов для каждой доступной метрики в каждой панели.
#
no-column-names false

# Отключить сводные метрики в CSV-выводе.
#
no-csv-summary false

# Отключить метрики прогресса.
#
no-progress false

# Отключить прокрутку панелей при нажатии TAB.
#
no-tab-scroll false

# Отключить метрики прогресса и индикатор разбора.
#
#no-parsing-spinner true

# Не показывать поле последнего обновления в сгенерированном HTML-отчете.
#
#no-html-last-updated true

# Выводит дату/время отчета в указанной временной зоне. Обратите внимание, что
# используется каноническое имя временной зоны. См. --datetime-format, чтобы
# правильно указать временную зону в формате даты/времени.
#
#tz Europe/Berlin

# Включить поддержку мыши на главной панели управления.
#
with-mouse false

# Максимальное количество элементов, отображаемых на панели.
# Заметка: Только CSV- и JSON-выводы допускают максимум, превышающий
# значение по умолчанию 366.
#
#max-items 366

# Пользовательские цвета для терминального вывода
# Настройте GoAccess в соответствии со своими предпочтениями.
#
# Синтаксис цветов:
# ОПРЕДЕЛЕНИЕ пробел/таб цветFG#:цветBG# [[атрибуты,] ПАНЕЛЬ]
#
# FG# = номер цвета переднего плана [-1...255] (-1 = цвет по умолчанию терминала)
# BG# = номер цвета фона [-1...255] (-1 = цвет по умолчанию терминала)
#
# Опционально:
#
# Можно применить атрибуты цвета, такие как:
# жирный, подчеркнутый, нормальный, обратный, мигающий.
# Несколько атрибутов разделяются запятыми.
#
# При желании можно применить пользовательские цвета для каждой панели, то есть метрика
# в панели ЗАПРОСЫ может иметь цвет A, тогда как та же метрика в
# панели БРАУЗЕРЫ может иметь цвет B.
#
# Следующая схема — это 256-цветная схема (гибридная палитра)
#
#color COLOR_MTRC_HITS              color110:color-1
#color COLOR_MTRC_VISITORS          color173:color-1
#color COLOR_MTRC_DATA              color221:color-1
#color COLOR_MTRC_BW                color167:color-1
#color COLOR_MTRC_AVGTS             color143:color-1
#color COLOR_MTRC_CUMTS             color247:color-1
#color COLOR_MTRC_MAXTS             color186:color-1
#color COLOR_MTRC_PROT              color109:color-1
#color COLOR_MTRC_MTHD              color139:color-1
#color COLOR_MTRC_HITS_PERC         color186:color-1
#color COLOR_MTRC_HITS_PERC_MAX     color139:color-1
#color COLOR_MTRC_HITS_PERC_MAX     color139:color-1 VISITORS
#color COLOR_MTRC_HITS_PERC_MAX     color139:color-1 OS
#color COLOR_MTRC_HITS_PERC_MAX     color139:color-1 BROWSERS
#color COLOR_MTRC_HITS_PERC_MAX     color139:color-1 VISIT_TIMES
#color COLOR_MTRC_VISITORS_PERC     color186:color-1
#color COLOR_MTRC_VISITORS_PERC_MAX color139:color-1
#color COLOR_PANEL_COLS             color243:color-1
#color COLOR_BARS                   color250:color-1
#color COLOR_ERROR                  color231:color167
#color COLOR_SELECTED               color7:color167
#color COLOR_PANEL_ACTIVE           color7:color237
#color COLOR_PANEL_HEADER           color250:color235
#color COLOR_PANEL_DESC             color242:color-1
#color COLOR_OVERALL_LBLS           color243:color-1
#color COLOR_OVERALL_VALS           color167:color-1
#color COLOR_OVERALL_PATH           color186:color-1
#color COLOR_ACTIVE_LABEL           color139:color235 bold underline
#color COLOR_BG                     color250:color-1
#color COLOR_DEFAULT                color243:color-1
#color COLOR_PROGRESS               color7:color110
######################################
# Опции сервера
######################################

# Укажите IP-адрес для привязки сервера.
#
#addr 0.0.0.0

# Запустите GoAccess как демона (если включен --real-time-html).
#
#daemonize false

# Убедитесь, что клиенты отправляют указанный заголовок origin при
# рукопожатии WebSocket.
#
#origin http://example.org

# Порт, к которому пытается подключиться соединение.
# По умолчанию сервер WebSocket GoAccess слушает порт 7890.
# См. страницу man или http://gwsocket.io для подробностей.
#
#port 7890

# Запишите PID в файл при использовании вместе с опцией daemonize.
#
#pid-file /var/run/goaccess.pid

# Включите вывод HTML в реальном времени.
#
#real-time-html true

# Путь к сертификату TLS/SSL.
# Обратите внимание, что ssl-cert и ssl-key необходимо использовать для
# включения TLS/SSL.
#
#ssl-cert /path/ssl/domain.crt

# Путь к частному ключу TLS/SSL.
# Обратите внимание, что ssl-cert и ssl-key необходимо использовать для
# включения TLS/SSL.
#
#ssl-key /path/ssl/domain.key

# URL, на который отвечает сервер WebSocket. Это URL, который
# передается конструктору WebSocket на стороне клиента.
#
# Опционально можно указать схему URI WebSocket, такую как ws://
# или wss:// для незащищенных и защищенных соединений.
# Например, ws-url wss://goaccess.io
#
# Если GoAccess работает за прокси, вы можете настроить клиент
# на подключение к другому порту, указав хост, за которым следует
# двоеточие и порт.
# Например, ws-url goaccess.io:9999
#
# По умолчанию он попытается подключиться к localhost. Если GoAccess
# работает на удаленном сервере, здесь следует указать хост удаленного сервера.
# Также убедитесь, что это действительный хост, а не http-адрес.
#
#ws-url goaccess.io

# Путь для чтения именованного канала (FIFO).
#
#fifo-in /tmp/wspipein.fifo

# Путь для записи в именованный канал (FIFO).
#
#fifo-out /tmp/wspipeout.fifo

######################################
# Опции файлов
######################################

# Укажите путь к входному лог-файлу. Если указано, он будет
# иметь приоритет над -f из командной строки.
#
#log-file /var/log/apache2/access.log

# Отправляйте все отладочные сообщения в указанный файл.
#
#debug-file debug.log

# Укажите пользовательский файл конфигурации для использования. Если указано,
# он будет иметь приоритет над глобальным файлом конфигурации (если он есть).
#
#config-file <filename>

# Логируйте недействительные запросы в указанный файл.
#
#invalid-requests <filename>

# Не загружать глобальный файл конфигурации.
#
#no-global-config false
######################################
# Опции парсинга
######################################

# Включить список пользовательских агентов по хосту. Для более быстрого парсинга
# не включайте этот флаг.
#
agent-list false

# Включить разрешение IP в выводе HTML|JSON|CSV.
#
with-output-resolver false

# Исключить IPv4 или IPv6 из подсчета.
# Диапазоны также могут быть включены, используя тире между
# IP-адресами (начало-конец).
#
#exclude-ip 127.0.0.1
#exclude-ip 192.168.0.1-192.168.0.100
#exclude-ip ::1
#exclude-ip 0:0:0:0:0:ffff:808:804-0:0:0:0:0:ffff:808:808

# Включить метод HTTP-запроса, если найден. Это создаст
# ключ запроса, содержащий метод запроса + фактический запрос.
#
# <yes|no> [по умолчанию: yes]
#
http-method yes

# Включить протокол HTTP-запроса, если найден. Это создаст
# ключ запроса, содержащий протокол запроса + фактический запрос.
#
# <yes|no> [по умолчанию: yes]
#
http-protocol yes

# Запишите вывод в stdout, указав один из следующих файлов и соответствующее
# расширение для формата вывода:
#
# /path/file.csv  - Значения, разделенные запятыми (CSV)
# /path/file.json - JSON (JavaScript Object Notation)
# /path/file.html - HTML
#
# output /path/file.html

# Игнорировать строку запроса запроса.
# т.е.,  www.google.com/page.htm?query => www.google.com/page.htm
#
# Примечание: Удаление строки запроса может значительно уменьшить
# потребление памяти, особенно при временных запросах.
#
no-query-string false

# Отключить разрешение IP в терминальном выводе.
#
no-term-resolver false

# Рассматривать нестандартный код состояния 444 как 404.
#
444-as-404 false

# Добавить ошибки клиента 4xx к количеству уникальных посетителей.
#
4xx-to-unique-count false

# Анонимизация IP-адресов
# Опция анонимизации IP устанавливает последний октет IPv4 пользовательских IP-адресов и
# последние 80 бит IPv6 адресов в нули.
# т.е., 192.168.20.100 => 192.168.20.0
# т.е., 2a03:2880:2110:df07:face:b00c::1 => 2a03:2880:2110:df07::
#
#anonymize-ip false

# Включить статические файлы, содержащие строку запроса, в панели статических файлов.
# т.е., /fonts/fontawesome-webfont.woff?v=4.0.3
#
all-static-files false

# Включить дополнительный разделенный список браузеров/краулеров/ленточек и т.д.
# См. config/browsers.list для примера или
# https://raw.githubusercontent.com/allinurl/goaccess/master/config/browsers.list
#
#browsers-file <filename>

# Спецификация даты. Возможные значения: `date` (по умолчанию), или `hr` или `min`.
#
#date-spec hr|min

# Декодировать дважды закодированные значения.
#
double-decode false

# Включить парсинг/отображение указанной панели.
#
#enable-panel VISITORS
#enable-panel REQUESTS
#enable-panel REQUESTS_STATIC
#enable-panel NOT_FOUND
#enable-panel HOSTS
#enable-panel OS
#enable-panel BROWSERS
#enable-panel VISIT_TIMES
#enable-panel VIRTUAL_HOSTS
#enable-panel REFERRERS
#enable-panel REFERRING_SITES
#enable-panel KEYPHRASES
#enable-panel STATUS_CODES
#enable-panel REMOTE_USER
#enable-panel CACHE_STATUS
#enable-panel GEO_LOCATION
#enable-panel MIME_TYPE
#enable-panel TLS_TYPE
# Скрыть реферер, но все равно учитывать его. Разрешены подстановочные знаки. т.е., *.bing.com
#
#hide-referrer *.google.com
#hide-referrer bing.com

# Спецификация часа. Возможные значения: `hr` (по умолчанию) или `min` (десятая
# часть минуты).
#
#hour-spec min

# Игнорировать краулеры при подсчете.
# Это проигнорирует роботов, указанных в browsers.c
# Обратите внимание, что они будут учитываться в общем
# количестве запросов, но исключены из любых панелей.
#
ignore-crawlers false

# Парсить и отображать только краулеры.
# Это проигнорирует все хосты, кроме роботов, указанных в browsers.c
# Обратите внимание, что они будут учитываться в общем
# количестве запросов, но исключены из любых панелей.
#
crawlers-only false

# Неизвестные браузеры и ОС считаются краулерами.
#
unknowns-as-crawlers false

# Игнорировать запросы статических файлов.
# req : Игнорировать только запросы из допустимых запросов
# panels : Игнорировать запросы из панелей.
# Обратите внимание, что они будут учитываться в общем количестве запросов.
# ignore-statics req

# Игнорировать парсинг и отображение указанной панели.
#
#ignore-panel VISITORS
#ignore-panel REQUESTS
#ignore-panel REQUESTS_STATIC
#ignore-panel NOT_FOUND
#ignore-panel HOSTS
#ignore-panel OS
#ignore-panel BROWSERS
#ignore-panel VISIT_TIMES
#ignore-panel VIRTUAL_HOSTS
ignore-panel REFERRERS
#ignore-panel REFERRING_SITES
ignore-panel KEYPHRASES
#ignore-panel STATUS_CODES
#ignore-panel REMOTE_USER
#ignore-panel CACHE_STATUS
#ignore-panel GEO_LOCATION
#ignore-panel MIME_TYPE
#ignore-panel TLS_TYPE

# Игнорировать рефереры при подсчете.
# Поддерживаются подстановочные знаки. Например,
# '*' соответствует 0 или более символам (включая пробелы)
# '?' соответствует ровно одному символу.
#
#ignore-referrer *.domain.com
#ignore-referrer ww?.domain.*

# Игнорировать парсинг и отображение одного или нескольких кодов состояния.
#
#ignore-status 400
#ignore-status 502

# Хранить указанное количество последних дней в хранилище. Это переработает
# таблицы хранения. т.е., хранить и показывать только последние 7 дней.
#
# keep-last 7

# Отключить валидацию IP клиента. Полезно, если IP-адреса были
# замаскированы перед записью.
#
# no-ip-validation true

# Количество строк из access log, которые нужно протестировать по указанному
# формату логов/даты/времени. По умолчанию парсер настроен на тестирование 10
# строк. Если установить значение 0, парсер не будет тестировать
# никакие строки и будет парсить весь access log.
#
#num-tests 10

# Парсить лог и выйти без вывода данных.
#
#process-and-exit false

# Отображать реальные названия ОС. т.е., Windows XP, Snow Leopard.
#
real-os true

# Сортировка панели при первоначальной загрузке.
# Опции сортировки разделены запятой.
# Опции имеют вид: PANEL,METRIC,ORDER
#
# Доступные метрики:
#  BY_HITS     - Сортировать по хитам
#  BY_VISITORS - Сортировать по уникальным посетителям
#  BY_DATA     - Сортировать по данным
#  BY_BW       - Сортировать по пропускной способности
#  BY_AVGTS    - Сортировать по среднему времени обслуживания
#  BY_CUMTS    - Сортировать по накопленному времени обслуживания
#  BY_MAXTS    - Сортировать по максимальному времени обслуживания
#  BY_PROT     - Сортировать по протоколу http
#  BY_MTHD     - Сортировать по методу http
# Доступные порядки:
#  ASC
#  DESC
#
#sort-panel VISITORS,BY_DATA,ASC
#sort-panel REQUESTS,BY_HITS,ASC
#sort-panel REQUESTS_STATIC,BY_HITS,ASC
#sort-panel NOT_FOUND,BY_HITS,ASC
#sort-panel HOSTS,BY_HITS,ASC
#sort-panel OS,BY_HITS,ASC
#sort-panel BROWSERS,BY_HITS,ASC
#sort-panel VISIT_TIMES,BY_DATA,DESC
#sort-panel VIRTUAL_HOSTS,BY_HITS,ASC
#sort-panel REFERRERS,BY_HITS,ASC
#sort-panel REFERRING_SITES,BY_HITS,ASC
#sort-panel KEYPHRASES,BY_HITS,ASC
#sort-panel STATUS_CODES,BY_HITS,ASC
#sort-panel REMOTE_USER,BY_HITS,ASC
#sort-panel CACHE_STATUS,BY_HITS,ASC
#sort-panel GEO_LOCATION,BY_HITS,ASC
#sort-panel MIME_TYPE,BY_HITS,ASC
#sort-panel TLS_TYPE,BY_HITS,ASC

# Рассматривать следующие расширения как статические файлы
# Реальная '.' обязательна и расширения чувствительны к регистру.
# Для полного списка раскомментируйте менее распространенные статические расширения ниже.
#
static-file .css
static-file .js
static-file .jpg
static-file .png
static-file .gif
static-file .ico
static-file .jpeg
static-file .pdf
static-file .csv
static-file .mpeg
static-file .mpg
static-file .swf
static-file .woff
static-file .woff2
static-file .xls
static-file .xlsx
static-file .doc
static-file .docx
static-file .ppt
static-file .pptx
static-file .txt
static-file .zip
static-file .ogg
static-file .mp3
static-file .mp4
static-file .exe
static-file .iso
static-file .gz
static-file .rar
static-file .svg
static-file .bmp
static-file .tar
static-file .tgz
static-file .tiff
static-file .tif
static-file .ttf
static-file .flv
static-file .dmg
static-file .xz
static-file .zst
#static-file .less
#static-file .ac3
#static-file .avi
#static-file .bz2
#static-file .class
#static-file .cue
#static-file .dae
#static-file .dat
#static-file .dts
#static-file .ejs
#static-file .eot
#static-file .eps
#static-file .img
#static-file .jar
#static-file .map
#static-file .mid
#static-file .midi
#static-file .ogv
#static-file .webm
#static-file .mkv
#static-file .odp
#static-file .ods
#static-file .odt
#static-file .otf
#static-file .pict
#static-file .pls
#static-file .ps
#static-file .qt
#static-file .rm
#static-file .svgz
#static-file .wav
#static-file .webp

######################################
# Опции GeoIP
# Только если настроено с --enable-geoip
######################################

# Чтобы использовать базу данных через GeoIP Legacy или GeoIP2, вам необходимо использовать
# флаг geoip-database ниже.
#
# === GeoIP Legacy
# Устаревший GeoIP больше не поддерживается. Если ваша дистрибуция GNU+Linux не поставляет
# устаревшие базы данных, вы все равно сможете найти их через
# разные источники. Убедитесь, что вы скачали файлы .dat.
#
# Распространяется с лицензией Creative Commons Attribution-ShareAlike 4.0 International License.
# https://mailfud.org/geoip-legacy/

# База данных страны IPv4:
# Скачайте GeoIP.dat.gz
# gunzip GeoIP.dat.gz
#
# База данных города IPv4:
# Скачайте GeoIPCity.dat.gz
# gunzip GeoIPCity.dat.gz

# Стандартная база данных GeoIP для меньшего потребления памяти (GeoIP Legacy).
#
#std-geoip false

# === GeoIP2
# Для баз данных GeoIP2 вы можете использовать базы данных DB-IP Lite.
# DB-IP лицензируется под лицензией Creative Commons Attribution 4.0 International License.
# https://db-ip.com/db/lite.php

# Или вы можете скачать их от MaxMind
# https://dev.maxmind.com/geoip/geoip2/geolite2/

# Для базы данных GeoIP2 City:
# Скачайте GeoLite2-City.mmdb.gz
# gunzip GeoLite2-City.mmdb.gz
#
# Для базы данных GeoIP2 Country:
# Скачайте GeoLite2-Country.mmdb.gz
# gunzip GeoLite2-Country.mmdb.gz
#
#geoip-database /usr/local/share/GeoIP/GeoLiteCity.dat
geoip-database /home/USER/stat/GeoLite2-City.mmdb
######################################
# Опции постоянства
######################################

# Путь, по которому хранятся файлы базы данных на диске.
# Значение по умолчанию - директория /tmp.
#db-path /tmp

# Сохранять разобранные данные на диск.
#persist true

# Загружать ранее сохраненные данные с диска.
# Файлы базы данных должны существовать. См. `persist`.
#restore true

Пример использования HTML отчета GoAccess

Для того чтобы получать красивый отчет по статистике посещения сайта можно использовать формирование отчета в HTML формате и потом открывать данный файл в браузере. Я буду использовать логи одного из своих сайтов передав отчет на другой веб-сервер, который скрыт от посторонних глаз.

Подготовка файлов и скриптов

  1. Создайте каталог для хранения логов и отчетов:

    mkdir -p /home/USER/stat
    
  2. Создайте скрипт для объединения логов и создания HTML-отчета:

Объединим все логи относящиеся к сайту даже те которые в архиве. Изменить время хранения логов до 30 дней вместо по умолчанию 14 дней сделав изменения написанные здесь - Настройка конфигурации logrotate для Nginx или на свое усмотрение, смотря за какой период нужна статистика.

Сохраните следующий код в файл nano /home/USER/stat/merge_logs_and_create_report.sh:

#!/bin/bash

# Пути к файлам логов и отчету
LOG_DIR="/var/log/nginx"
ALL_LOG="/home/USER/stat/site_access.log"
REPORT="/home/USER/stat/stat.html"

# Создание или очистка общего файла логов
> $ALL_LOG

# Объединение всех файлов логов (обычных и архивированных) в один
# Добавление обычного лог-файла
cat $LOG_DIR/site_access.log >> $ALL_LOG

# Добавление дневного лога
cat $LOG_DIR/site_access.log.1 >> $ALL_LOG

# Добавление всех архивов
for file in $LOG_DIR/site_access.log.*.gz; do
    if [ -f "$file" ]; then
        zcat "$file" >> $ALL_LOG
    fi
done

# Создание HTML-отчета GoAccess
goaccess $ALL_LOG --log-format=COMBINED --date-format=%d/%b/%Y --time-format=%H:%M:%S -o $REPORT

# Изменение прав на отчет для пользователя USER и группы www-data
chown USER:www-data $REPORT

Сохраняем файл Ctrl+O , Enter, и закрываем Ctrl+X

  1. Сделайте скрипт исполняемым:

    sudo chmod +x /home/USER/stat/merge_logs_and_create_report.sh
    
  2. Создайте скрипт для передачи отчета на другой сервер:

Должно быть настроено подключение по ключу к удаленному серверу

Сохраните следующий код в файл nano /home/USER/stat/upload_report.sh:

#!/bin/bash

# Путь к отчету
REPORT="/home/USER/stat/stat.html"

# Сервер и каталог назначения
DESTINATION="[email protected]:/home/site/stat"

# Копирование отчета на удаленный сервер через SCP
scp -v $REPORT $DESTINATION

Сохраняем файл Ctrl+O , Enter, и закрываем Ctrl+X

  1. Сделайте скрипт исполняемым:

    chmod +x /home/USER/stat/upload_report.sh
    

Настройка cron-задач

  1. Настройте cron-задачу для выполнения скрипта merge_logs_and_create_report.sh каждый час от имени root:

    Откройте crontab для root:

    sudo crontab -e
    

    Добавьте строку:

    0 * * * * /home/USER/stat/merge_logs_and_create_report.sh
    

    Эта строка будет запускать скрипт каждый час, в начале часа.

  2. Настройте cron-задачу для передачи отчета на другой сервер от имени пользователя USER:

    Откройте crontab для пользователя USER:

    crontab -e
    

    Добавьте строку:

    10 * * * * /home/USER/stat/upload_report.sh
    

    Эта строка будет запускать передачу отчета на другой сервер каждый час в 10 минут после начала часа.

Тестирование

  1. Проверьте выполнение скрипта для объединения логов:

    sudo /home/USER/stat/merge_logs_and_create_report.sh
    

    Убедитесь, что файл site_access.log создается или обновляется корректно и отчет stat.html генерируется.

  2. Проверьте передачу отчета на другой сервер:

    /home/USER/stat/upload_report.sh
    

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

Теперь система настроена на автоматическое обновление статистики и передачу отчета на другой сервер каждый час.