Когда речь заходит об анализе логов веб-сервера первое что приходит на ум это Webalizer но вот беда, этот софт из палеолита последний раз обновлялся в далёком 2013 году. Его неизменный конкурент и со-товарищ AWStats. Последний релиз был в 2020 году, но выглядит он не лучше своего напарника.
К счастью, аналог этих доисторических динозавров есть. Встречайте, Goaccess!
Почитав описание на гитхабе я даже удивилась. Минимум зависимостей, шустрый, да это же сказка! Но, как с любым линукс софтом подводные камни всё же нашлись.
Первая проблема заключалась в том, что в репозитории находится версия 1.3.1, возможно для изучения она подходит, но как рабочий анализатор не годится. Самый важный нюанс в отсутствии btree при компиляции. Так что складывать логи для инкрементального анализа не выйдет. ):
Следующая проблема с которой ты, мой гугл бот сможешь столкнуться касается как раз компиляции из исходников. Дело в том, что в сети гуляет вот такое решение:
$ sudo apt-get install libtokyocabinet-dev
$ curl http://tar.goaccess.io/goaccess-1.0.2.tar.gz | tar xvz
$ cd goaccess-1.0.2/
$ ./configure --enable-utf8 --enable-geoip --enable-tcb=btree
$ make
$ sudo make install
И оно не работает! Потому что опции —enable-tcb уже нет, поддержка btree уже из коробки. А опции keep-db-files и load-from-disk из конфига 1.3.1 превратились в persist и restore. Увы, это изменение без сохранения преемственности отняло у меня порядочно времени в попытке разобраться почему конфиг от 1.3.1 не подошел к 1.4.3. Т.Т
Итак, работающим решением будет следующее:
$ yum install tokyocabinet tokyocabinet-devel ncurses ncurses-devel geoip geoip-devel
$ wget https://tar.goaccess.io/goaccess-1.4.3.tar.gz
$ tar -xzvf goaccess-1.4.3.tar.gz
$ cd goaccess-1.4.3/
$ ./configure --enable-utf8 --enable-geoip=legacy
$ make
# make install
$ ln -s /usr/local/bin/goaccess /usr/bin/goaccess
Про первую и вторую часть я думаю рассказывать смыла нет, сначала ставим зависимости, потом компилируем goaccess из исходников. А вот последнюю строку в официальном мануале вы не встретите, но без неё команда goaccess не заработает. Ха-ха!
Следующим шагом будет конечно же конфигурирование. Я предпочитаю хранить конфиги в /etc/goaccess поэтому конфиг для лога будет следующим /etc/goaccess/virtual-host.conf
time-format %H:%M:%S
date-format %d/%b/%Y
log-format COMBINED
html-report-title Stat
log-file /var/log/nginx/virtual-host.log
agent-list true
output /var/www/goaccess/report.html
anonymize-ip true
db-path /tmp/goaccess/virtual-host/
persist true
restore true
Первые три строки отвечают за формат лога, в данном случае нас интересует nginx/Apache.
html-report-title — отвечает за заголовок на странице, чтобы не запутаться от чего же этот отчёт.
log-file — путь к лог файлу.
agent-list — использование юзер-агентов из лога.
output — путь куда складывать отчёт. Помимо html, умеет в json и csv.
anonymize-ip — поддержка GDPR и анонимизации данных, вот что значит современный) если опция включена, будет заменять последнюю часть ip-адреса на 0.
db-path — поскольку persist и restore включены, goaccess будет складывать данные на диск, и если нужно анализировать несколько логов, то для каждого нужно указывать свою директорию!
Это необходимый минимум. Все опции и их описание можно посмотреть в конфиге /usr/local/etc/goaccess/goaccess.conf или на оффсайте.
Осталось только добавить команду запуска в cron и получать приятно оформленные данные.
goaccess -p /etc/goaccess/virtual-host.conf