Большой проект (для меня) Относительно сортировки файлов журналов и нарезки массивов - PullRequest
0 голосов
/ 25 октября 2019

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

Итак, у меня есть записи в журнале, которые выглядят какthis:

Timestamp {PID A} Got Message
Timestamp {PID A} Message id: 56
Timestamp {PID A} Sent Message
Timestamp {PID B} Got Message
Timestamp {PID B} Message id: 56
Timestamp {PID B} Sent Message

Существует 7 разных PID, которые генерируют эти записи. Поэтому в дополнение к 3 нужным мне линиям я должен отслеживать, какой PID также сгенерировал запись.

Итак, в двух словах:

For PID in ${PID_ARRAY[@]}; do
Mapfile –O <where to start> –t GOT_ARRAY< <$(Journalctl –S [1 hour-ago] –U now | grep “PID” | grep “Got Message”)
COUNT[0]=$(Journalctl –S [1 hour-ago] –U now | grep “PID” | grep “Got Message” | wc –l)
<Increment the necessary variables>
done

Затем я делаю то же самоедля каждой нужной строки, ища «идентификатор сообщения» и «отправленное сообщение», за исключением чтения их в разные массивы. Затем я разрезаю эти массивы вверх на основе значений в массиве COUNT и получаю доступный для чтения и использования вывод.

Проблема в том, что, как grep для записей журнала, я не могу гарантировать, что сообщениеСтроки сообщения id и Sent находятся после строки Got message. Использование опции –S с journalctl позволит мне вернуться назад во времени, сколь угодно долго. Но что, если это закончится:

Timestamp {PID F} Sent Message

Timestamp {PID A} Got Message
Timestamp {PID A} Message id: 56
Timestamp {PID A} Sent Message

Timestamp {PID B} Got Message
Timestamp {PID B} Message id: 76
Timestamp {PID B} Sent Message

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

Итак, мне нужен способ найти «Получил сообщение», а затем найти другие значения, после этого? Будет ли это делать? Это работает, просто в 1/6 раза происходит нечто подобное, - кто-нибудь знает?

...