Анализ логов при помощи GoAccess в реальном времени и за периоды из gz архивов

В этой статье рассмотрим отслеживание логов в реальном времени при помощи инструмента goaccess , а также создание симпатичных отчетов из всех имеющихся логов в папке, включая сжатые gz архивы.

Устанавливаем пакет goaccess так как указано на сайте производителя. Настраиваем в /etc/goaccess.conf формат логов, времени и даты. Первым делом, для обновления отчетов в реальном времени нам необходимо открыть порт 7890. В VestaCP это делается просто добавлением нового правила в файрвол

Файрвол vesta открываем порт 7890
Файрвол vesta открываем порт 7890

Либо открыть порт можно так:

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

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

Отчет goaccess в реальном времени
Отчет goaccess в реальном времени

Пока убъем процесс 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 авторизацию.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *