Записки IT специалиста
Админу на заметку — 26. Как просматривать лог-файл в режиме реального времени в Windows и Linux
Любая диагностика или наблюдение за состоянием системы начинается с изучения логов. При этом бывают ситуации, когда логи хотелось бы видеть в режиме реального времени, что позволит лучше понять причинно-следственные связи и увидеть реакцию системы на выполняемые действия. То, о чем мы расскажем в данной заметке — известно многим, но, как показывает практика, многие начинающие не знают этих способов, поэтому не будет лишним в очередной раз обратиться к этой теме.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Linux
В Linux подавляющее большинство логов являются обычным текстом, что делает работу с ними возможной при помощи широкого спектра утилит. Одна из них — это tail (англ. хвост), по умолчанию она выводит 10 последних строк указанного текстового файла. А еще она умеет выводить на экран последние строки по мере их добавления. Это как раз то, что нам нужно. Допустим мы хотим видеть в реальном времени лог доступа к сайту:
tail -f /var/log/apache2/access.log
После чего вы сразу увидите на экране 10 последних строк лог-файла и все добавляемые позже в режиме реального времени.
Это удобно, теперь мы можем в одном окне выполнять какие-либо действия, а во втором сразу видеть реакцию на них.
Начинающим администраторам достаточно часто приходится обращаться за помощью к коллегам или на форумы и первое что от них попросят — это логи. Но взять и отправить файл лога целиком — это очень плохая идея, вряд ли кто-то захочет разбираться в чужих логах, да и вы тем самым покажете свое неуважение к тем, кто хотел бы вам помочь. Отправить случайный участок лога, в надежде что кто-то в нем разберется? Тоже нехорошо.
А тем временем сделать правильно очень просто. Достаточно использовать приведенную выше команду и направить ее вывод в файл:
tail -f /var/log/apache2/access.log > ~/my_log.log
На экране теперь строки лога появляться не будут, они будут записаны в файл my_log.log в домашней директории. После чего выполните с системой необходимые действия, результат которых должен попасть в лог, прервите действие команды по Ctrl+C и можете смело описывать проблему коллегам, не забыв приложить полученный файл.
Также вы можете использовать другие утилиты для обработки результатов вывода, допустим вам нужно убрать из лога сообщения, относящиеся к другим узлам сети и оставить только собственные. Так как в нашем логе фиксируется IP источника можно очень просто отфильтровать записи:
tail -f /var/log/apache2/access.log | grep 192.168.16.187 > ~/my_log.log
Здесь мы перенаправили выходной поток от tail на вход команды grep, которая выберет только те строки, в которых присутствует искомый адрес. Подобную конструкцию можно использовать и при интерактивном выводе на экран.
А если мы хотим одновременно видеть лог на экране и при этом записывать его в файл? Все просто, вместо перенаправления вывода передадим результат по конвейеру еще одной команде:
tail -f /var/log/apache2/access.log | grep 192.168.16.187 | tee ~/my_log.log
Здесь мы использовали команду tee (тройник), которая одновременно выводит переданный ей стандартный поток ввода на экран и записывает в указанный файл.
Windows
Системные логи Windows хранятся в Журналах событий, которые имеют специализированный формат и хранятся в файлах .evt и .evtx, которые просмотреть подобным образом не удастся, но логи многих системных служб и приложений используют простой текстовый формат, а следовательно дают возможность работать с ними интерактивно.
В качестве аналога команды tail используем один из командлетов PowerShell:
Get-Content C:\OpenVPN\log\openvpn.log -Wait
Данная команда выведет на экран весь лог и продолжит отображать новые строки. Если лог большой, то это может быть неудобно, поэтому добавим в команду еще один параметр, в котором укажем какое количество последних строк мы хотим видеть, допустим пять:
Get-Content C:\OpenVPN\log\openvpn.log -Wait -Tail 5
Точно также мы можем перенаправить вывод команды в файл:
Get-Content C:\OpenVPN\log\openvpn.log -Wait -Tail 5 > S:\my_log.log
Или выполнить отбор по интересующему нас вхождению используя возможности РowerShell, например отберем только события AUTH_FAILED, включив в отбор также последние сто строк лога:
Get-Content C:\OpenVPN\log\openvpn.log -Wait -Tail 100 | where
Точно также, как и в Linux мы можем одновременно просматривать и записывать логи, для этого используем аналогичную команду Tee-Object:
Get-Content C:\OpenVPN\log\openvpn.log -Wait -Tail 100 | where < $_ -match "AUTH_FAILED">| Tee-Object -FilePath S:\my_log.log
В данной заметке мы не претендовали на всестороннее освещение затронутой темы, а всего лишь хотели напомнить о существовании удобных инструментов для интерактивной работы с текстовыми логами. Надеемся данный материал окажется вам полезен.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Помогла статья? Поддержи автора и новые статьи будут выходить чаще:
Или подпишись на наш Телеграм-канал:
Linux просмотр реального времени
Добро пожаловать! Меня зовут Григорьев Иван, я Full Stack Developer. В основном пишу на PHP (Nette, Laravel), Python (Django, DRF), Vue (Quasar Framework). Опыт профессиональной разработки более 10 лет.
Работаю в компании MACRO разработчиком. В свободное время оказываю консультации по разработке ПО.
Пишу о:
Просмотр логов в реальном времени на Linux
Некоторые приложения сохраняют информацию о своем состоянии или исторические данные процесса выполнения в лог-файлах. Возникает необходимость просмотреть изменениия лог файла или файлов в реальном времени. Это могут быть запросы к веб-серверу NGINX или результат работы утилиты curl при скачивании большого количества данных.
Например, я переодически люблю поглядывать как работают мои боты для Telegram, у которых нет внешней базы для хранения статистики.
Утилита tail
Утилита которую я использую для просмотра логов в реальном времени, довольно популярна, но новички в Linux могут о ней не знать. Это утилита tail . Переводится название с английского как хвост, что полностью отражает суть утилиты.
По умолчанию, tail просто выводит 10 последних строк файла:
tail /var/log/nginx/access.log
5.101.0.209 - - [17/Apr/2020:11:24:48 +0000] "GET /solr/admin/info/system?wt=json HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" 5.101.0.209 - - [17/Apr/2020:11:30:02 +0000] "GET /?a=fetch&content=die(@md5(HelloThinkCMF)) HTTP/1.1" 200 396 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" 5.101.0.209 - - [17/Apr/2020:11:30:03 +0000] "GET /?XDEBUG_SESSION_START=phpstorm HTTP/1.1" 200 396 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" 5.101.0.209 - - [17/Apr/2020:11:36:26 +0000] "GET /index.php?s=/Index/\x5Cthink\x5Capp/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=HelloThinkPHP HTTP/1.1" 404 209 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36" 192.241.239.88 - - [17/Apr/2020:11:54:02 +0000] "GET /hudson HTTP/1.1" 404 152 "-" "Mozilla/5.0 zgrab/0.x" .
В результате примера, кстати, видно что веб-сервер сканируют боты поиска уязвимостей. Такие боты в автоматическом режиме сканируют сервера в сети интернет, находят сервера с уязвимым ПО (это может быть система управления сайтом или панель управления сервером) и эксплуатируют уязвимость. Потом такой сервер становится частью ботнета или же с него выполняются незаконные действия. Так что мой совет: не используйте никогда устаревшее ПО, следите за регулярными обновлениями.
Параметры утилиты tail
Изменить количество выводимых строк можно параметром -n или просто указав количество числовым параметром, например -2 :
tail -2 /var/log/nginx/access.log
В результате отобразится две последних строки лог-файла.
А вот для отслеживания изменений необходим параметр -f :
tail -f /var/log/nginx/access.log
Можно также комбинировать команды, например выводить только две последних строки файла при изменении лог-файла:
tail -f -2 /var/log/nginx/access.log
Что бы остановить выполнение утилиты и выйти из просмотра файла, нажмите Ctrl + C .
Рад был поделиться информацией с вами, а вы в свою очередь делитесь моей заметкой в социальных сетях и отправляйте друзьям и коллегам.