Поиск по сайту:

lnav — просмотр и анализ журналов Apache из терминала Linux


Менее двух недель назад атака программы-вымогателя Wannacry скомпрометировала тысячи компьютеров, нанеся значительный ущерб как крупным компаниям, так и частным лицам. Это, наряду с другими широко распространенными уязвимостями, обнаруженными в последние годы (такими как ошибка Shellshock), подчеркивает важность постоянного контроля над критически важными системами.

Хотя уязвимости часто нацелены на одну конкретную операционную систему или программный компонент, изучение входящего и исходящего трафика вашей сети может оказаться существенным подспорьем для защиты активов, за которые вы несете ответственность.

Рекомендуется к прочтению: 4 хороших инструмента мониторинга и управления журналами с открытым исходным кодом для Linux

Как я уверен, вы уже знаете, системные журналы — это первое место, где нам следует искать эту информацию. Чтобы упростить эту задачу, в этой статье мы объясним, как установить и использовать lnav, расширенное средство просмотра файлов журналов. С помощью lnav вы сможете одновременно просматривать несколько типов логов, перемещаться по файлу с помощью горячих клавиш и генерировать сводную гистограмму обращений и ошибок. Так что продолжайте читать!

Установка и запуск lnav в Linux

Чтобы установить lnav, используйте систему управления пакетами вашего дистрибутива.

aptitude install lnav          [Debian and derivatives]
yum install epel-release lnav  [CentOS 7 and similar]

После завершения установки запустите lnav, указав абсолютный путь к каталогу, в котором расположены журналы, которые необходимо просмотреть. Поскольку обычно это будет /var/log, давайте сделаем:

lnav /var/log/httpd

чтобы просмотреть журналы веб-сервера Apache в CentOS 7:

Давайте кратко рассмотрим результат, показанный на предыдущем изображении:

  • В правом верхнем углу показаны файлы, проверяемые в данный момент (access_log-20170519 и access_log). Прокручивая вниз или вверх, вы заметите, что имена файлов могут меняться при переходе от одного к другому.
  • Ответы 40x HTTP (например, Не найден или Запрещено) отображаются жирным шрифтом, тогда как ответы 20x отображаются в обычном тексте.
  • IP-адреса выделены жирным зеленым цветом.

Это, конечно, выглядит красиво, не так ли? Но давайте теперь копнем немного глубже, и мы увидим, что lnav предоставляет гораздо больше, чем просто красивый цветной вывод.

Если вам интересно, почему не отображаются журналы ошибок, вы найдете ответ позже в этой статье. Так что продолжайте читать!

Изменение вывода с помощью параметров и горячих клавиш

Прежде чем двигаться дальше, давайте перечислим несколько горячих клавиш, которые позволят нам легче перемещаться по выводам lnav и доступным представлениям:

  • e или E для перехода к следующему/предыдущему сообщению об ошибке.
  • w или W для перехода к следующему/предыдущему предупреждающему сообщению.
  • b или Backspace для перехода на предыдущую страницу.
  • Пробел для перехода на следующую страницу.
  • g или G для перемещения вверх/вниз текущего представления.

При ротации журналов старые файлы могут сжиматься (или нет) в зависимости от настроек, указанных в файлах конфигурации logrotate. Чтобы включить сжатые файлы в выходные данные, запустите lnav следующим образом:

lnav -r /var/log/httpd

Если вы хотите поближе познакомиться с тем, как работает lnav, вы можете запустить программу с опцией -d, за которой следует имя файла, в который будет записана отладочная информация, например:

lnav /var/log/httpd -d lnav.txt

В этом примере отладочная информация, создаваемая при запуске lnav, будет записана в файл с именем lnav.txt внутри текущего рабочего каталога.

Первые несколько строк этого файла показаны на следующем изображении:

Выделенный текст указывает, что lnav загрузил файл форматов по умолчанию, а точнее, формат access_log для анализа журнала доступа Apache. Кроме того, lnav позволяет анализировать каждую строку вывода, чтобы результат было легче визуализировать и понимать.

Рекомендуется к прочтению: Анализатор журналов веб-сервера GoAccess (Apache и Nginx в реальном времени)

Чтобы использовать эту функцию, запустите программу и выберите строку, которую вы хотите проанализировать. Выбранная строка всегда находится в верхней части окна. Затем нажмите p, и вы должны увидеть следующий результат:

Чтобы вернуться в обычный режим, нажмите p еще раз.

Теперь, если вы хотите просмотреть сводку журналов по дате и времени, нажмите i. Например, выделенный текст указывает, что в понедельник, 10 апреля, между 22:00 и 23:00 было выполнено 37 HTTP-запросов, 14 из которых привели к ошибкам.

После того как вы определили потенциальную проблему на основе гистограммы, как показано выше, вы можете нажать i, чтобы выйти из представления и изучить ее более подробно с помощью синтаксического анализатора, как объяснялось ранее. Или вы также можете использовать встроенные возможности SQL, введя точку с запятой и написав стандартный запрос. Например, сделайте:

;.schema

для просмотра доступных таблиц в схеме базы данных. Определив нужную таблицу (в нашем случае access_log), давайте нажмем q, а затем воспользуемся следующим запросом, чтобы вернуть всю доступную информацию о запросах, поступающих с адреса 195.154.230.31:

;SELECT * FROM access_log WHERE c_ip='195.154.230.31'

Обратите внимание, что мы могли бы также отфильтровать результаты по log_time. Суть в том, что добавьте немного SQL, и нет предела тому, что вы можете сделать с lnav.

Форматы журналов Apache по умолчанию

Многие форматы журналов по умолчанию загружаются с помощью lnav и поэтому анализируются без нашего вмешательства. Посмотреть список можно в разделе «Форматы журналов» официальной документации.

Форматы по умолчанию указаны в ~/.lnav/formats/default/default-formats.json.sample, а другие можно добавить ~/.lnav/formats с помощью расширение.json.

Однако редактирование этих файлов требует определенной степени знания JSON (нотация объектов Javascript) и библиотеки PCRE (Perl-совместимые регулярные выражения).

Так почему же lnav не отображал файлы журнала ошибок Apache? Причина в том, что эти журналы не соответствуют никаким регулярным выражениям в существующих файлах формата и поэтому рассматриваются как обычные текстовые файлы (то есть файлы без заданного формата журнала).

Рекомендуется к прочтению: Как отслеживать загрузку веб-сервера Apache и статистику страниц

Как упоминалось ранее, вы можете создавать свои собственные форматы, если хотя бы немного знакомы с JSON и PCRE. Это может пригодиться, например, если вы определили собственные журналы Apache.

Краткое содержание

Хотя мы использовали журнал доступа Apache, чтобы продемонстрировать, как использовать lnav, имейте в виду, что существует несколько других типов журналов, которые можно просмотреть и проанализировать с помощью этого инструмента. Если инструмент не распознает конкретный журнал, вы можете создать дополнительные форматы и установить их, следуя приведенным здесь указаниям.

Есть ли у вас какие-либо вопросы или комментарии по поводу этой статьи? Как всегда, дайте нам знать, используя форму ниже. Мы с нетерпением ждем вашего ответа!