Contar o número de conexões tcp por segundo

0

Eu tenho um serviço que só pode lidar com um máximo de 10 solicitações por segundo e preciso monitorar com que frequência isso é excedido. Eu vi várias soluções com tcpdump, ss, netstat, ntop mas nenhum parece dar o que eu preciso. Eu acho que o monitoramento precisaria ser dividido em dois scripts. Um coletando os dados via tcpdump rodando como root, por exemplo:

tcpdump -i eth0 src ldapproxy and port ldap and '(tcp-syn|tcp-ack)!=0'

e, em seguida, outro script para analisar a saída e dar um máximo de consultas por segundo desde a última verificação e este é o bit onde estou preso.

    
por Chris Lewis 04.04.2016 / 14:02

1 resposta

0

Aqui está um pouco de awk para você começar:

awk '/ > /{
  split($1,t,":"); time = (t[1]*60+t[2])*60+t[3]
  diff = time-lasttime; lasttime = time
  event[++i] = diff; window += diff; tod[i] = $1
  while(window>=1){
    window -= event[1]
    for(j=1;j<i;j++){
        event[j] = event[j+1]
        tod[j] = tod[j+1]
    }
    i--
  }
  if(i+1>10) printf "%d events in %f secs at %s\n",i+1,window,tod[i]
} '

Ele mantém (no array event ) todos os timestamps (convertidos em segundos flutuantes) que estão em uma janela de execução de 1 segundo. Quando a janela é excedida por um novo evento, o primeiro evento registrado é removido e todos os eventos mudam um. i diz quantos eventos existem, sem contar o correspondente ao início da janela, que está sempre no tempo relativo zero. O script imprime quantos eventos estavam na janela quando o número excede 10. Exemplo de saída:

11 events in 0.962827 secs at 14:53:51.262827

O padrão / > / é para corresponder apenas aos pacotes recebidos. Talvez seja necessário refinar isso para corresponder às linhas que lhe interessam.

    
por 04.04.2016 / 16:11