Необходимо найти максимальную разницу между двумя последовательными временными метками из нескольких временных меток, которые зарегистрированы в одном файле журнала - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть некоторые файлы журналов, которые регистрируются на сервере Unix внешним приложением.В этих файлах есть все операторы журналирования, которые начинаются со значения метки времени, за которым следует текст журнала.Пример того, как ведение журнала выполняется в этих файлах, показан ниже:

02 07: 31: 05.578 регистрация текста ........ (Я выделил здесь метку временипотому что я буду использовать его для объяснения этой записи отметки времени ниже)

02 07: 31: 05.579 текст записи ........

02 07: 31: 05.590 текст записи .........

02 07: 31: 05.591 протоколирование ........

02 07: 31: 05.593 протоколирование ........

Объяснение значения метки времени -

02: значение даты (если дата 02 июля, поэтому значение будет 02)

07: часы

31: минуты

05: секунды

578: миллисекунды

Примечание : Прошу игнорировать, если вы ищете 'YYYY 'т.е. поле года.Для простоты, пожалуйста, придерживайтесь только вышеуказанного формата.

Чего я должен достичь : Мне нужно найти эти две точные метки времени в файле данных, который имеет максимальную разницу между нимивсем остальным парам последовательных временных меток в данном файле.

пример: Если вы видите выше образец журнала регистрации, вы увидите единственную пару последовательных отметок времени в приведенном выше примере с максимальной разницей 02 07: 31: 05.579 и 02 07: 31: 05.590

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

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

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

Спасибо всем за то, что прочитали и уделили нам время.Пожалуйста, дайте мне знать, если потребуется дополнительная информация.

Ответы [ 2 ]

0 голосов
/ 13 сентября 2018

Я бы предложил пройтись по строкам, конвертировать каждую метку времени в время эпохи UNIX (секунды с 1970-01-01, date может это сделать). К сожалению, вам не хватает месяца и года, но, возможно, вы можете просто предположить текущий месяц и год; за исключением границ месяца это должно дать правильные результаты для расстояний в любом случае.

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

02 07:31:05.579 logging text........
02 07:31:05.590 logging text........
02 07:31:05.591 logging text........
02 07:31:05.593 logging text........

Я бы сделал

0.000 02 07:31:05.579 logging text........
0.011 02 07:31:05.590 logging text........
0.001 02 07:31:05.591 logging text........
0.002 02 07:31:05.593 logging text........

Тогда вы можете просто sort -g этот новый вывод отсортировать его по времени между строкой своего предшественника. Последняя строка будет строкой с максимальной разницей по времени.

0 голосов
/ 12 сентября 2018

Что вы можете сделать, это написать скрипт с помощью команды awk. У вас есть примеры того, как конвертировать даты с awk: Преобразование дат в AWK .

Это поможет вам разобрать файл и добавить 2 столбца в начале каждой строки:

  • номер строки
  • разница по сравнению с предыдущей строкой

Затем вам нужно отсортировать полученный файл по второму столбцу, и все готово.

Конечно, было бы слишком легко, если бы я написал сценарий для вас (а времени у меня на самом деле нет). Таким образом, вы должны попробовать вышесказанное самостоятельно, а затем вернуться с конкретными вопросами. Здесь ваш вопрос слишком широк по сравнению с по тематическим вопросам SO .

...