Парсер логов GoAccess#

Сайт проекта: https://goaccess.io/

GoAccess это утилита командной строки, которая умеет парсить логи и рисовать на их основе графики и таблицы прямо в терминале с помощью ncurses, либо в HTML, причём даже в реалтайме.

Утилита может помочь в беглой оценке запросов к сайту, но не более. Если по логам надо расследовать что-либо, то здесь лучше справятся grep, awk и прямые руки.

Установка банальная через пакетный менеджер, а на сайте проекта есть инструкции по другим способам инсталяции. Если коротко, то хватит:

apt-get install goaccess

Пример запуска веб-интерфейса:

goaccess --real-time-html -o /srv/http/nixhacks.net/public/ga.html /var/log/nginx/access.log

Здесь ga.html и содержит генерируемый отчёт. Для просмотра таблиц в терминале убираем ключ -o.

Для того, чтобы проанализировать все логи /var/log/nginx/access* можно выполнить команду:

for log in access*; do if [[ "${log##*\.}" == 'gz' ]]; then zcat $log; else cat $log; fi; done | goaccess -o /srv/http/nixhacks.net/public/ga.html

Поддерживаемые форматы логов перечислены в мануале: https://goaccess.io/man#options

Если формат лога кастомный, то потребуется написать для GoAccess конфигурационный файл с указанием правильного формата. Умельцы уже написали генератор конфига для логов Nginx. В моём случае потребовалось выполнить:

wget https://raw.githubusercontent.com/stockrt/nginx2goaccess/master/nginx2goaccess.sh
bash nginx2goaccess.sh '$remote_addr - $remote_user [$time_local] "$host" "$request" $status $body_bytes_sent $request_time "$http_referer" "$http_user_agent"'

Строку с форматом лога я скопировал прямо из /etc/nginx.conf. В ответ скрипт выплюнул в терминал строки для конфига GoAccess. Я записал их в ~/.goaccessrc.

~# cat .goaccessrc
time-format %T
date-format %d/%b/%Y
log_format %h - %^ [%d:%t %^] "%v" "%r" %s %b %T "%R" "%u"

После этого можно спокойно парсить.