O que são estas linhas de log-análise do Perl fazendo e como pode eu vir acima com algo que poderia funcionar?
-
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.
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.