GoAccess - использование и настройка с Nginx

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

В отличие от Яндекс.Метрики и 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.

Полезные ссылки