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, имейте в виду, что существует несколько других типов журналов, которые можно просмотреть и проанализировать с помощью этого инструмента. Если инструмент не распознает конкретный журнал, вы можете создать дополнительные форматы и установить их, следуя приведенным здесь указаниям.
Есть ли у вас какие-либо вопросы или комментарии по поводу этой статьи? Как всегда, дайте нам знать, используя форму ниже. Мы с нетерпением ждем вашего ответа!