Назад | Перейти на главную страницу

Работа с многострочными записями журнала (парсинг журнала)

Скажем, у вас есть такие журналы

Thu 2014-10-09 23:55:12: 01: Session 525229; child 0101
Thu 2014-10-09 23:55:12: 05: Accepting IMAP connection from [172.1.2.3:52337] to [1.2.3.4:143]
Thu 2014-10-09 23:55:12: 03: --> * OK bla.com IMAP4rev1 Mailserver 14.0.3 ready
Thu 2014-10-09 23:55:12: 02: <-- 1 capability
Thu 2014-10-09 23:55:12: 03: --> * CAPABILITY IMAP4rev1 NAMESPACE AUTH=LOGIN AUTH=PLAIN IDLE COMPRESS=DEFLATE ACL UNSELECT UIDPLUS QUOTA BINA
RY XLIST
Thu 2014-10-09 23:55:12: 03: --> 1 OK CAPABILITY completed
Thu 2014-10-09 23:55:12: 02: <-- 2 authenticate plain
Thu 2014-10-09 23:55:12: 03: --> +
Thu 2014-10-09 23:55:12: 02: <-- ******
Thu 2014-10-09 23:55:12: 01: Authenticated as bla@blubb.com

Я хочу провести учет пользователей.

Теперь информация (номер сеанса, IP-адрес, имя пользователя, ...) распределена по нескольким строкам, как вы видите выше.

Как бы вы «преобразовали» такие данные в список пар IP / пользователь?

Вы можете делать такие вещи, как grep -e ": Session" -e ": Accepting" -e ": Authenticated" logfile

что даст вам

Thu 2014-10-09 23:55:12: 01: Session 525229; child 0101
Thu 2014-10-09 23:55:12: 05: Accepting IMAP connection from [172.1.2.3:52337] to [1.2.3.4:143]
Thu 2014-10-09 23:55:12: 01: Authenticated as bla@blubb.com
Thu 2014-10-09 23:55:13: 01: Session 525230; child 0101
Thu 2014-10-09 23:55:13: 05: Accepting IMAP connection from [172.1.2.4:52537] to [1.2.3.4:143]
Thu 2014-10-09 23:55:13: 01: Authenticated as bla@blubx.com
...

Как бы вы разделили эти предметы?

Все это происходит как-то очень неестественно.

Используйте LogStash, который имеет встроенную поддержку многострочных записей.