Гид по технологиям

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

• 9 min read • Серверы • Обновлено 21 Nov 2025
GoAccess на Rocky Linux — установка и реальное время
GoAccess на Rocky Linux — установка и реальное время

Скриншот: интерфейс GoAccess — главное окно

Что такое GoAccess

GoAccess — это лёгкий и производительный анализатор логов с интерфейсом на ncurses и возможностью генерации HTML/JSON/CSV-отчётов. Коротко: собирает метрики из логов веб-сервера в реальном времени и визуализирует их в терминале или в браузере.

Важно: если нужно агрегировать терабайты логов с множеством структур и сложными поисковыми запросами, лучше посмотреть на специализированные системы (ELK, ClickHouse + Grafana). GoAccess хорошо подходит для быстрых локальных сводок и реального времени.

Основные варианты использования

  • Быстрый аудит трафика с терминала.
  • Публичные/внутренние HTML-дашборды в реальном времени.
  • Лёгкая альтернатива полнофункциональным аналитическим стэкам для средних нагрузок.

Предварительные требования

  1. Сервер с Rocky Linux 8. При желании инструкции подходят и для других RHEL-подобных дистрибутивов.
  2. Непривилегированный пользователь с sudo-привилегиями.
  3. Nginx, который пишет access.log в /var/log/nginx (или другой путь — укажите его в командах).
  4. Система обновлена:
$ 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

При запуске вы попадёте в терминальный дашборд. Пример визуализации:

Панель управления GoAccess — терминальный дашборд

Управление в интерфейсе (ключевые сочетания):

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

Краткое описание панелей (важные метрики):

  1. Unique visitors per day — уникальные посетители, хиты и суммарная полоса за дату.
  2. Requested Files (URLs) — наиболее запрашиваемые динамические ресурсы.
  3. Static Requests — статические файлы: изображения, CSS, JS.
  4. Not Found URLs (404s) — пути, которые вернули 404.
  5. Visitor Hostnames and IPs — хосты/IP посетителей; расширяемая карточка с геолокацией.
  6. Operating Systems — ОС посетителей.
  7. Browsers — браузеры посетителей.
  8. Time Distribution — почасовая сводка по хиту/уникальным/трафику.
  9. Virtual Hosts — виртуальные хосты при VCOMBINED или %v.
  10. Referrer URLs — внешние страницы-рефереры (может быть отключено по умолчанию).
  11. Referring Sites — IP-адреса рефереров.
  12. Keyphrases — поисковые ключи, ведущие на сайт (ограничено политикой поисковых систем).
  13. HTTP Status Codes — сводка по кодам ответов.
  14. Remote User — HTTP-аутентификация (если есть %e в формате).
  15. Cache status — наличие кэширования (%c в формате).
  16. 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) для публичного доступа.

HTML-отчёт GoAccess — пример веб-страницы отчёта

Чтобы включить 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.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро