초당 TCP 연결 수 계산

초당 TCP 연결 수 계산

초당 최대 10개의 요청만 처리할 수 있는 서비스가 있는데 이 숫자가 얼마나 자주 초과되는지 모니터링해야 합니다. tcpdump, ss, netstat, ntop에 대한 다양한 솔루션을 보았지만 내 요구 사항을 충족하는 솔루션은 없는 것 같습니다. 모니터링은 두 개의 스크립트로 나누어야 한다고 생각합니다. tcpdump를 통해 루트로 실행하여 데이터를 수집합니다. 예:

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

그런 다음 출력을 분석하고 마지막 확인 이후 초당 최대 쿼리 수를 제공하는 또 다른 스크립트가 여기서 막히게 됩니다.

답변1

시작하는 데 도움이 되는 몇 가지 내용은 다음과 같습니다.

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]
} '

event1초 실행 창의 모든 타임스탬프를 (배열에) 유지합니다 (부동 소수점 초로 변환). 새 이벤트가 범위를 벗어나면 처음으로 기록된 이벤트가 삭제되고 모든 이벤트가 1비트 아래로 이동됩니다. i항상 상대 시간이 0인 창의 시작에 해당하는 이벤트를 제외하고 존재하는 이벤트 수를 나타냅니다. 숫자가 10을 초과하면 스크립트는 창에 있는 이벤트 수를 인쇄합니다. 출력 예:

11 events in 0.962827 secs at 14:53:51.262827

이 패턴은 / > /들어오는 패킷에만 일치합니다. 관심 있는 행과 일치하도록 개선해야 할 수도 있습니다.

관련 정보