Сравнение библиотек логирования

Сервер

На сервере надо принять переданные логи и разложить их по каталогам, в соответствии с IP передающего хоста и временем получения: . Для того, чтобы задать имя лог-файла в зависимости от содержания сообщения, мы также можем использовать шаблоны. Переменную нужно будет задать внутри RuleSet перед использованием шаблона.

Загрузим нужные модули и выключим , иначе в принятых логах все переводы строки заменятся на

Теперь создадим RuleSet, разбирающий прилетевшие логи и раскладывающий их по папкам. Службы, полагающиеся для логирования исключительно на syslog, ожидают, что он сохранит время сообщения. Поэтому логи, прилетевшие со стандартными facility, мы будем сохранять в формате syslog, а для прилетевших с facility local0-local7 будем вынимать имя лога из поля , и записывать только само сообщение без остальных полей syslog. Проблема с приклеенным к сообщению пробелом остаётся для RELP, потому что возникает ещё на этапе разбора сообщений, мы будем этот пробел отрезать.

Для увеличения производительности будем писать асинхронно: и с большим буфером . Не будем сбрасывать буфер после каждого полученного сообщения , но будем это делать каждую секунду, чтобы логи появлялись на лог-сервере достаточно оперативно: .

Выбор софта

Зачем вообще нужен syslog-сервер, когда есть elastic beats, logstash, systemd-journal-remote и ещё много новых блестящих технологий?

  • Это стандарт для ведения логов в POSIX-совместимых системах.
    Некоторый софт, например haproxy, использует только его. То есть совсем избавится от syslog вам всё равно не удастся
  • Его использует сетевое железо
  • Сложнее в настройке, но богаче по возможностям, чем альтернативные решения.
    Например, Elastic Filebeat до сих пор не умеет inotify.

Наблюдение: пользователи пытаются ввести номер карты в любое поле ввода на странице, и норовят сообщить его саппорту вместе с CVV.

Использование конфигурации логгера

Далее, позвольте мне объяснить, что происходит, когда вы пытаетесь залогировать какое-нибудь сообщение. Как вы могли догадаться, логгер берет цепочку приемников для уровня логирования этого сообщения. Затем он начинает обрабатывать звенья этой цепи одно за другим. Для каждого звена логгер решает, нужно ли записывать сообщение в приемник, указанный в звене, и следует ли после этого продолжать обработку цепочки. Эти решения принимаются с помощью фильтров. Разрешите мне показать, как фильтры работают в NLog.

Вот как фильтры задаются в конфигурации:

Как вы могли догадаться, если фильтр возвращает или , сообщение не будет записано в приемник. Если результат работы фильтра — или , сообщение будет записано. Но в чем разница между и и между или ? Это просто. В случае и NLog прекращает обработку цепочки приемников и не пишет ничего в приемники, содержащиеся в последующих звеньях.

Enabling Combat Logging

Before doing any logging in World of Warcraft, you need to make sure that Advanced Combat Logging is enabled. This is required in order for logs
to be accepted on the site. Go to the Network pane of System preferences in-game.

Advanced Combat Logging must be turned on before you do any logging!

To enable combat logging in World of Warcraft, just go to your chat window and type /combatlog. That’s all you have to do! Now everything you
and the players and enemies around you do will be written to a file called WoWCombatLog.txt. This file can be found in the Logs subdirectory
of your WoW installation. When you’re all done, you can just exit the game or type /combatlog again to turn logging off.

Are there add-ons to help me with combat logging?

Yes. You can use add-ons like Loggerhead, DBM or Ask Mr. Robot to have logging turn on automatically in raids and turn off when you leave. It is very
important when using Warcraft Logs that you log the entire raid though. DBM’s auto logging feature, for example, only logs bosses, and this will cause
it to not log pet summons. This can lead to problems where pets won’t be connected with owners.

If possible we always recommend that you log the entire raid night. Do not leave trash and events that occur outside of the combat out of the log.

Обработка сообщений

  • Все сообщения приходят из Input (их может быть много) и попадают на обработку в привязанный к нему RuleSet. Если это явно не задано, то сообщения попадут в RuleSet по-умолчанию. Все директивы обработки сообщений, не вынесенные в отдельные RuleSet-блоки, относятся именно к нему. В частности, к нему относятся все директивы из традиционного формата конфигов:
  • к Input привязан список парсеров для разбора сообщения. Если явно не задано, будет использоваться список парсеров для разбора традиционного формата syslog
  • Парсер выделяет из сообщения свойства. Самые используемые:
    • — сообщение
    • — сообщение целиком до обработки парсером
    • , — DNS имя и IP адрес хоста-отправителя
    • , — facility в числовой и текстовой форме
    • , — то же для severity
    • — время из сообщения
    • — поле TAG
    • — поле TAG с отрезанным id процесса: ->
  • RuleSet содержит список правил, правило состоит из фильтра и привязанных к нему одного или нескольких Actions
  • Правила применяются последовательно к сообщению, попавшему в RuleSet, на первом сработавшем правиле сообщение не останавливается
  • Чтобы остановить обработку сообщения, можно использовать специальное discard action: или в легаси-формате.
  • Как правило, Action использует модуль вывода(«om…») или модуль изменения сообщения(«mm…»). Вот некоторые из них:

Где находятся логи сервера?

Расположение журналов, зависит в первую очередь от используемой вами операционной системы.

Логи серверов с CentOS, или Fedora, хранятся в дирректории «/var/log/».

Названия файлов:

  • Журнал ошибок – «error.log»;
  • Журнал nginx – «nginx»;
  • Журнал доступов – «log»;
  • Основной журнал – «syslog»;
  • Журнал загрузки системы – «dmesg».

Логи ошибок, связанных с работой MySQL, находятся в директории «/var/lib/mysql/», в файле «$hostname.err».

Для операционных систем Debian и Ubuntu, логи сервера располагаются в папке «/var/log/», в файлах:

  • Nginx – журнал nginx;
  • /mysql/error.log – журнал ошибок для баз данных MySQL;
  • Syslog – основной журнал;
  • Dmesg – загрузка системы, драйвера;
  • Apache2 – журнал веб-сервера Apache.

Как видите, у всех ОС, основанных на Linux, логи сервера, как правило имеют одинаковые названия, и директории.

С логами для Windows server, дело обстоит несколько иначе. Если нужно просмотреть журналы, необходимо войти в систему, нажать клавиши «Win» и «R», после чего откроется окно просмотра событий, где есть возможность подобрать интересующие нас логи.

Если вы хотите посмотреть логи PowerShell, то необходимо открыть программу и ввести команду: «Get-EventLog -Logname ‘System’».

Все данные будут выведены в виде удобной таблицы.

Как правильно читать логи сервера?

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

Итак, запись лога доступа, из файла access.log:

mysite.biz 25.34.94.132 – – [21/Nov/2017:03:21:08 +0200] “GET /blog/2/ HTTP/1.0” 200 18432 “-” “Unknow Bot (http://www.unknow.com/bot; bot@unknow.com)”

Что она обозначает:

  • mysite.biz – домен сайта, которым вы интересуетесь;
  • 34.94.132 – IP-адрес, который использовал пользователь при заходе на сайт;
  • [21/Nov/2017:03:21:08 +0200] – дата, точное время и часовой пояс пользователя;
  • GET – запрос, который отправляется для получения данных. В том случае, если пользователь передает данные, запрос будет «POST»;
  • /blog/2/ – относительный адрес страницы, к которой был обращен запрос;
  • HTTP/1.0 – используемый протокол;
  • 200 – код ответа на запрос;
  • 18432 – количество данных, переданных по запросу, в байтах;
  • Unknow Bot (http://www.unknow.com/bot; bot@unknow.com) – данные о роботе, или реальном человеке, который зашел на сайт. В том случае, если это человек, будет отображена ОС, тип устройства и т.д. В конкретном примере на сайт зашел робот-парсер, принадлежащий ресурсу unknow.com.

Теперь можно заблокировать доступ для ботов от этого сайта, либо от всех, кто пользуется этим IP, разумеется, если в этом есть необходимость.

Логи ошибок, можно посмотреть в файле с говорящим именем – error.log. Они выглядят следующим образом:

PHP Notice: Undefined variable: moduleclass_sfx in

/var/data/www/mysite.biz/modules/contacts/default.php on line 13

Что здесь написано?

  1. Дата, время и тип ошибки, а также IP-адрес, который использовал посетитель;
  2. Тип события, в данном случае – «PHP Notice» (уведомление), а также уточнение, что в данном случае, мы имеем дело с неизвестной переменной;
  3. Местоположение файла с уведомлением, а также строка, на которой оно находится.

Если говорить просто, то в данном случае мы имеем сообщение о том, что первого октября, в 18:23, 2019-го года, произошла ошибка, связанная с модулем контактов.

Разумеется, даже после расшифровки, полученные данные не так просто проанализировать. Именно поэтому, для удобной обработки данных из логов сервера, используется различное программное обеспечение. К таким программам относятся: Awstats, Webtrends, WebAlyzer, и многие другие.

Сегодня существует множество платных и бесплатных вариантов программ, для обработки и анализа лог-файлов.

tail -F. Если файл был переименован или удален

Обычно в Linux лог-файлы записываются не до бесконечности, иначе такой файл было бы очень неудобно в дальнейшем использовать. Вместо этого применяется так называемая ротация файлов. Когда лог-файл становится большим, то он либо удаляется, либо переименовывается (создается резервная копия файла), а дальнейшие сообщения начинают записываться в новый, пустой файл.

У команды tail есть две опции: -f и -F

  • Если используется опция -f и происходит переименование, отслеживаемого файла, то команда tail продолжает отслеживать уже переименованный файл. Команда tail в данном случае привязывается к идентификатору (inode) файла.
  • Если используется опция -F и происходит переименование, отслеживаемого файла, то команда tail определит это, и как только будет создан новый лог-файл (с тем именем, которое мы указали команде tail), команда tail начнет отслеживать этот новый файл.

Рассмотрим пример.

Будем отслеживать лог-файл /var/log/apache2/error.log. Выполняем команду tail с опцией -F

Если система переместит (переименует) файл error.log в файл error.log.1 и создаст новый файл error.log, то наша команда tail продолжит отслеживать уже новый файл error.log

Если бы мы в этом примере использовали опцию -f, то команда tail продолжила бы отслеживать файл error.log.1, который для нас уже неактуален при просмотре логов в реальном времени.

Что такое логи сервера?

Собственно говоря, само слово «логи сервера», является банальной транслитерацией, от словосочетания «server log», которое переводится как «журнал сервера».

Существуют следующие типы логов:

  • Ошибки – записи, фиксирующие различные сбои в работе сервера, или при обращении к конкретным функциям или задачам. С их помощью можно быстро ликвидировать разные баги и сбои;
  • Доступ – записи, которые фиксируют точные дату и время подключения конкретного пользователя, каким образом он попал на сайт, и т.д. Позволяют проводить аналитическую работу, а также находить уязвимые места, в тех случаях, когда ресурс пытались взломать;
  • Прочее – записи с данными о работе разных компонентов сервера, например, почты.

Разумеется, если вы не наблюдаете никаких проблем, или подозрительных моментов, связанных с работой сервера, то нет никакой необходимости в частом просмотре логов. Тем не менее, специалисты рекомендуют выборочно изучать их, хотя бы раз в год.

С другой стороны, если уже произошло какое-то ЧП, например, сайт резко начал выдавать большое количество ошибок, подвергся спам-атаке, или стремительно возросла нагрузка на сервер, то изучение логов, позволит быстро понять в чем проблема и устранить её.

Тем не менее, для большинства рядовых пользователей записи в log-файлах, представляют собой просто странный набор символов. А значит, нужно понять, как правильно их читать.

Польза логирования

Хорошо организованное логирование позволяет, как минимум, следующее:

  • Знать о том, что что-то идёт не так, как задумано (есть ошибки)
  • Знать подробности ошибки, которые помогут сказать, с кем и где произошла ошибка, и не допустить повтора
  • Знать о том, что всё идёт как задумано (access.log, debug-, info-уровни)

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

Взаимодействие с logrotate

Логи, которые пишет сам rsyslog

Нормально ротируются с использованием схемы по-умолчанию: переименовывается в , создаётся новый . В post-rotate action нужно послать SIGHUP процессу rsyslogd. Замечание: rsyslog не перезагружает конфигурацию при получении SIGHUP, только переоткрывает все лог-файлы.

Логи, записываемые приложением и считываемые rsyslog

Для приложений, способных переоткрывать файлы по запросу(SIGHUP или что-нибудь ещё), дополнительная конфигурация не требуется. rsyslog заметит изменения inode файла и переоткроет его.

Проблемы появляются с опцией logrotate , которая для создаёт его копию и обрезает его до нулевого размера. rsyslog просто прекращяет читать новые строки из такого файла (по крайней мере, пока он не превысит размер до ротации). Начиная с версии 8.16.0, модуль имеет опцию (по-умолчанию , включается ). Эта опция заставляет rsyslog переоткрывать файл при обрезке (inode не изменилась, но размер уменьшился). Опция помечена как «экспериментальная», но у меня в продакшене работает нормально. Для версий старше 8.16.0, можно починить ротацию с с помощью посылки сигнала SIGHUP процессу rsyslogd в post-rotate action.

Замечание: на Debian/Ubuntu по умолчанию вывод и результат работы logrotate нигде не сохраняются, если он сломается — вы не узнаете. Я советую поправить это в .

Типы файлов LOG

Ассоциация основного файла LOG

.LOG

Формат файла: .log
Тип файла: Log File

Файл журнала содержит простой текстовый журнал конкретных событий и их временных меток. Он может быть создан во многих операционных системах, программа установки программного обеспечения или веб-серверов.

Создатель: Unknown Developer
Категория файла: Текстовые файлы
Ключ реестра: HKEY_CLASSES_ROOT\.log

Программные обеспечения, открывающие Log File:

Microsoft Notepad, разработчик — Microsoft Corporation

Совместимый с:

Windows
Mac
Linux

Notepad++, разработчик — Don Ho

Совместимый с:

Windows
Mac
Linux

Apple TextEdit, разработчик — Apple

Совместимый с:

Mac

Ассоциации других файлов LOG

.LOG

Формат файла: .log
Тип файла: AntiVir Report Log File

AntiVir Report Log File является отчет о проверке вирус, который сохраняется в текстовом формате. Он используется для хранения истории антивирусного программного обеспечения.

Создатель: Avira Operations GmbH & Co. KG.
Категория файла: Файлы данных

Программы, открывающие файлы AntiVir Report Log File :

Avira Antivirus Pro 2016, разработчик — Avira Operations GmbH & Co. KG.

Совместимый с:

Windows
Android
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector