Для чего нужен 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 позволяет выбрать формат логов, которые будут анализироваться. Вот что означают основные элементы интерфейса:
-
[SPACE] to toggle - [ENTER] to proceed - [q] to quit
- [SPACE]: Используйте пробел для выбора или снятия выбора с формата логов.
- [ENTER]: Подтверждает выбор и переходит к следующему шагу.
- [q]: Закрывает окно и завершает настройку.
-
Выбор форматов логов
В этом разделе вы можете выбрать формат логов, используемый вашим сервером. Ниже приводится описание каждого формата:-
[х] 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, включающие запросы и их ответы.
-
-
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
— агент пользователя.
- Строка формата логов, используемая для анализа. Содержит шаблон, который сопоставляет данные в логах с форматами GoAccess.
-
Date Format - [d] to add/edit format
- Формат даты в логах. Например,
%d/%b/%Y
соответствует18/Sep/2024
.
- Формат даты в логах. Например,
-
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 формате и потом открывать данный файл в браузере. Я буду использовать логи одного из своих сайтов передав отчет на другой веб-сервер, который скрыт от посторонних глаз.
Подготовка файлов и скриптов
-
Создайте каталог для хранения логов и отчетов:
mkdir -p /home/USER/stat
-
Создайте скрипт для объединения логов и создания 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
-
Сделайте скрипт исполняемым:
sudo chmod +x /home/USER/stat/merge_logs_and_create_report.sh
-
Создайте скрипт для передачи отчета на другой сервер:
Должно быть настроено подключение по ключу к удаленному серверу
Сохраните следующий код в файл nano /home/USER/stat/upload_report.sh
:
#!/bin/bash
# Путь к отчету
REPORT="/home/USER/stat/stat.html"
# Сервер и каталог назначения
DESTINATION="USER@SERVER.IP:/home/site/stat"
# Копирование отчета на удаленный сервер через SCP
scp -v $REPORT $DESTINATION
Сохраняем файл Ctrl+O , Enter, и закрываем Ctrl+X
-
Сделайте скрипт исполняемым:
chmod +x /home/USER/stat/upload_report.sh
Настройка cron-задач
-
Настройте cron-задачу для выполнения скрипта
merge_logs_and_create_report.sh
каждый час от имени root:Откройте crontab для root:
sudo crontab -e
Добавьте строку:
0 * * * * /home/USER/stat/merge_logs_and_create_report.sh
Эта строка будет запускать скрипт каждый час, в начале часа.
-
Настройте cron-задачу для передачи отчета на другой сервер от имени пользователя
USER
:Откройте crontab для пользователя
USER
:crontab -e
Добавьте строку:
10 * * * * /home/USER/stat/upload_report.sh
Эта строка будет запускать передачу отчета на другой сервер каждый час в 10 минут после начала часа.
Тестирование
-
Проверьте выполнение скрипта для объединения логов:
sudo /home/USER/stat/merge_logs_and_create_report.sh
Убедитесь, что файл
site_access.log
создается или обновляется корректно и отчетstat.html
генерируется. -
Проверьте передачу отчета на другой сервер:
/home/USER/stat/upload_report.sh
Убедитесь, что отчет успешно передается на удаленный сервер в указанный каталог.
Теперь система настроена на автоматическое обновление статистики и передачу отчета на другой сервер каждый час.
Комментарии