
GoAccess — это анализатор веб-логов в реальном времени и интерактивный просмотрщик, который работает в терминале в *nix-системах или через ваш браузер.
GoAccess — это анализатор веб-журналов с открытым исходным кодом, работающий в реальном времени и интерактивный просмотрщик, который работает в терминале на *nix-системах или непосредственно в вашем браузере. Разработанный с учётом потребностей системных администраторов, DevOps-инженеров и специалистов по безопасности, он предоставляет быструю и действенную HTTP-статистику и визуальные отчёты сервера на лету. GoAccess анализирует журналы вашего веб-сервера в реальном времени и отображает данные непосредственно в терминале или через живую HTML-панель, что упрощает мониторинг трафика, обнаружение аномалий и мгновенное устранение неполадок.
Подробнее на: https://goaccess.io.
GoAccess анализирует указанный файл веб-журнала и выводит данные в X-терминал. Возможности включают:
Полностью в реальном времени
Все панели и метрики обновляются каждые 200 мс в терминале и каждую секунду в HTML-выводе.
Минимальная настройка
Вы можете просто запустить его с файлом журнала доступа, выбрать формат журнала и позволить GoAccess проанализировать журнал и показать статистику.
Отслеживание времени ответа приложения
Отслеживайте время, затраченное на обработку запроса. Чрезвычайно полезно, если вы хотите отследить страницы, замедляющие ваш сайт.
Аутентификация WebSocket:
GoAccess предлагает расширенную аутентификацию WebSocket, поддерживающую локальную и внешнюю проверку JWT, с возможностью безопасного обновления токенов и бесшовной интеграцией с внешними системами аутентификации.
Почти все форматы веб-журналов
GoAccess поддерживает любую пользовательскую строку формата журнала. Предопределённые параметры включают Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront и т.д.
Инкрементальная обработка журналов
Нужна сохранность данных? GoAccess может обрабатывать журналы инкрементально с помощью опций сохранения на диск.
Только одна зависимость
GoAccess написан на C. Для запуска вам нужен только ncurses. И всё. Он даже имеет собственный Web Socket сервер — http://gwsocket.io/.
Посетители
Определите количество хитов, посетителей, пропускную способность и метрики самых медленных запросов по часам или датам.
Метрики для каждого виртуального хоста
Есть несколько виртуальных хостов (серверных блоков)? Он имеет панель, отображающую, какой виртуальный хост потребляет больше всего ресурсов веб-сервера.
ASN (сопоставление номеров автономных систем)
Отлично подходит для обнаружения вредоносных шаблонов трафика и их блокировки.
Настраиваемая цветовая схема
Настройте GoAccess под свои цветовые предпочтения/схемы. Либо через терминал, либо применив таблицу стилей к HTML-выводу.
Поддержка больших наборов данных
GoAccess может обрабатывать большие журналы благодаря оптимизированным хеш-таблицам в памяти. Он имеет очень хорошее использование памяти и довольно хорошую производительность. Это хранилище также поддерживает сохранение на диск.
Поддержка Docker Возможность собрать Docker-образ GoAccess из репозитория. Вы всё ещё можете полностью настроить его, используя монтирование томов и редактируя . Смотрите раздел ниже. Также есть документация по использованию .
GoAccess поддерживает любую пользовательскую строку формата журнала. Предопределённые параметры включают, но не ограничиваются:
GoAccess был разработан как быстрый анализатор журналов на базе терминала. Его основная идея — быстро анализировать и просматривать статистику веб-сервера в реальном времени без необходимости использования браузера (отлично, если вы хотите быстро проанализировать журнал доступа через SSH или просто любите работать в терминале). Он также служит практическим инструментом для мониторинга безопасности, позволяя легко обнаруживать подозрительную активность, необычные шаблоны трафика, попытки подбора паролей, сканеры, ботов и аномальные запросы непосредственно из журналов. Хотя вывод в терминал является стандартным, он также может генерировать полный автономный отчет HTML в реальном времени, а также отчеты JSON и CSV. Вы можете рассматривать его скорее как команду мониторинга, чем что-то ещё.
GoAccess может быть скомпилирован и использован на *nix-системах.
Скачайте, распакуйте и скомпилируйте GoAccess с помощью:
$ wget https://tar.goaccess.io/goaccess-1.10.2.tar.gz
$ tar -xzvf goaccess-1.10.2.tar.gz
$ cd goaccess-1.10.2/
$ ./configure --enable-utf8 --enable-geoip=mmdb --with-zlib
$ make
# make install
$ git clone https://github.com/allinurl/goaccess.git
$ cd goaccess
$ autoreconf -fiv
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ make
# make install
Проще всего установить GoAccess на GNU+Linux, используя предпочтительный менеджер пакетов вашего дистрибутива GNU+Linux. Обратите внимание, что не все дистрибутивы будут иметь последнюю версию GoAccess.
# apt-get install goaccess
Примечание: Вероятно, это установит устаревшую версию GoAccess. Чтобы убедиться, что вы используете последнюю стабильную версию 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-get update
$ sudo apt-get install goaccess
Примечание:
.deb в официальном репозитории также доступны через HTTPS. Возможно, вам потребуется установить apt-transport-https.# yum install goaccess
# pacman -S goaccess
# emerge net-analyzer/goaccess
# brew install goaccess
# cd /usr/ports/sysutils/goaccess/ && make install clean
# pkg install sysutils/goaccess
# cd /usr/ports/www/goaccess && make install clean
# pkg_add goaccess
# zypper ar -f obs://server:http http
# zypper in goaccess
# pkg install goaccess
# pkgin install goaccess
GoAccess можно использовать в Windows через Cygwin. Смотрите пакеты Cygwin. Или через подсистему GNU+Linux в Windows 10.
Образ Docker был обновлён, способен направлять вывод из журнала доступа. Если вы хотите только вывести отчёт, вы можете передать журнал из внешней среды в Docker-процесс:
touch report.html
cat access.log | docker run --rm -i -v ./report.html:/report.html -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED -
ИЛИ в реальном времени
tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED --real-time-html -
Также есть документация по использованию docker-compose.
Вы также можете собрать бинарник для систем на основе Debian в изолированной контейнерной среде, чтобы не засорять локальную систему библиотеками разработки:
$ curl -L "https://github.com/allinurl/goaccess/archive/refs/heads/master.tar.gz" | tar -xz && cd goaccess-master
$ docker build -t goaccess/build.debian-12 -f Dockerfile.debian-12 .
$ docker run -i --rm -v $PWD:/goaccess goaccess/build.debian-12 > goaccess
Подробнее об использовании образа Docker можно прочитать в DOCKER.md.
GoAccess имеет минимальные требования, написан на C и требует только ncurses. Однако ниже приведена таблица некоторых необязательных зависимостей в некоторых дистрибутивах для сборки GoAccess из исходных кодов.
Примечание: Возможно, вам потребуется установить инструменты сборки, такие как gcc, autoconf, gettext, autopoint и т.д., для компиляции/сборки программ из исходных кодов. Например, base-devel, build-essential, "Development Tools".
Хранение в памяти обеспечивает лучшую производительность за счет ограничения размера набора данных объемом доступной физической памяти. GoAccess использует хеш-таблицы в памяти. Он имеет очень хорошее использование памяти и довольно хорошую производительность. Это хранилище также поддерживает сохранение на диск.
Смотрите параметры, которые можно передать команде или указать в файле конфигурации. Если указано в файле конфигурации, длинные параметры должны использоваться без предварительного --.
Примечание: При передаче данных через конвейер в GoAccess не будет отображаться диалог настройки журнала/даты/времени, вам нужно предварительно определить это в файле конфигурации или в командной строке.
Для вывода в терминал и создания интерактивного отчёта:
# goaccess access.log
Для создания HTML-отчёта:
# goaccess access.log -a > report.html
Для создания JSON-отчёта:
# goaccess access.log -a -d -o report.json
Для вывода CSV-отчёта в stdout:
# goaccess access.log --no-csv-summary -o csv
GoAccess также обеспечивает большую гибкость для фильтрации и анализа в реальном времени. Например, чтобы быстро диагностировать проблемы, отслеживая журналы с момента запуска goaccess:
# tail -f access.log | goaccess -
А ещё лучше, чтобы фильтровать, сохраняя открытый конвейер для поддержания анализа в реальном времени, мы можем использовать tail -f и инструмент сопоставления шаблонов, такой как grep, awk, sed и т.д.:
# tail -f access.log | grep -i --line-buffered 'firefox' | goaccess --log-format=COMBINED -
или анализировать с начала файла, сохраняя открытый конвейер и применяя фильтр
# tail -f -n +0 access.log | grep -i --line-buffered 'firefox' | goaccess -o report.html --real-time-html -
Есть несколько способов анализировать несколько журналов с помощью GoAccess. Самый простой — передать несколько файлов журналов в командной строке:
# goaccess access.log access.log.1
Можно даже анализировать файлы из конвейера, одновременно читая обычные файлы:
# cat access.log.2 | goaccess access.log access.log.1 -
Примечание: к командной строке добавляется одиночный дефис, чтобы сообщить GoAccess, что он должен читать из конвейера.
Теперь, если мы хотим добавить больше гибкости GoAccess, мы можем использовать zcat --force для чтения сжатых и несжатых файлов. Например, если мы хотим обработать все файлы журналов access.log*, мы можем сделать:
# zcat --force access.log* | goaccess -
Примечание: На Mac OS X используйте gunzip -c вместо zcat.
Используйте --jobs=<количество> (или -j) для включения многопоточного анализа. Например:
# goaccess access.log -o report.html -j 4
И используйте --chunk-size=<256-32768> для настройки размера чанка, размер чанка по умолчанию — 1024. Например:
# goaccess access.log -o report.html -j 4 --chunk-size=8192
GoAccess имеет возможность выводить данные в реальном времени в HTML-отчёте. Вы даже можете отправить HTML-файл по электронной почте, так как он состоит из одного файла без внешних зависимостей — как вам такое?
Процесс создания HTML-отчёта в реальном времени очень похож на создание статического отчёта. Для этого нужен только --real-time-html.
# goaccess access.log -o /usr/share/nginx/html/your_site/report.html --real-time-html
Чтобы просмотреть отчёт, перейдите по адресу http://your_site/report.html.
По умолчанию GoAccess будет использовать имя хоста сгенерированного отчёта. При желании вы можете указать URL, к которому браузер клиента будет подключаться. Смотрите FAQ для более подробного примера.
# goaccess access.log -o report.html --real-time-html --ws-url=goaccess.io
По умолчанию GoAccess слушает порт 7890; чтобы использовать порт, отличный от 7890, вы можете указать его (убедитесь, что порт открыт):
# goaccess access.log -o report.html --real-time-html --port=9870
А чтобы привязать WebSocket-сервер к другому адресу, отличному от 0.0.0.0, вы можете указать его как:
# goaccess access.log -o report.html --real-time-html --addr=127.0.0.1
Примечание: Для вывода данных в реальном времени через TLS/SSL-соединение используйте --ssl-cert=<сертификат.crt> и --ssl-key=<приватный.key>.
Ещё один полезный конвейер — фильтрация дат из веб-журнала.
Следующее получит все HTTP-запросы, начиная с 05/Dec/2010 до конца файла.
# sed -n '/05\/Dec\/2010/,$ p' access.log | goaccess -a -
или используя относительные даты, такие как вчерашний день или завтрашний:
# sed -n '/'$(date '+%d\/%b\/%Y' -d '1 week ago')'/,$ p' access.log | goaccess -a -
Если мы хотим анализировать только определённый временной интервал с ДАТЫ a по ДАТУ b, мы можем сделать:
# sed -n '/5\/Nov\/2010/,/5\/Dec\/2010/ p' access.log | goaccess -a -
Если мы хотим сохранить только определённое количество данных и переработать хранилище, мы можем сохранить только определённое количество дней. Например, чтобы сохранить и показывать последние 5 дней:
# goaccess access.log --keep-last=5
Предполагая, что ваш журнал содержит поле виртуального хоста. Например:
vhost.io:80 8.8.4.4 - - [02/Mar/2016:08:14:04 -0600] "GET /shop HTTP/1.1" 200 615 "-" "Googlebot-Image/1.0"
И вы хотели бы добавить виртуальный хост к запросу, чтобы увидеть, какому виртуальному хосту принадлежат верхние URL:
awk '$8=$1$8' access.log | goaccess -a -
Чтобы сделать то же самое, но также использовать фильтрацию и анализ в реальном времени:
tail -f access.log | unbuffer -p awk '$8=$1$8' | goaccess -a -
Чтобы исключить список виртуальных хостов, вы можете сделать следующее:
# grep -v "`cat exclude_vhost_list_file`" vhost_access.log | goaccess -
Для анализа конкретных страниц, например, просмотров страниц, html, htm, php и т.д. в рамках запроса:
# awk '$7~/\.html|\.htm|\.php/' access.log | goaccess -
Обратите внимание: $7 — это поле запроса для общего и комбинированного формата журнала (без виртуального хоста); если ваш журнал включает виртуальный хост, то, вероятно, вы захотите использовать $8. Лучше проверить, какое поле вы ищете, например:
# tail -10 access.log | awk '{print $8}'
Или для анализа конкретного кода состояния, например, 500 (внутренняя ошибка сервера):
# awk '$9~/500/' access.log | goaccess -
Или нескольких кодов состояния, например, все 3xx и 5xx:
# tail -f -n +0 access.log | awk '$9~/3[0-9]{2}|5[0-9]{2}/' | goaccess -o out.html -
И чтобы получить приблизительный обзор того, сколько ботов (краулеров) обращается к вашему серверу:
# tail -F -n +0 access.log | grep -i --line-buffered 'bot' | goaccess -
Также стоит отметить, что если мы хотим запустить GoAccess с более низким приоритетом, мы можем запустить его как:
# nice -n 19 goaccess -f access.log -a
а если вы не хотите устанавливать его на свой сервер, вы всё равно можете запустить его с локальной машины!
# ssh -n root@server 'tail -f /var/log/apache2/access.log' | goaccess - --log-format=COMBINED
Примечание: SSH требует -n, чтобы GoAccess мог читать из stdin. Также убедитесь, что используете ключи SSH для аутентификации, так как это не сработает, если требуется парольная фраза.
Мы получаем много вопросов и проблем, на которые уже были даны ответы.
GoAccess имеет возможность инкрементально обрабатывать журналы через своё внутреннее хранилище и сбрасывать данные на диск. Это работает следующим образом:
--persist, затем тот же набор данных можно загрузить с помощью.--restore. Если передаются новые данные (через конвейер или файл журнала), они будут добавлены к исходному набору данных.GoAccess отслеживает inodes всех обработанных файлов (предполагая, что файлы останутся в том же разделе), кроме того, он извлекает фрагмент данных из журнала вместе с последней обработанной строкой каждого файла и временной меткой последней обработанной строки. Например, inode:29627417|line:20012|ts:20171231235059
Сначала он сравнивает, соответствует ли фрагмент обрабатываемому журналу; если да, он предполагает, что журнал не изменился кардинально, например, не был усечён. Если inode не соответствует текущему файлу, он анализирует все строки. Если текущий файл соответствует inode, он читает оставшиеся строки и обновляет количество обработанных строк и временную метку. В качестве дополнительной меры предосторожности он не будет анализировать строки журнала с временной меткой ≤ той, что сохранена.
Данные из конвейера работают на основе временной метки последней прочитанной строки. Например, он будет анализировать и отбрасывать все входящие записи, пока не найдёт временную метку >= той, что сохранена.
// журнал доступа за прошлый месяц
# goaccess access.log.1 --persist
затем загрузите его с помощью
// добавьте журнал доступа за текущий месяц и сохраните новые данные
# goaccess access.log --restore --persist
Для чтения только сохранённых данных (без анализа новых данных)
# goaccess --restore
Вы можете внести свой вклад в наши переводы, редактируя .po-файлы напрямую на GitHub или с помощью визуального интерфейса inlang.com
Приятного использования!
goaccess.conf| Distro | NCurses | GeoIP (opt) | GeoIP2 (opt) | OpenSSL (opt) |
|---|
| Ubuntu/Debian | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
| RHEL/CentOS | ncurses-devel | geoip-devel | libmaxminddb-devel | openssl-devel |
| Arch | ncurses | geoip | libmaxminddb | openssl |
| Gentoo | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
| Slackware | ncurses | GeoIP | libmaxminddb | openssl |