goaccess
@noob4ikУтилита позволяет генерировать отчеты на основании access логов практически любых web серверов

Пример терзания файла с логом
Нужно было посмотреть статистику по geoip, браузерам и ОС клиента
# идем в папочку где аксесслоги лежат cd logs/sitename # распаковываем все логи gunzip *.gz # обьединяем все в один файл cat sitename.acces.log* > sitename_full # оставляем в логе только нужные даты cat sitename_full | grep -E '1[3-9]/Aug/2017|2[0-3]/Aug/2017' > sitename_full_13-23 # смотрим все логи за даты goreport sitename_full_13-23 # фильтруем логи по источнику - WAF - отсекаем внутренние IP cat sitename_13-23 | grep 10.45.15.90 > sitename_13-23_n goreport sitename_13-23_n # находим точку входа в приложение и оставляем только ее cat siteneame_13-23_n | grep /app?product_id=0000002 > sitename_13-23_n_open goreport sitename_13-23_n_open
Установка в Debian 9
Сборка из исходников
apt install libncursesw5-dev libgeoip-dev wget http://tar.goaccess.io/goaccess-1.2.tar.gz tar -xzvf goaccess-1.2.tar.gz cd goaccess-1.2/ ./configure --enable-utf8 --enable-geoip=legacy make make install
Генерируем конфиг
Для того чтобы научить понимать формат лога - используем утилиту https://github.com/stockrt/nginx2goaccess
git clone https://github.com/stockrt/nginx2goaccess.git # допустим мы имеем logformat main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" "$sent_http_content_length"' # генерим на ее основе конфиг и складываем в /usr/local/etc/goaccess.conf ./nginx2goaccess/nginx2goaccess.sh '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" "$sent_http_content_length"' | tail -n4 > /usr/local/etc/goaccess.conf # Делаем алиас для удобного запуска echo 'alias goreport="goaccess -o /var/lib/goaccess/report.html -f"' >> ~/.bashrc mkdir /var/lib/goaccess/
Настроим nginx - простейший конфиг для отдачи одного файла
apt install nginx
openssl dhparam 4096 -out /etc/nginx/ssl/dhparam.pem
Редактируем /etc/nginx/conf.d/goaccess.con
server {
listen 80 default_server;
server_name goaccess.sitename.com;
access_log /var/log/nginx/goaccess.80.access.log;
error_log /var/log/nginx/goaccess.80.error.log error;
# Redirect all non-https requests
return 301 https://goaccess.sitename.com$request_uri;
}
server {
listen 443 default_server ssl http2;
server_name goaccess.sitename.com;
access_log /var/log/nginx/goaccess.443.access.log;
error_log /var/log/nginx/goaccess.443.error.log error;
# Certificate(s) and private key
ssl_certificate /etc/nginx/ssl/multidomain.crt;
ssl_certificate_key /etc/nginx/ssl/multidomain.key;
# openssl dhparam 4096 -out /etc/nginx/ssl/dhparam.pem
ssl_dhparam /etc/nginx/ssl/dhparam.pem;
ssl_protocols TLSv1.2 TLSv1.1 TLSv1;
ssl_prefer_server_ciphers on;
ssl_ciphers EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA512:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:ECDH+AESGCM:ECDH+AES256:DH+AESGCM:DH+AES256:RSA+AESGCM:!aNULL:!eNULL:!LOW:!RC4:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS;
ssl_session_cache shared:TLS:2m;
# OCSP stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8;
# Set HSTS to 365 days
add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains';
root /var/lib/goaccess;
index report.html;
}