O que são estas linhas de log-análise do Perl fazendo e como pode eu vir acima com algo que poderia funcionar?

StackOverflow https://stackoverflow.com//questions/9660941

  •  12-12-2019
  •  | 
  •  

Pergunta

Esse problema vem no contexto de pop-before-smtp / Postfix / Dovecot, mas se eu soubesse Perl análise de seqüência de caracteres, que eu poderia vir acima com uma resposta de mim.No entanto, eu estou tão perdido que nem sei a pergunta precisa.A saber:

Temos vindo a utilizar o Postfix por um LONGO tempo e agora são uma espécie de viciado nele.Agora precisamos "mover para a era moderna" e deixar que as pessoas ENVIAM e-mail de nosso servidor de SMTP(s) mesmo quando eles estão fora de nossa rede.Assim, a tarefa com este trabalho, eu encontrei pop antes de smtp.

Você pode encontrá-lo aqui.

Então, eu tenho tudo configurado, mas ele falha no teste.Eu já solucionou-lo usando as direções aqui, e determinou que o Perl que está tentando analisar o log parece estar incorreto.Estamos usando o Dovecot como o nosso IMAP / POP server, e há três opções dadas no arquivo de configuração.Aqui está um trecho do arquivo de configuração que mostra os três conjuntos:

# 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+)\]';

Supõe-descomente as que se aplicam, no entanto, nenhum deles funciona.

Eu supor que " pat " é o padrão para login, e-pat é o padrão para o log de fora ou de outra forma de desligar.

O registo real formato de gravação é claramente diferente do que qualquer um dos três, mas eles estão perto.Aqui está um exemplo de par:

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

Quando usando o POP, 'imap-login" é substituído por "pop-login', e no log-out, 'POP' substitui 'IMAP' - por que as alterações na capitalização eu não posso dizer!

Importand de dados são:O carimbo de data / hora, o nome de usuário, e, ao entrar, o "remote ip" ("ripar").

Dado tempo suficiente, que eu seja capaz de juntar algo que funciona, mas desde que na verdade eu não sei Perl, isso é meio difícil.Por favor, ajude-me a escrever novas regras para analisar o log de saída utilizada com o nosso Dovecot pacote.

Foi útil?

Solução

O (:?.. parte de uma expressão regular Perl pede clustering mas não a captura de;isso permite que grupos inteiros para ser correspondido ou ignoradas, como grupo, sem influenciar o grupo de captura números;todas as linhas de captura exatamente um campo, o IP para permitir.(Que é um pouco estranho, eu poderia ter esperado tanto o nome de usuário e IP, mas isso pode ser mais fácil a longo prazo.)

# 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.*';

Eu removi a dovecot peças, pois eles não estavam na sua entrada.Eu adicionei o Info: para ambas as linhas.Modifiquei o $out_pat para usar IMAP(username) em vez de o não-mais-lá imap-login a partir do original.(O uso de \S+ vai quebrar se nomes de utilizador têm espaços.Desde que esta suposição foi feita em outras partes do arquivo, espero que seja bom.)

Como não há qualquer endereço IP para capturar o logout de linha, ele é provavelmente o melhor não definir $out_pat -- o START OF PATTERNS comentário de bloco inclui a frase Se a entrada de sua escolha também fornece $out_pat, você deve descomentar essa variável, bem como, o que nos permite rastrear os usuários que ainda estão conectados ao servidor (e.g.O Thunderbird caches abrir conexões IMAP).

Eu não testei isso, mas eu tenho bons sentimentos sobre ele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top