Установка Logstalgia для просмотра access log в режиме реального времени
Logstalgia (ранее ApachePong) является инструмент, который поможет вам визуализировать access логи в крутом виде. В основном эта утилита читает access_log и генерирует графический pong-like (это как игра пинг-понг) между веб-сервером Nginx, Apache или Lighttpd и запросов HTTP от ваших клиентов. В своей теме «Установка Logstalgia для просмотра access log в режиме реального времени» я расскажу как установить и использовать Logstalgia на Unix/Linux, а в качестве примеров возьму Debian 8, CentOS6/7 и macOS.
Требования для logstalgia
- Работающий веб сервер должен быть уже установлен;
- Unix/Linux ОС (Fedora, Ubuntu, MacOS, Debian, CentOS);
- Сервер должен иметь поддержку видео с OpenGL.
Установка Logstalgia для просмотра access log в режиме реального времени
Для Fedora/CentOS
Установим все дополнительный компоненты:
# yum install ftgl-devel pcre-devel libpng-devel libjpeg-devel gcc-c++ make gcc glew glew-devel
ВНИМАНИЕ!
Так же стоит установить:
# yum install boost boost-devel SDL-devel SDL_image-devel
Но нужно ставить самые новые версии. Прочитайте полностью статью перед выполнением чего-либо.
Скачиваем исходный код с Logstalgia, распаковываем его, после чего переходим в папку с исходниками и приступаем к сборке:
# cd /usr/local/src && wget https://github.com/acaudwell/Logstalgia/releases/download/logstalgia-1.0.5/logstalgia-1.0.5.tar.gz && tar -xvpzf logstalgia-1.0.5.tar.gz && cd logstalgia-1.0.5
Конфигурим Logstalgia:
# ./configure --prefix=/usr/local
Выполняем установку программы:
# make && make install
В ходе конфигурирования, я получил следующую ошибку:
checking for boostlib >= 1.46... configure: We could not detect the boost libraries (version 1.46 or higher). If you have a staged boost library (still not installed) please specify $BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation. configure: error: Boost Base >= 1.46 is required. Please see INSTALL
Решение стало удаление старого пакета boost и установкой нового ( с исходного кода, т.к нет поддержки данного пакета из rpm):
# yum remove boost-devel
Скачиваем дополнительный пакет:
# cd /usr/local/src && wget http://ufpr.dl.sourceforge.net/project/boost/boost/1.58.0/boost_1_58_0.tar.gz && tar -xvpzf boost_1_58_0.tar.gz && cd boost_*
Выполняем установку:
# ./bootstrap.sh --prefix=/usr/local && ./bjam install --with=all
Если не будет работать, то попробуйте использовать:
# ./bootstrap.sh --prefix=$CMAKE_PREFIX_PATH --libdir=$CMAKE_PREFIX_PATH/lib # ./bjam --layout=system install # export Boost_LIBRARYDIR=$CMAKE_PREFIX_PATH/include/boost/
PS: Можно установить и из репозитория, НО ДЛЯ CENTOS6 x64:
# cd /usr/local/src && wget http://repo.enetres.net/enetres.repo -O /etc/yum.repos.d/enetres.repo # yum install boost-devel
ВНИМАНИЕ! Нужна версия от boost 1.46 и выше.
Получил еще одну ошибку:
configure: error: GLM headers are required. Please see INSTALL
Фиксим:
# rpm -qa |grep -i sdl
и
# yum remove SDL SDL_image
И устанавливаем новые библиотеки SDL2:
# cd /usr/local/src && wget https://www.libsdl.org/release/SDL2-2.0.3.tar.gz && tar -xvpzf SDL2-2.0.3.tar.gz && cd SDL2-*
Конфигурим и выполняем установку:
# ./configure && make && make install
И устанавливаем новые библиотеки SDL2 image:
# cd /usr/local/src && wget https://www.libsdl.org/projects/SDL_image/release/SDL2_image-2.0.0.tar.gz && tar -xvpzf SDL2_image-2.0.0.tar.gz && cd SDL2_image-*
Конфигурим и выполняем установку:
# ./configure && make && make install
Если вы эти библиотеки установлены в нестандартных местах, вы можете то попробуйте добавить эти пути в конфигурационном скрипте, например:
# sh ./configure CPPFLAGS="-I/somewhere/include" LDFLAGS="-L/somewhere/lib"
Если это работает, вы можете добавить /somewhere/lib для вашего LD_LIBRARY_PATH так shared библиотека загружается и работает нормально.
PS: Можно использовать версию 1.2, но крайне не желательно:
Думал после таких долгих манифестов, я наконец-то соберу данный пакет, но не тут то было. Получил следующую ошибку:
configure: error: GLM headers are required. Please see INSTALL
Решением стали следующие действия:
# cd /usr/local/src && wget http://ufpr.dl.sourceforge.net/project/ogl-math/glm-0.9.6.3/glm-0.9.6.3.zip && unzip glm-0.9.6.3.zip && cd glm*
Копируем все содержание (все библиотеки):
# cp -r glm/ /usr/local/include/
Думал уже все, но нет, получил следующее предупреждение:
[...] configure: WARNING: SDL 2.0 libraries not found. Trying SDL 1.2. Please note SDL 1.2 support is deprecated checking for SDL... configure: error: Package requirements (sdl >= 1.2.10 SDL_image) were not met: No package 'SDL_image' found [...]
Исправляем:
# cd /usr/lib64/pkgconfig # ln -s /usr/local/lib/pkgconfig/sdl2.pc # ln -s /usr/local/lib/pkgconfig/SDL2_image.pc
После всех этих действий я нормально сконфигурировал Logstalgia и установил ее на CentOS 6/7.
Для Ubuntu/Debian
Установка Logstalgia для Debian’s операционных систем, очень простая, т.к имеется пакет для установки.
Для начала обновляем ОС:
# apt-get install
И устанавливаем:
# apt-get install logstalgia
Для macOS
Подключаем HOMEBREW (brew), после чего выполняем команду:
# brew install logstalgia
Использование/Тестирование Logstalgia
Единственное что вам нужно сделать, так это запустить logstalgia с access_log, например:
# logstalgia [options] /var/log/nginx/access_log
или
# logstalgia [options] /etc/nginx/logs/access_log
Все зависит от того, где у вас есть журналы доступа, расположенных.
Чтобы просмотреть лог-файл, используйте так же:
# tail -f /var/log/httpd/access.log | logstalgia -
или
# tail -f /var/log/apache2/access.log | logstalgia --sync
Чтобы увидеть все другие поддерживаемые параметры, выполните:
# logstalgia --help
Список команд представлен внизу статьи.
Так же, можно смотреть access.log с удаленного сервера:
# ssh your_user@HOST_or_IP tail -f /path_of_your/access.log | logstalgia --sync
Вы можете при необходимости сохранить вывод с logstalgia в виде видеофайла можно следующим образом:
# logstalgia -1280x720 --output-ppm-stream myvideo.ppm /var/log/apache/access.log
или
# ssh user_name@HOST_or_IP tail -f /var/log/access-linux-notes.org.log | logstalgia -1280x720 --output-ppm-stream --sync output.ppm
Наконец, вы должны преобразовать файл logstalgia c .ppm в .mp4 используя FFmpeg инструмент:
# ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i my_log_video.ppm -vcodec libx264 -preset ultrafast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 log_access_nginx.mp4
ВНИМАНИЕ! Вы можете сразу писать в *.mp4 файл:
# logstalgia -1280x720 --output-ppm-stream - | ffmpeg -y -r 60 -f image2pipe -vcodec ppm -i - -vcodec libx264 -preset ultrafast -pix_fmt yuv420p -crf 1 -threads 0 -bf 0 logstalgia.mp4
Последний пример, занимает большое время для кодирования.
Горячие клавиши Logstalgia
Интерактивные команды с клавиатуры являются:
- c : Выведет логотип Logstalgia.
- n : Шагнуть вперед во времени к следующей записи в log-е.
- + или — : Настройка скорости моделирования.
- < или > : Регулировка шкалы времени.
- Esc : Выход из приложения.
Опции Logstalgia
-f
Полноэкранный режим.
-WxH
Установить размер окна. Если опция «-f» также установлена, то будет пытаться установить режим видео (video mod).
-b, —background FFFFFF
Задать цвет фона в шестнадцатеричной системе.
-x, —full-hostnames
Показать полный запрос IP/hostname.
-s, —simulation-speed
Скорость симуляции. По умолчанию 1 (1 секунда в секунду).
-p, —pitch-speed
Скорость передвежения шариков по экрану (по умолчанию 0,15).
-u, —update-rate
Суммарная страница скорости обновления. По умолчанию 5 (5 секунд).
-g name,(HOST|URI|CODE)=regex,percent[,colour]
Создает новую именованную группу для запросов в которой заданный атрибут (HOST|URI|CODE) соответствует регулярному выражению. Процент определяет вертикальную процент экрана для использования.
Цвет может быть, необязательным, он задается в шестнадцатеричном формате (например, FF0000 — красный), которые будут применяться ко всем меткам.
Примеры:
-g "HTML,URI=html?$,30" -g "Lan,HOST=^192,30" -g "Success,CODE=^[23],30"
Если группы не указаны, то группы по умолчанию являются Images (файлы с изоброжениями), CSS (файлы .css), Scripts (файлы с .js) и Misc’ (разные запросы).
—paddle-mode MODE
Paddle mode (pid, vhost, single).
vhost — отдельный paddle для каждого виртуального хоста в лог-файле.
pid — отдельный paddle для каждого process id в лог-файле.
single — single paddle (по умолчанию).
—paddle-position POSITION
Paddle позиции в качестве доли вида ширины (0,25 — 0,75).
—sync
Чтение из стандартного ввода (STDIN), игнорируя записи до текущего времени.
—from, —to ‘YYYY-MM-DD hh:mm:ss +tz’
Показать записи за определенный период времени.
Если часовой пояс не указан, то используется локальный часовой пояс.
Пример:
"2015-05-25" "2015-05-25 11:00" "2015-05-25 11:00:00 +12"
—start-position POSITION
Запустите в какой-то позиции в лог-файле (между 0,0 и 1,0).
—stop-position POSITION
Остановите в какой-то позиции.
—no-bounce
Нет bouncing.
—hide-response-code
Скрыть response code.
—hide-paddle
Скрыть paddle.
—hide-paddle-tokens
Скрыть paddle токены показанные в режимах multi-paddle.
—hide-url-prefix
Скрыть префикс протокола URL и имя хоста для запросов.
—disable-auto-skip
Отключить автоматический пропуск пустых периодов времени.
—disable-progress
Отключить индикатор.
—disable-glow
Отключить эффект свечения.
—font-size SIZE
Размер шрифта (10 — 40).
—glow-duration
Продолжительность свечения (от 0,0 до 1,0).
—glow-multiplier
Отрегулировать количество свечения.
—glow-intensity
Интенсивность свечения.
-o, —output-ppm-stream FILE
Запись фреймов как файл PPM на выходе (для STDOUT).
-r, —output-framerate FPS
Частота кадров выхода (используется с —output-ppm-stream).
—load-config CONFIG_FILE
Загрузите конфигурационный файл.
—save-config CONFIG_FILE
Сохранить конфигурационный файл с текущими настройками.
logfile
Путь к лог-файлу доступа для чтения или «-«, если вы хотите поставить запись в лог файл с помощью стандартного ввода.
В завершение статьи, я выложу видосик который демонстрирует данную утилиту:
Статья «Установка Logstalgia для просмотра access log в режиме реального времени» завершена.