GoAccess — это анализатор веб-журналов с открытым исходным кодом в реальном времени и интерактивный просмотрщик, который запускается в терминале в системах *nix или через ваш браузер . Он предоставляет быструю и ценную статистику HTTP для системных администраторов, которым требуется визуальный отчет сервера на лету. Дополнительная информация: https://goaccess.io.
GoAccess анализирует указанный файл веб-журнала и выводит данные на X-терминал. Особенности включают в себя:
Полностью в реальном времени
Все панели и метрики обновляются каждые 200 мс при выводе терминала и каждую секунду при выводе HTML.
Требуется минимальная конфигурация
Вы можете просто запустить его в файле журнала доступа, выбрать формат журнала и позволить GoAccess проанализировать журнал доступа и показать вам статистику.
Отслеживайте время ответа приложения
Отслеживайте время, необходимое для обслуживания запроса. Чрезвычайно полезно, если вы хотите отслеживать страницы, которые замедляют работу вашего сайта.
Почти все форматы веб-журналов
GoAccess допускает любую строку пользовательского формата журнала. Предопределенные параметры включают Apache, Nginx, Amazon S3, Elastic Load Balancing, CloudFront и т. д.
Инкрементная обработка журналов
Требуется постоянство данных? GoAccess имеет возможность постепенно обрабатывать журналы с помощью параметров сохранения на диске.
Только одна зависимость
GoAccess написан на C. Для его запуска вам понадобится только ncurses в качестве зависимости. Вот и все. У него даже есть собственный сервер Web Socket — http://gwsocket.io/.
Посетители
Определите количество обращений, посетителей, пропускную способность и показатели для самых медленно выполняющихся запросов по часам или датам.
Метрики на виртуальный хост
У вас есть несколько виртуальных хостов (серверных блоков)? Он имеет панель, которая показывает, какой виртуальный хост потребляет большую часть ресурсов веб-сервера.
ASN (сопоставление номеров автономной системы)
Отлично подходит для обнаружения вредоносных шаблонов трафика и их соответствующей блокировки.
Цветовая схема настраиваемая
Настройте GoAccess в соответствии со своими цветовыми предпочтениями/схемами. Либо через терминал, либо просто применив таблицу стилей к выводу HTML.
Поддержка больших наборов данных
GoAccess позволяет анализировать большие журналы благодаря оптимизированным хеш-таблицам в памяти. Он имеет очень хорошее использование памяти и довольно хорошую производительность. Это хранилище также поддерживает сохранение на диске.
Поддержка Докера
Возможность создания образа Docker GoAccess из исходной версии. Вы по-прежнему можете полностью настроить его, используя сопоставление томов и редактируя goaccess.conf
. См. раздел «Докер» ниже.
GoAccess допускает любую строку пользовательского формата журнала. Предопределенные параметры включают, помимо прочего:
GoAccess был разработан как быстрый анализатор журналов на базе терминала. Его основная идея — быстро анализировать и просматривать статистику веб-сервера в режиме реального времени без необходимости использования браузера ( отлично, если вы хотите выполнить быстрый анализ журнала доступа через SSH или если вы просто любите работать в терминале ).
Хотя вывод терминала является выводом по умолчанию, он имеет возможность генерировать полный, автономный отчет HTML
в реальном времени, а также отчет JSON
и CSV
.
Вы можете видеть, что это скорее инструмент управления монитором, чем что-либо еще.
GoAccess можно скомпилировать и использовать в системах *nix.
Загрузите, извлеките и скомпилируйте GoAccess с помощью:
$ wget https://tar.goaccess.io/goaccess-1.9.3.tar.gz
$ tar -xzvf goaccess-1.9.3.tar.gz
$ cd goaccess-1.9.3/
$ ./configure --enable-utf8 --enable-geoip=mmdb
$ 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.
У GoAccess минимальные требования, он написан на C и требует только ncurses. Однако ниже приведена таблица некоторых дополнительных зависимостей в некоторых дистрибутивах для сборки GoAccess из исходного кода.
Дистрибутив | NCurses | ГеоIP (опция) | GeoIP2 (опция) | OpenSSL (опция) |
---|---|---|---|---|
Убунту/Дебиан | libncurses-dev | libgeoip-dev | libmaxminddb-dev | libssl-dev |
RHEL/CentOS | ncurses-развитие | GeoIP-развитие | libmaxminddb-devel | openssl-развитие |
Арка | ncurses | геоIP | libmaxminddb | OpenSSL |
Генту | sys-libs/ncurses | dev-libs/geoip | dev-libs/libmaxminddb | dev-libs/openssl |
Слаквар | ncurses | ГеоIP | libmaxminddb | OpenSSL |
Примечание . Вам может потребоваться установить инструменты сборки, такие как gcc
, autoconf
, gettext
, autopoint
и т. д., для компиляции/сборки программного обеспечения из исходного кода. например, base-devel
, build-essential
, "Development Tools"
.
Был обновлен образ 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 -
Вы также можете собрать двоичный файл для систем на базе 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 использует хэш-таблицы в памяти. Он имеет очень хорошее использование памяти и довольно хорошую производительность. Это хранилище также поддерживает сохранение на диске.
См. параметры , которые могут быть переданы команде или указаны в файле конфигурации. Если это указано в файле конфигурации, длинные параметры необходимо использовать без добавления --
.
Примечание . При передаче данных в GoAccess не отображается диалоговое окно настройки журнала/даты/времени. Вам необходимо будет предварительно определить его в файле конфигурации или в командной строке.
Чтобы вывести на терминал и создать интерактивный отчет:
# goaccess access.log
Чтобы создать отчет HTML:
# goaccess access.log -a > report.html
Чтобы создать файл отчета JSON:
# goaccess access.log -a -d -o report.json
Чтобы создать отчет CSV на стандартный вывод:
# 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=
и --ssl-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 -
Примечание. Для SSH требуется -n
, чтобы GoAccess мог читать данные со стандартного ввода. Кроме того, обязательно используйте ключи SSH для аутентификации, поскольку это не будет работать, если требуется парольная фраза.
Мы получаем много вопросов и проблем, на которые уже были даны ответы ранее.
GoAccess имеет возможность постепенно обрабатывать журналы через свое внутреннее хранилище и сбрасывать данные на диск. Это работает следующим образом:
--persist
, затем можно загрузить тот же набор данных.--restore
. Если передаются новые данные (по конвейеру или через файл журнала), они добавляются к исходному набору данных. GoAccess отслеживает индексные дескрипторы всех обработанных файлов (при условии, что файлы будут оставаться в одном разделе), кроме того, он извлекает фрагмент данных из журнала вместе с последней проанализированной строкой каждого файла и временной меткой последней проанализированной строки. . например, inode:29627417|line:20012|ts:20171231235059
Во-первых, он сравнивает, соответствует ли фрагмент анализируемому журналу; если да, то предполагает, что журнал не изменился радикально, например, не был усечен. Если индексный дескриптор не соответствует текущему файлу, он анализирует все строки. Если текущий файл соответствует индексному дескриптору, он затем считывает оставшиеся строки и обновляет количество проанализированных строк и метку времени. В качестве дополнительной меры предосторожности он не будет анализировать строки журнала с отметкой времени ≤ той, которая сохранена.
Передаваемые данные работают на основе временной метки последней прочитанной строки. Например, он будет анализировать и отбрасывать все входящие записи, пока не найдет метку времени >=, чем сохраненная.
// last month access log
# goaccess access.log.1 --persist
затем загрузите его с помощью
// append this month access log, and preserve new data
# goaccess access.log --restore --persist
Чтобы прочитать только сохраненные данные (без анализа новых данных)
# goaccess --restore
Любая помощь по GoAccess приветствуется. Самый полезный способ — попробовать и оставить отзыв. Не стесняйтесь использовать систему отслеживания проблем GitHub и запросы на включение, чтобы обсуждать и отправлять изменения кода.
Вы можете внести свой вклад в наши переводы, отредактировав файлы .po непосредственно на GitHub или используя визуальный интерфейс inlang.com.
Наслаждаться!