Как разбирать журналы sql и ubuntu

Я хочу проанализировать следующие журналы в python, которые находятся в формате объекта json. Может ли кто-нибудь подсказать мне, как это сделать на Python?

mysqllog:

2015-11-10 15:26:56 4348 [Note] InnoDB: Memory barrier is not used

журнал Ubuntu:

2018-10-12T04:25:39.841627Z        5 Init DB    mysql

какой формат ввода и ожидаемый формат вывода?

lu5er 26.10.2018 08:02

#input находится в json: mysqlmessage = {"meta": {"clientID": 1234,}, "logType": "<SYS / MYSQL / APACHE>", "logDetails": ['2015-11-10 15:26 : 56 4348 [Примечание] InnoDB: Использование мьютексов для ссылки на страницы пула буферов ',]}

Payal 26.10.2018 08:13

вывод: дата: 10.11.2015 время: 15:26:56 код: 4348 описание: [примечание] InnoDB: использование мьютексов для ссылки на страницы пула буферов

Payal 26.10.2018 08:16

что ты уже испробовал?

Asunez 26.10.2018 08:25

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

Payal 26.10.2018 08:28

Каков ожидаемый результат для журналов ubuntu?

Asunez 26.10.2018 08:31

Покажи мне свою программу.

Marichyasana 26.10.2018 08:56
2
7
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Журналы MySQL

Взгляните на следующее регулярное выражение:

(\d{4}-\d{2}-\d{2})\s*(\d{2}:\d{2}:\d{2})\s*(\d{4})\s*(.*)

Полное объяснение можно увидеть в демонстрации регулярных выражений ниже, но в основном он ищет:

  • свидание (1-я пара ())
    • первые 4 цифры (\d{4}) для года, за которыми следуют -
    • две цифры месяца (\d{2}) с последующим тире
    • еще две цифры дня (\d{2})
  • набор из 0 или более пробелов
  • время (вторая пара (), такая же логика, как и с датой, только разделенные двоеточиями (:)
  • набор из 0 или более пробелов
  • еще 4 цифры (\d{4}) для кода (если у него может быть любой другой номер, вы можете пропустить фигурные скобки и добавить вместо них +, для \d+ - это запросит одну или несколько цифр)
  • набор из 0 или более пробелов
  • все, что упущено (так что это будет описание)

MySQL журналы Regex демонстрация


Журналы Ubuntu

Если я правильно угадал вывод журналов Ubuntu, он более или менее совпадает с журналами MySQL, поэтому я не буду публиковать полное объяснение - вы всегда можете проверить его в демонстрации Regex101 ниже.

Регулярное выражение выглядит следующим образом:
(\d{4}-\d{2}-\d{2})T(\d{2}:\d{2}:\d{2})(?:\.\d+Z)\s*(\d+)\s*(.*)

Некоторые примечания по этому поводу:

  • Основное изменение заключается в том, что он по-разному разделяет дату и время, поэтому T в этом регулярном выражении
  • он также сохраняет миллисекунды (?) после секунд, используя формат .##### - я отказаться эту информацию вместо (если вам это нужно, дайте мне знать)
  • остальное в основном то же самое

Ubuntu регистрирует демонстрацию Regex

Вот обновленная демонстрация Ubuntu, которая также хранит миллисекунды и не рассматривает 5 как код, а как часть описания: Ссылка на демо

Спасибо за решение. У меня это сработало. Не могли бы вы также прислать решение для журналов Ubuntu?

Payal 26.10.2018 09:00

Предоставьте пример вывода для журналов ubuntu, и я обновлю ответ

Asunez 26.10.2018 09:01

ввод: 2018-10-12T04: 25: 39.841627Z 5 Инициализация базы данных mysql: дата: 2018-10-12 время: 04:25:39 841627Z описание: 5 Инициализация базы данных mysql

Payal 26.10.2018 09:10

Я обновил ответ. Сообщите мне, в порядке ли формат. О, и я подумал, что этот 5 в этой строке - это код, как в журналах MySQL

Asunez 26.10.2018 09:11

Подскажите, пожалуйста, как разбирать и миллисекунды?

Payal 26.10.2018 09:16

@Payal Снова отредактировал, посмотрите

Asunez 26.10.2018 09:17

Другие вопросы по теме