Очень часто администраторы и владельцы сайтов сталкиваются с вопросом анализа логов доступа к сайту. Некоторые хотят получить статистику просмотров страниц, сколько пользователей зашло с определенных стран и много подобной аналитики. Этот проблему может решить подключение аналитики от Google. Но что нам делать, если мы хотим статистику обращений к нашему REST API? Можно логировать все запросы в базу, настраивать системы мониторинга, а можно просто проанализировать логи веб-сервера. Что я в свою очередь и сделал.
Поскольку я в последнее время переключился больше на разработку веб приложений используя React, Redux, Laravel, Go, RoR, потребовалось в нескольких нагруженных проектах оптимизировать как фронтовую часть приложения так и бэкенд. Для выявления узких мест мы использовали и профилирование, и мониторинг памяти, и журналирование. Со временем нам потребовалась легковесная система анализа логов веб-сервера, которая поможет обнаружить к каким эндпоинтам нашего API чаще всего обращается клиент и продумать дальнейшие оптимизации.
В процессе поиска я наткнулся на очень интересную утилиту — goaccess
. Как оказалось, эта утилита есть почти во всех дистрибутивах linux (в Ubuntu точно есть). А использовать её проще просто, мы просто выполняем команду goaccess -a -f /var/log/nginx/access.log
и всё, просматриваем прямо в консоли всю нужную информацию.
На этом можно было бы и закончить статью, но goaccess может нам формировать статическую страницу с отчетом, которую мы потом можем открыть в браузере и посмотреть.
Подготовка
- Ubuntu (17.10)
- goaccess
- Nginx
- access лог одного из виртуальных хостов
Установка GoAccess
Как я писал выше, эта утилита уже идет во многих дистрибутивах Linux, однако если у вас её нет, выполните команды:
Debian/Ubuntu
echo "deb http://deb.goaccess.io/ $(lsb_release -cs) main" | sudo tee -a /etc/apt/sources.list.d/goaccess.list wget -O - https://deb.goaccess.io/gnugpg.key | sudo apt-key add - sudo apt-get update sudo apt-get install goaccess
Fedora
yum install goaccess
Gentoo
emerge net-analyzer/goaccess
FreeBSD
pkg install sysutils/goaccess
Анализируем логи
Для вывода результата в терминал у нас уже есть команда:
goaccess -a -f /var/log/nginx/access.log
Чтобы сформировать страницу с результатом, вводим команду:
goaccess /var/log/nginx/access.log -o /var/www/html/index.html --log-format=COMBINED
Естественно пути к фалу лога и файлу для вывода указываем свои)
Таким образом мы можем получить приятный визуальный отчет прямо в браузере. Демонстрацию страницы с результатом можете посмотреть по ссылке.
Вы также можете поставить задание в кроне, чтобы логи автоматически анализировались, однако при таком подходе есть один нюанс. В зависимости от настроек ротации логов вы можете получать результат за определенный промежуток времени. У нас сейчас файл лога веб-сервера настроен на ротацию раз в 7 дней, таким образом мы можем видеть результат работы утилиты за этот промежуток времени. Обращайте на это внимание)
Как использовать планировщик задач я писал в одной из своих статтей.