В отличие от Яндекс.Метрики и Google Analytics, GoAccess позволяет увидеть статистику посещений веб-сайта в реальном времени включая не только браузеры, а вообще все посещения, в том числе боты, парсеры, curl и т.д.
Установка
Установить пакет GoAccess можно прямо из репозитория, но скорее всего там будет далеко не самая свежая версия. Так что лучше добавить репозиторий GoAccess и установить из него.
Debian/Ubuntu
$ echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list
$ wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add -
$ sudo apt-get update
$ sudo apt-get install goaccess
Для других дистрибутивов смотрите документацию
Настройка и основные команды
Если вы используете стандартный лог веб-сервера, то настраивать ничего и не нужно:-).
Стандартные типы логов, которые поддерживает GoAccess:
- COMBINED - Combined Log Format,
- VCOMBINED - Combined Log Format with Virtual Host,
- COMMON - Common Log Format,
- VCOMMON - Common Log Format with Virtual Host,
- W3C - W3C Extended Log File Format,
- SQUID - Native Squid Log Format,
- CLOUDFRONT - Amazon CloudFront Web Distribution,
- CLOUDSTORAGE - Google Cloud Storage,
- AWSELB - Amazon Elastic Load Balancing,
- AWSS3 - Amazon Simple Storage Service (S3)
Для вывода статистики в консоль используется команда:
goaccess /var/log/nginx/access.log --log-format=COMBINED
# или чтобы посмотреть статистику за все время
zcat /var/log/nginx/access.log.*.gz | goaccess /var/log/nginx/access.log --log-format=COMBINED
Для вывода в HTML необходимо указать имя файла
zcat /var/log/nginx/access.log.*.gz | goaccess /var/log/nginx/access.log --log-format=COMBINED -o report.html
Также поддерживается вывод в JSON и CSV таблицу. Плюс есть возможность сделать real-time отчет, который обновляется в реальном времени, но это мы рассмотрим далее.
Использование с Nginx
При использовании GoAccess с веб-сервером Nginx может возникнуть несколько ньансов. Если на сервере сайт один, то можно ничего не менять и использовать формат логов COMBINED. Или настроить запись логов для каждого сайта в одельный файл типа sitename.ru.access.log
и тогда также использовать формат COMBINED.
Но бывают ситуации, когда на сайте настроено много поддоменов, особенно актуально для доров. Тогда конфиг Nginx может выглядеть примерно так:
server {
listen 80;
listen [::]:80;
server_name *.sitename.ru;
access_log /var/log/nginx/sitename.access.log;
}
В таком случае в GoAccess можно увидеть только суммарную статистику по всем поддоменам. Чтобы можно было видеть статистику по каждому поддомену отдельно необходимо включить в лог имя virtual host. Для этого необходимо настроить в Nginx формат VCOMBINED.
Настройка VCOMBINED логов в NGINX
В Nginx можно настроить сколько угодно кастомных форматов логов. Формат указывается после имени файла, например access_log /var/log/nginx/access.log main;
.
Для настройки формата VCOMBINED необходимо добавить в nginx.conf
следующую конфигурацию:
http {
...
log_format vcombined '$host:$server_port '
'$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';
...
}
И включить логирование в формате VCOMBINED в настройках virtual host:
server {
listen 80;
listen [::]:80;
server_name *.sitename.ru;
access_log /var/log/nginx/sitename.access.log vcombined;
}
После этого необходимо перезагрузить конфигурацию nginx:
nginx -t
systemctl reload nginx
Настройка real-time HTML отчетов
GoAccess формирует красивые real-time HTML отчеты. Для вывода такого отчета нужно всего лишь добавить опцию --real-time-html
, но тогда обновление отчета прекратится после выхода их shell. Чтобы отчет обновлялся всегда необходимо запустить процесс, как демон. Для этого рекомендуется использовать systemd.
Запуск GoAccess как демона
Чтобы запустить команду goaccess в linux, как демона, необходимо создать файл сервиса systemd с именем goaccess.service
, например:
[Unit]
Description=Goaccess statistics for *.my-site.ru
[Service]
ExecStart=/usr/bin/goaccess -a -f /var/log/nginx/my-site.ru.access.log -o /var/www/my-site.ru/report.html --real-time-html --ws-url=ws://x.x.x.x:7890
Опция --ws-url=ws://x.x.x.x:7890
, где x.x.x.x
- реальный IP сервера, нужна для корректной работы web socket(без нее у меня не заработало), так как real-time отчет использует веб сокеты для динамического обновления данных на клиенте(в браузере).
Теперь нужно скопировать файл в папку /lib/systemd/system
и запустить сервис командой systemctl start goaccess
:
cp goaccess.service /lib/systemd/system
systemctl daemon-reload
systemctl start goaccess
Теперь можно открыть страницу my-site.ru/report.html
и увидеть real-time статистику сервера.
Для автоматического запуска GoAccess демона после перезагрузки сервера следует включить его в systemd командой systemctl enable goaccess
.
Полезные ссылки
- https://goaccess.io - официальный сайт GoAccess
- https://access.redhat.com/documentation - документация RHEL по созданию сервисов в systemd
- https://medium.com - как запускать веб-приложения в виде сервисов в systemd