GoAccess: установка и настройка на Rocky Linux 8

Что такое GoAccess
GoAccess — это лёгкий и производительный анализатор логов с интерфейсом на ncurses и возможностью генерации HTML/JSON/CSV-отчётов. Коротко: собирает метрики из логов веб-сервера в реальном времени и визуализирует их в терминале или в браузере.
Важно: если нужно агрегировать терабайты логов с множеством структур и сложными поисковыми запросами, лучше посмотреть на специализированные системы (ELK, ClickHouse + Grafana). GoAccess хорошо подходит для быстрых локальных сводок и реального времени.
Основные варианты использования
- Быстрый аудит трафика с терминала.
- Публичные/внутренние HTML-дашборды в реальном времени.
- Лёгкая альтернатива полнофункциональным аналитическим стэкам для средних нагрузок.
Предварительные требования
- Сервер с Rocky Linux 8. При желании инструкции подходят и для других RHEL-подобных дистрибутивов.
- Непривилегированный пользователь с sudo-привилегиями.
- Nginx, который пишет access.log в /var/log/nginx (или другой путь — укажите его в командах).
- Система обновлена:
$ sudo dnf updateПримечание: команды и пути в руководстве соответствуют типичной установке. Подстраивайте пути и имена пользователей под свою систему.
Шаг 1 — Установка зависимостей для сборки GoAccess
GoAccess часто устанавливают из исходников, чтобы получить последние возможности (например, поддержка GeoIP2 в mmdb). Установите необходимые пакеты:
$ sudo dnf install ncurses-devel libmaxminddb-devel openssl-devel
$ sudo dnf groupinstall 'Development Tools'Если при компиляции появятся ошибки о недостающих заголовках, установите пакеты, перечисленные в сообщениях об ошибке (например, zlib-devel и др.).
Шаг 2 — Загрузка и установка GoAccess
Скачайте стабильный архив (в примере — 1.5.2):
$ wget https://tar.goaccess.io/goaccess-1.5.2.tar.gzРаспакуйте и соберите:
$ tar -xzvf goaccess-1.5.2.tar.gz
$ cd goaccess-1.5.2
$ autoreconf -fi
$ sudo ./configure --enable-utf8 --enable-geoip=mmdb --with-openssl
$ sudo make
$ sudo make installПроверка установки:
$ goaccess --version
GoAccess - 1.5.2.
For more details visit: https://goaccess.io/
...Если вы хотите устанавливать автоматически обновляемый пакет, можно поискать RPM в сторонних репозиториях или собрать RPM из исходников, но в этом руководстве мы используем прямую сборку.
Шаг 3 — Загрузка базы GeoIP
Для отображения геолокации нужно .mmdb-файл (GeoIP2/GeoLite2 или DB-IP mmdb). Вы можете загрузить файл с DB-IP (без регистрации) или MaxMind (требуется регистрация и ключ). Разархивируйте и поместите mmdb-файл в удобную директорию, например:
/home//geoip/GeoLite2-Country.mmdb Совет: используйте отдельную директорию для GeoIP, чтобы проще управлять правами и обновлениями.
Шаг 4 — Конфигурация GoAccess
Конфигурационный файл по умолчанию находится здесь:
$ goaccess --dcf
/usr/local/etc/goaccess/goaccess.confОткройте файл и отредактируйте основные параметры:
$ sudo nano /usr/local/etc/goaccess/goaccess.confКлючевые настройки для парсинга Nginx (сохраните изменения, убрав # перед опцией):
- Формат времени:
time-format %H:%M:%S- Формат даты:
date-format %d/%b/%Y- Формат лога: для обычных Nginx-логов используйте COMBINED или VCOMBINED при наличии виртуальных хостов:
log-format COMBINED
# или
log-format VCOMBINED- Пример детализированного формата в случае самописных логов:
log-format %v:%^ %h %^[%d:%t %^] "%r" %s %b "%R" "%u"- Подключение GeoIP2 (укажите реальный путь к .mmdb):
geoip-database /home/geoip/GeoLite2-Country.mmdbСохраните и закройте файл (Ctrl+X, Y).
Совет: для отладки парсинга используйте опцию –log-format и запуск с примером строки логов, чтобы убедиться, что поля распознаются правильно.
Шаг 5 — Запуск GoAccess в интерактивном режиме
По умолчанию лог-файлы защищены, поэтому запуск обычно осуществляется с sudo:
$ sudo /usr/local/bin/goaccess /var/log/nginx/access.logЧтобы не указывать полный путь при каждом запуске, создайте симлинк:
$ sudo ln -s /usr/local/bin/goaccess /usr/bin/goaccessТеперь можно запускать просто:
$ sudo goaccess /var/log/nginx/access.logПри запуске вы попадёте в терминальный дашборд. Пример визуализации:

Управление в интерфейсе (ключевые сочетания):
- TAB — перейти к следующему модулю, SHIFT+TAB — назад.
- F5 — обновить данные.
- g — в начало, G — в конец.
- o или ENTER — раскрыть модуль.
- j/k — прокрутка вниз/вверх внутри модуля.
- s — опции сортировки текущего модуля.
- / — поиск по всем модулям, n — переход к следующему совпадению.
- 0-9 и SHIFT+0 — быстрый переход к модулю по его номеру.
- ? — справка.
- q — выход.
Краткое описание панелей (важные метрики):
- Unique visitors per day — уникальные посетители, хиты и суммарная полоса за дату.
- Requested Files (URLs) — наиболее запрашиваемые динамические ресурсы.
- Static Requests — статические файлы: изображения, CSS, JS.
- Not Found URLs (404s) — пути, которые вернули 404.
- Visitor Hostnames and IPs — хосты/IP посетителей; расширяемая карточка с геолокацией.
- Operating Systems — ОС посетителей.
- Browsers — браузеры посетителей.
- Time Distribution — почасовая сводка по хиту/уникальным/трафику.
- Virtual Hosts — виртуальные хосты при VCOMBINED или %v.
- Referrer URLs — внешние страницы-рефереры (может быть отключено по умолчанию).
- Referring Sites — IP-адреса рефереров.
- Keyphrases — поисковые ключи, ведущие на сайт (ограничено политикой поисковых систем).
- HTTP Status Codes — сводка по кодам ответов.
- Remote User — HTTP-аутентификация (если есть %e в формате).
- Cache status — наличие кэширования (%c в формате).
- Geo Location — страны/города (требуется .mmdb).
Чтобы включить панели Referrers и Keyphrases, раскомментируйте соответствующие строки в goaccess.conf (удалите # перед ignore-panel, если стоит как “#ignore-panel REFERRERS” и т.п.).
Шаг 6 — Запуск GoAccess без root
Лучше запускать аналитические инструменты с минимальными привилегиями. Логи Nginx часто доступны группе adm. Проверьте права:
$ ls -l /var/log/nginx
total 68
-rw-r----- 1 nginx adm 30547 Oct 10 12:47 access.log
-rw-r----- 1 nginx adm 35063 Oct 10 12:47 error.logДобавьте пользователя в группу adm:
$ sudo usermod -aG adm $USERЗатем выполните выход и вход в сессию или сразу примените изменение:
$ su $USERПосле этого пользователь сможет запускать goaccess без sudo:
$ goaccess /var/log/nginx/access.logЕсли в вашей системе используется другая группа (например, adm или nginx), адаптируйте команду.
Важно: при работе с веб-контентом и папкой /usr/share/nginx/html учитывайте права и SELinux-контексты (см. раздел про безопасность).
Шаг 7 — Генерация HTML-отчётов и отчётов в реальном времени
Сгенерируйте статический HTML-отчёт:
$ goaccess /var/log/nginx/access.log -o stats.htmlФайл stats.html можно раздать вручную или положить в директорию сайта (/usr/share/nginx/html) для публичного доступа.

Чтобы включить WebSocket для реального времени, откройте порт 7890:
$ sudo firewall-cmd --permanent --add-port=7890/tcp
$ sudo firewall-cmd --reloadЗапуск генерации реального времени (пишет файл и слушает WebSocket):
$ goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-htmlЕсли GoAccess не имеет прав на запись в /usr/share/nginx/html, запустите с sudo или измените владельца/группу директории. Пример: дать права пользователю myuser:
$ sudo chown myuser:myuser /usr/share/nginx/html/livereport.htmlИли запустите через sudo (менее желательно):
$ sudo goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-htmlФоновый (демонизированный) режим:
$ goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-html --daemonize
Daemonized GoAccess: 78315Остановить демон можно по PID:
$ sudo kill -9 78315
# или
$ sudo kill -9 `pidof goaccess`Обратите внимание: в команде выше используются обратные кавычки ` (backquote). Обычные кавычки не подойдут. ## Systemd-сервис для GoAccess (реальное время) Запуск через systemd упрощает управление и автозапуск при рестарте. Пример сервис-файла, запускающего goaccess как непользовательский daemon и записывающего HTML в /usr/share/nginx/html: # /etc/systemd/system/goaccess.service [Unit] Description=GoAccess realtime web UI After=network.target [Service] Type=simple User=goaccess Group=goaccess ExecStart=/usr/local/bin/goaccess /var/log/nginx/access.log -o /usr/share/nginx/html/livereport.html --real-time-html Restart=on-failure [Install] WantedBy=multi-user.target Шаги для использования: 1. Создайте пользователя и группу без логина для сервиса: $ sudo useradd -r -s /sbin/nologin goaccess $ sudo mkdir -p /var/lib/goaccess $ sudo chown goaccess:goaccess /var/lib/goaccess 2. Убедитесь, что пользователь goaccess имеет права чтения логов Nginx или добавьте его в группу adm: $ sudo usermod -aG adm goaccess 3. Установите правильные права для каталога с HTML-отчётом: $ sudo chown goaccess:goaccess /usr/share/nginx/html/livereport.html 4. Перезагрузите systemd и включите сервис: $ sudo systemctl daemon-reload $ sudo systemctl enable --now goaccess.service $ sudo systemctl status goaccess.service Примечание по безопасности: запускать сервис под отдельным пользователем безопаснее, чем под root. ## Интеграция с logrotate и отказоустойчивость Проблема: при ротации логов демон GoAccess может продолжать читать старый файл или терять поток. Один из подходов — запускать GoAccess на непрерывный мониторинг последнего access.log, или перезапускать демон после ротации. Пример конфигурации logrotate для Nginx с вызовом перезапуска goaccess после ротации: /var/log/nginx/*.log { daily missingok rotate 14 compress delaycompress notifempty sharedscripts postrotate /usr/bin/systemctl restart goaccess.service >/dev/null 2>&1 || true endscript } Альтернативный метод: хранить историю логов и периодически перегенерировать отчёт из нескольких файлов (команда goaccess поддерживает несколько файлов и распаковку .gz): $ zcat /var/log/nginx/*access.log* | goaccess -a -o stats.html --log-format=COMBINED - ## SELinux и права доступа На Rocky Linux SELinux по умолчанию может мешать записи в /usr/share/nginx/html или доступу к сокетам. Чтобы временно проверить, вызывает ли SELinux проблему, включите permissive-mode (только для отладки): $ sudo setenforce 0 Если это решает проблему, создайте постоянное правило SELinux или назначьте правильный контекст: $ sudo chcon -R -t httpd_sys_content_t /usr/share/nginx/html # Или для файла, который должен быть модифицируемым веб-сервером $ sudo chcon -t httpd_sys_rw_content_t /usr/share/nginx/html/livereport.html Лучше всего создать кастомный модуль SELinux, чем полностью отключать SELinux в продакшене. ## Диагностика и типичные ошибки 1. Permission denied при чтении /var/log/nginx/access.log - Решение: добавьте пользователя в группу adm или измените права/ACL на файл (setfacl). 2. Неверный формат даты/времени, данные не отображаются корректно - Проверьте date-format и time-format в goaccess.conf; запустите goaccess с ключом –log-format и примером строки для отладки. 3. GeoIP не работает, карта пуста - Проверьте путь geoip-database и права на файл .mmdb; убедитесь, что файл не повреждён. 4. WebSocket недоступен из браузера - Проверьте firewall-cmd, проброс портов и что браузер может достучаться до порта 7890. Убедитесь, что Nginx не блокирует соединение. 5. Ошибки при сборке: отсутствуют заголовки или библиотеки - Установите соответствующие -devel пакеты (ncurses-devel, libmaxminddb-devel, openssl-devel и др.). 6. Демон не видит новые файлы после ротации - Вариант: перезапускать демон в postrotate или запускать goaccess в режиме чтения конвейера zcat. 7. Неправильная кодировка/символы - Соберите с –enable-utf8 и убедитесь, что терминал/страница настроены на UTF-8. ## Когда GoAccess не подходит (примеры) - Нужна сложная агрегация и хранение исторических данных на годы (ELK/ClickHouse лучше подходят). - Множественные дата-центры и необходимость корреляции событий — центральная лог-система предпочтительнее. - Высокочастотный трафик с десятками тысяч записей в секунду — GoAccess в реальном времени может не выдержать без масштабирования. ## Альтернативные подходы - AWStats — классический парсер логов с веб-интерфейсом. - Elastic Stack (Elasticsearch + Logstash + Kibana) — масштабируемый поиск и визуализация. - ClickHouse + Grafana — аналитика больших объёмов логов с высокой скоростью. - Self-hosted SaaS или облачные аналитики (если не хотите управлять инфраструктурой). Выбор зависит от объёма данных, требований к хранению и навыков команды. ## Практические рекомендации и эвристики - Если нужен быстрый инвентарный обзор — используйте GoAccess в терминале. - Для постоянного публичного дашборда — запускайте daemon под systemd с отдельным пользователем. - Для высокой безопасности дайте сервисному пользователю минимум привилегий и настройте SELinux. - Для сохранности метрик периодически экспортируйте JSON/CSV и загружайте в долгосрочное хранилище. ## Ролевые чек-листы Администратор системы: - Установить зависимости и собрать GoAccess. - Создать системного пользователя goaccess. - Настроить systemd-сервис и автозапуск. - Настроить SELinux-контексты и firewall. DevOps-инженер: - Проверить формат логов и конфигурацию goaccess.conf. - Настроить интеграцию с CI/CD (обновление GeoIP, деплой конфигураций). - Настроить лог- ротацию и postrotate рестарт/рефреш сервиса. Владелец сайта/маркетолог: - Проверить корректность ключевых панелей (Referrers, Keyphrases). - Убедиться, что отчёты доступны по нужному URL и соответствуют требованиям конфиденциальности. ## Критерии приёмки - GoAccess успешно собирается и запускается: goaccess –version возвращает ожидаемую версию. - Дашборд показывает данные из /var/log/nginx/access.log. - Реальный HTML-отчёт доступен и обновляется в реальном времени по адресу /livereport.html. - Сервис запускается и восстанавливается при рестарте systemd. - Нет ошибок SELinux/пермиссий в журнале при нормальной работе. ## Мини-методология развертывания 1. Подготовить сервер и зависимости. 2. Собирать GoAccess с ключами для GeoIP и UTF-8. 3. Настроить конфиг и проверить парсинг на одном образце лога. 4. Создать сервис systemd и тестировать в staging. 5. Настроить logrotate и SELinux, подготовить инструкции отката. 6. Перевести в продакшен и мониторить нагрузку. ## Глоссарий (1 строка) - access.log — файл с записями входящих HTTP-запросов. - GeoIP2/mmdb — база геолокации в формате MaxMind DB. - COMBINED — стандартный формат логов с полем Referer и User-Agent. - VCOMBINED — расширенный формат с виртуальным хостом (%v). - ncurses — библиотека для консольного интерфейса. ## Шаблон проверки после установки - goaccess –version - systemctl status goaccess.service - curl -I http://localhost/livereport.html - journalctl -u goaccess.service –since “1 hour ago” ## Безопасность и конфиденциальность - Не публикуйте открыто отчёты, содержащие IP-адреса, если это нарушает политику приватности. - При необходимости анонимизируйте IP в логах или включайте фильтры в GoAccess. - Убедитесь, что доступ к livereport.html ограничен (аутентификация Nginx, VPN, IP-фильтрация) при обработке персональных данных. ## Короткое объявление для команды (100–200 слов) GoAccess установлен на сервере Rocky Linux 8 и собирает метрики из Nginx-access.log. Он работает как интерактивный консольный инструмент и как реальное HTML-дашборд. Для непрерывной работы настроен systemd-сервис, GeoIP подключён через mmdb, и отчёт доступен по /livereport.html. Пожалуйста, проверьте доступы и приватность перед публикацией внешнего URL. В случае вопросов смотрите раздел «Ролевые чек-листы» и «Диагностика». При появлении ошибок в сборке – проверьте наличие dev-пакетов. ## Краткое резюме GoAccess — быстрый путь получить аналитические сводки по Nginx-логам прямо на сервере. Он прост в установке, даёт интерактивный терминал и реальное HTML-отображение. При правильной настройке прав/SELinux и интеграции с systemd/logrotate он надёжен для постоянной эксплуатации. Спасибо за внимание. Если нужно, могу подготовить systemd unit под вашу конкретную структуру доступа к логам или пример конфигурации Nginx для проксирования страницы отчёта с ограничением по IP.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента