Как проанализировать время выполнения из журнала? - PullRequest
0 голосов
/ 26 июня 2011

Я использую log4j с шаблоном преобразования %d ..., который заставляет каждое сообщение журнала начинаться с отметки времени, например: 2011-06-26 14:34:16,357.Я регистрирую каждый SQL-запрос, который я отправляю.

Я хотел бы проанализировать дельты между запросами SQL и, возможно, даже агрегировать многократное выполнение одного и того же запроса SQL для максимального и среднего времени.

Как бы вы подошли к этому?используя grep и некоторые работы Excel?Есть ли какой-нибудь общий способ / инструмент / сценарий, который облегчит мою жизнь?

PS Чтобы сделать вещи более раздражающими, мой SQL-код является многострочным, поэтому log4jdbc sqltiming logger печатает их так:

2011-06-26 14:43:32,112 [SelectCampaignTask ] INFO : jdbc.sqltiming - CREATE INDEX idx ON tab CRLF
USING btree (id1, id2, emf);  {executed in 34788 msec}

Ответы [ 3 ]

1 голос
/ 27 мая 2013

Я только что решил ту же проблему, написав небольшой скрипт на Python.Я совершенно новичок в Python, и я смог заставить его работать менее чем за пару часов.

Вот ключевые части моего кода:

import re
logfile = open("jdbcPerf.log", "r").readlines()
#extract the interesting lines
for line in logfile:
    m= re.search('^((\d+)-(\d+)-(\d+)) | ({executed )', line)
    if m:
        print m.group()
#extract name of servlet and execution time
for line in selectedLines:
    #extract servlet name
    m = re.search('servlets.([a-zA-Z]*).([a-zA-Z]*)', line)
    if m:
         print m.group()            
    #extract execution time
    m = re.search('( \d+ )',line)
    if m:
         print m.group()

Вы можете использовать это в качестве каркаса для выполнения агрегирования данных, которое вам нужно.

Мой файл журнала выглядиткак это:

2013-05-26 08:22:10,583 DEBUG [jdbc.sqltiming]   
com.myclass.servlets.BrowseCategories.categoryList(null:-1)
16. select category0_.id as id, category0_.name as name from categories category0_
{executed in 7 msec}
1 голос
/ 28 марта 2014

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

Для этого сначала необходимо описать (в LogMX) формат журнала, используя шаблон Log4j или регулярное выражение.

PS: вы можете экспортировать файлы журналов из командной строки, используя этот инструмент (предусмотрен режим консоли).

1 голос
/ 26 июня 2011

Я хотел бы написать сценарий Groovy / Perl / Python для выделения журналов с помощью регулярного выражения.

Если вы выгружаете вывод в CSV, вы, безусловно, можете использовать Excel для сбора данных.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...