В этой статье рассмотрим отслеживание логов в реальном времени при помощи инструмента goaccess , а также создание симпатичных отчетов из всех имеющихся логов в папке, включая сжатые gz архивы.
Устанавливаем пакет goaccess так как указано на сайте производителя. Настраиваем в /etc/goaccess.conf формат логов, времени и даты. Первым делом, для обновления отчетов в реальном времени нам необходимо открыть порт 7890. В VestaCP это делается просто добавлением нового правила в файрвол
Либо открыть порт можно так:
sudo iptables -L # просмотр правил iptables sudo iptables -I INPUT -p tcp --dport 7890 -j ACCEPT # добавить правило (открываем порт 7890) sudo iptables -D INPUT -p tcp --dport 7890 -j ACCEPT # удалить правило sudo iptables-save > /etc/iptables.conf # сохранить правила iptables в файл sudo iptables-restore < /etc/iptables.conf # восстановить настройки из файла после перезагрузки
Теперь на сайте в корневой директории создадим папочку loganalize. У меня на локалке это /home/admin/web/wp.ru/public_html/loganalize/ Логи в реальном времени я хочу видеть сразу при заходе в корень этой папочки. Попробуем запустить:
goaccess /var/log/apache2/domains/wp.ru.log -a -o /home/admin/web/wp.ru/public_html/loganalize/index.html --real-time-html --daemonize
Если всё ок, мы будем видеть обновление данных в реальном времени и отчеты. Там даже зеленая лампочка предусмотрена:
Пока убъем процесс pkill goaccess и добавим это дело в автозагрузку в системе инициализации создав специальную службу
sudo nano /lib/systemd/system/goaccess.service
Тут записываем следующее:
[Unit] Description=Start GoAccess Service After=multi-user.target [Service] Type=forking ExecStart=/usr/bin/goaccess /var/log/apache2/domains/wp.ru.log -a -o /home/admin/web/wp.ru/public_html/loganalize/index.html --real-time-html --config-file=/etc/goaccess.conf --daemonize [Install] WantedBy=multi-user.target
Добавляем службу в автозагрузку
sudo systemctl daemon-reload sudo systemctl enable goaccess.service sudo systemctl start goaccess
Проверим всё ли работает как надо
# статус службы systemctl status goaccess # процессы слушающие порт 7890 lsof -i tcp:7890
Ну и собственно на нашей страничке /loganalize/ всё должно обновляться онлайн.
Для создания отчета из всех log файлов и gz архивов из папки используем команду
zcat -f /var/log/apache2/domains/wp.ru.log* | goaccess -a -o /home/admin/web/wp.ru/public_html/loganalize/report.html -
Этот отчет не является интерактивным, поэтому откроем под root crontab -e и пропишем ежедневную cron задачу
@daily zcat -f /var/log/apache2/domains/wp.ru.log* | goaccess -a -o /home/admin/web/wp.ru/public_html/loganalize/report.html -
Кстати, для создания интерактивного отчета не обязательно создавать службу, можно и через крон запустить демон при загрузке, такой вариант проще
@reboot goaccess /var/log/apache2/domains/wp.ru.log -a -o /home/admin/web/wp.ru/public_html/loganalize/index.html --real-time-html --daemonize
Итого: установить, настроить, открыть порт 7890 и добавить 2 строчки в crontab
Вообще пакет goaccess позволяет создавать различные отчеты, может работать с потоками, что дает возможность их фильтровать на уровне командной строки, применять различные встроенные в пакет фильтры и т.д. Приведу несколько примеров:
tail -f access.log | goaccess - # быстрый отчет в реальном времени прямо в терминале goaccess access.log # простой отчет goaccess access.log -a -o report.html # html отчет tail -f -n +0 access.log | grep --line-buffered 'Firefox' | goaccess -o out.html --real-time-html - # html отчет в реальном времени с начала файла и применяя фильтр goaccess access.log access.log.1 # комбинированный отчет из нескольких лог файлов zcat access.log.*.gz | goaccess access.log - # комбинированный отчет из сжатых файлов и простого лог файла zcat -f /root/logs/access.log* | grep '.mp4"' | goaccess -a -o /home/admin/web/wp.ru/public_html/loganalize/report.html - # отчет по запросам .mp4 файлов из всех файлов и архивов в папке logs zcat -f /root/logs/access.log* | grep -E ' "GET /video/[0-9]+\.mp4' | goaccess -a -o /home/admin/web/wp.ru/public_html/loganalize/report.html - # аналогичный вариант, но более точный
Хороший инструмент. Зачем он мне нужен на локалке… я не знаю. Чтобы не шастал кто попало, директорию loganalize не помешает защитить паролем при помощи .htaccess установив http авторизацию.