Parece que tenho problemas com minha ferramenta de pool de conexão. Há um grande atraso quando obtém a conexão DB.
O que tento alcançar é obter todos os casos do arquivo de log quando esse incidente ocorre.
As entradas de log relacionadas parecem
...
2018-03-12 16:18:44,070 efault task-166 gine.jdbc.internal.LogicalConnectionImpl DEBUG Obtaining JDBC connection
...
2018-03-12 16:20:23,172 efault task-166 gine.jdbc.internal.LogicalConnectionImpl DEBUG Obtained JDBC connection
...
Portanto, se o padrão ' DEBUG Obtaining JDBC connection ' ocorrer, extraia a data ' 2018-03-12 16:18:44,070 ' e quando o padrão ' DEBUG Obtained JDBC connection ' for encontrado, extraia sua data e compare as 2 datas. Se a diferença for superior a 2 segundos, registre.
Eu sei que é bem complicado resolvê-lo com uma linha de código, mas é possível sem escrever um programa para fazer isso?
Tente isto:
explicará o comando se funcionar para sua necessidade.
Eu abordaria isso com um script awk, abaixo. O script procura as strings "obtendo" e "obtido". O caso típico é que ele encontra a string "obtendo" primeiro, seguida pela string "obtida"; se uma linha "obtida" for encontrada primeiro,
d1
será desabilitada ou zerada, portanto não será reportada. Caso contrário, extraímos a parte principal da data (antes da vírgula), convertemos isso em segundos desde a época e adicionamos os milissegundos novamente. Esse valor é salvo emd1
.Uma vez vista a string "obtida", sua data é computada da mesma forma, então verificamos a diferença; se for mais de 2 segundos, informamos. De qualquer forma, redefinimos
d1
para iniciar o processo novamente.Salve o abaixo em um script, com o nome que desejar (talvez
alert-jdbc.awk
) e execute-o comawk -f alert-jdbc.awk < log-file-here
.O script requer o utilitário de data GNU para converter datas arbitrárias.