Что делают эти строки парсинга журналов Perl и как я могу придумать что-то, что может работать? - PullRequest
2 голосов
/ 12 марта 2012

Эта проблема относится к контексту pop-before-smtp / Postfix / Dovecot, но если бы я знал синтаксический анализ строки Perl, я мог бы придумать ответ сам.Однако я так растерялся, что даже не знаю точного вопроса.То есть:

Мы используем Postfix уже долгое время и вроде как зацепили его.Теперь нам нужно «перейти в современную эпоху» и позволить людям отправлять электронную почту с наших SMTP-серверов, даже если они находятся за пределами нашей сети.Итак, с этой задачей я нашел pop-before-smtp.

Вы можете найти ее здесь .

Итак, я все настроилно он не проходит тестирование.Я решил эту проблему, используя указания здесь , и определил, что Perl, пытающийся проанализировать журнал, кажется неправильным.Мы используем Dovecot в качестве нашего сервера IMAP / POP, и в файле конфигурации есть три варианта.Вот выдержка из конфигурационного файла, показывающая три набора:

# For Dovecot POP3/IMAP when using syslog.
#$pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' .
#    'Login: .*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';
#$out_pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' .
#    'Disconnected.*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';

# For Dovecot POP3/IMAP when it does its own logging.
##$logtime_pat = '(\d\d\d\d-\d+-\d+ \d+:\d+:\d+)';
#$pat = '^dovecot: [LOGTIME] Info: (?:imap|pop3)-login: ' .
#    'Login: .+? rip=[:f]*(\d+\.\d+\.\d+\.\d+),';
#$out_pat = '^dovecot: [LOGTIME] Info: (?:imap|pop3)-login: ' .
#    'Disconnected.*? rip=[:f]*(\d+\.\d+\.\d+\.\d+),';

# For older Dovecot POP3/IMAP when it does its own logging.
#$pat = '^(?:imap|pop3)-login: [LOGTIME] Info: ' .
#    'Login: \S+ \[[:f]*(\d+\.\d+\.\d+\.\d+)\]';
#$out_pat = '^(?:imap|pop3)-login: [LOGTIME] Info: ' .
#    'Disconnected.*? \[[:f]*(\d+\.\d+\.\d+\.\d+)\]';

Один должен раскомментировать те, которые применяются, однако ни один из них не работает.

Я предполагаю, что 'pat'- это шаблон для входа в систему, а out-pat - это шаблон для выхода из системы или иного отключения.

Фактический формат записи журнала явно отличается от любого из этих трех, но они близки.Вот пример пары:

Mar 11 17:53:55 imap-login: Info: Login: user=<username>, method=PLAIN, rip=208.54.4.205, lip=192.168.1.1, TLS

Mar 11 17:59:10 IMAP(username): Info: Disconnected: Logged out bytes=352/43743

При использовании POP «imap-login» заменяется на «pop-login», а при выходе из системы «POP» заменяет «IMAP» - почему измененияв заглавных буквах я не могу сказать!

Важными являются следующие данные: метка времени, имя пользователя и, при входе в систему, «удаленный» ip («rip»).

При наличии достаточного времениВозможно, я смогу собрать воедино что-то, что работает, но поскольку я на самом деле не знаю Perl, это довольно сложно.Помогите мне написать новые правила для анализа выходных данных, используемых с нашим пакетом Dovecot.

1 Ответ

1 голос
/ 12 марта 2012

Часть (:?.. регулярного выражения Perl запрашивает кластеризацию , но не захвата ;это позволяет целым группам сопоставляться или игнорироваться как группы, не влияя на номера групп захвата;все строки захватывают ровно одно поле, IP-адрес разрешен.(Что немного странно, я мог бы ожидать и имя пользователя, и IP, но это может быть проще в долгосрочной перспективе.)

# For Dovecot POP3/IMAP when using syslog.
$pat = '^[LOGTIME] \S+ (?:imap|pop3)-login: Info: ' .
    'Login: .*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';
# not necessary? see comment header START OF PATTERNS
# $out_pat = '^[LOGTIME] \S+ (?:IMAP|POP3)\(\S+\): Info: ' .
#    'Disconnected.*';

Я удалил dovecot частей, так как они не былив вашем входе.Я добавил Info: в обе строки.Я изменил $out_pat, чтобы использовать IMAP(username) вместо уже отсутствующего imap-login из оригинала.(Использование \S+ будет прервано, если имена пользователей будут содержать пробелы. Поскольку это предположение было сделано в другом месте файла, я надеюсь, что это нормально.)

Поскольку больше нет IP-адреса для захвата для строки выхода из системы, вероятно, лучше не определять $out_pat - в блок комментария START OF PATTERNS входит фраза Если запись по вашему выбору также содержит $out_pat, вы должны также раскомментировать эту переменную, что позволяет нам отслеживать пользователей, которые все еще подключены к серверу (например, Thunderbird кеширует открытые соединения IMAP).

Я не проверял это, но у меня к этому хорошие чувства.

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