각 Apache 가상 호스트가 사용중인 대역폭을 어떻게 확인할 수 있습니까?


24

여러 가상 호스트를 제공하도록 Apache를 설정했으며 각 사이트에서 사용하는 대역폭의 양을 확인하고 싶습니다. 전체 서버가 얼마나 많이 사용하는지 알 수 있지만 더 자세한 보고서를 원합니다.

내가 찾은 것의 대부분은 가상 호스트로 대역폭을 제한하기위한 것이지만 그렇게하고 싶지는 않습니다. 어느 사이트에서 얼마나 많은 대역폭을 사용하고 있는지 확인하고 싶습니다.

이는 결제 목적이 아니라 정보 제공만을위한 것입니다.

사용해야하는 아파치 모듈이 있습니까? 아니면 다른 방법이 있습니까?

답변:


23

당신이 따르는 정보는 모두 로그에 있으므로 AWStats 와 같은 로그 분석기를 봐야 합니다. 다른 옵션은 Google Analytics를 사용하는 것입니다.

로그를 분석하기 위해 다음은 명령 줄에서 로그 파일이 몇 MB의 트래픽을보고하는지 알려주는 대략적인 예입니다.

cat /var/log/apache/access.log | awk '{SUM+=$10}END{print SUM/1024/1024}'

5
고양이의 쓸모없는 사용 : awk '...'/var/log/apache/access.log도 작동
marco

제안 된 방법으로 일부 웹 페이지에서 인터넷으로 전송 된 트래픽 (아웃 바운드 트래픽)이 계산됩니까?
Khaled

2
예. 그러나 우연히 응답 코드를 요약하지 않도록주의하십시오. 저에게 $ 10이 http 응답 코드이기 때문에 카운트가 너무 낮다는 것을 알았습니다. 아파치 사용자 정의 로그의 경우 {SUM + = $ 11}을 대신 사용해야했습니다.
Phil


3

멋진 아파치 로깅 메커니즘과 덜 알려진 % I% O 플래그 를 사용하는 것이 좋습니다 .

형식을 정의하십시오.

LogFormat "% t % a % v % U % q % I % O"IOFormat

기본 httpd.conf 에서 사용하십시오 .

CustomLog /var/log/apache2/all-bw.log IOFormat

값은 아마도 모든 헤더 정보를 설명하지는 않지만 VirtualHost 트래픽에 대한 정확한 아이디어를 갖는 것은 매우 정확합니다.

Perl 스크립트로 로그를 스캔하여 n 분마다 가상 호스트별로 집계하고 (예 : 5)이를 선인장으로 보냅니다.

이 플래그는 mod_logio에 의해 제공되며 아마도 Apache에 내장되어있을 것입니다.


2
Hum, Apache 2.0 문서에서 인용 한 바와 같이 : httpd 2.0에서 1.3과 달리 % b 및 % B 형식 문자열은 클라이언트에 전송 된 바이트 수를 나타내지 않고 단순히 HTTP 응답의 바이트 크기 ( 예를 들어, 연결이 중단되거나 SSL이 사용되는 경우와 다릅니다. mod_logio가 제공하는 % O 형식은 네트워크를 통해 전송 된 실제 바이트 수를 기록합니다.
10

2

Apache와 함께 awstats를 사용하기로 결정한 경우 즉시 전체 서버에 대한 총 대역폭이 표시됩니다.

가상 호스트별로 대역폭을 보려면 vlogger를 설치하는 것이 좋습니다 .

Vlogger는 실제로 설정 한 각 가상 호스트에 대한 Apache 액세스 로그 정보를 별도의 디렉토리 / 파일에 수집합니다.

예를 들어 Apache 로그 파일이 / var / log / apache2에있는 경우 일반적인 vlogger 설치는 가상 호스트 (예 : vhost1.com vhost2.com)에 대해 다음과 같이 생성합니다.

/var/log/apache2/vhost1.com/access.log
/var/log/apache2/vhost2.com/access.log

Vlogger는 이러한 로그를 교체 할 수있는 옵션을 제공하고 액세스 로그 파일의 이름 지정 템플릿을 변경하는 방법 (예 : 날짜 추가)을 제공하며 Apache보다 많은 로그 파일을 더 잘 처리한다고 주장합니다.

이에 대한 한 가지 단점은 더 이상 집계 된 서버보기가 없다는 것입니다 (로그를 별도로 집계하거나 추가 아파치 설정 또는 다른 방법을 사용해야합니까?).

클라이언트가 자바 스크립트를 통해보고 할 때 서버 대역폭 모니터링에 Google 분석 (또는 자바 스크립트 기반 추적)을 사용하지 않도록주의해야합니다. GA는 크롤러 / 스파이더 / 봇뿐만 아니라 자바 스크립트를 사용 중지 한 사용자에게보고하지 않습니다.


1

다음은 Xerxes가 제안한 로그 형식을 구문 분석하는 정규식입니다.

\ [([0-9] +) / (\ w +) / ([0-9] {4}) [^ \]] + \] \ s (\ d {1,3}. \ d {1, 3}. \ d {1,3}. \ d {1,3}) \ s ([^ /] +) [^ \ s] + \ s (\ d +) \ s (\ d +)

로그 예 :

[12 / Jan / 2011 : 14 : 25 : 04 +0000] 157.157.12.206 files.hjaltijakobsson.com / 581 669 [12 / Jan / 2011 : 14 : 25 : 04 +0000] 157.157.12.206 files.hjaltijakobsson.com / 624747 [12 / Jan / 2011 : 14 : 25 : 04 +0000] 157.157.12.206 files.hjaltijakobsson.com /icons/blank.gif 687186 [12 / Jan / 2011 : 14 : 25 : 04 +0000] 157.157. 12.206 files.hjaltijakobsson.com /icons/compressed.gif 693188 [12 / Jan / 2011 : 14 : 25 : 04 +0000] 157.157.12.206 files.hjaltijakobsson.com /favicon.ico 592 512

성냥:

하위 패턴 1 (일) : 12
하위 패턴 2 (요약) : 1 월
하위 패턴 3 (년) : 2011
하위 패턴 4 (방문자 호스트) : 157.157.12.206
하위 패턴 5 (가상 호스트) : files.hjaltijakobsson.com
하위 패턴 6 ( 들어오는 바이트) : 581
하위 패턴 7 (나가는 바이트) : 669

건배.


1

실제로 서버에 여러 개의 호스트가 있고 따라서 여러 site.com.access_log가 있다고 가정하면 허용되는 답변을 약간 조정합니다. 각 호스트를 정렬하고 나열합니다.

for f in *.access_log ; do echo `awk '{SUM+=$10}END{print SUM/1024/1024}' $f` $f ; done | sort -rn | more

gzipped logs 디렉토리 용

for f in *.access_log.*.gz ; do echo `zcat $f|awk '{SUM+=$10}END{print SUM/1024/1024}'` $f `stat -c%z $f`; done | sort -rn | more 

0

흠, 나중에보고하기 위해 패킷을 기록하기 위해 IPTables 및 문자열 일치로 악을 얻을 수 있습니다. 그래도 비 SSL 연결에서만 작동합니다.

또는 Snort와 같은 프로토콜 및 세션 인식 기능이 구두로 사용될 수 있습니다 ...


0

옳은. 로그를 필터링하는 것이 좋습니다. 또한 파일을 다운로드 할 때 Apache 서버의 대역폭을 얻고 싶습니다.

LogFormat "%h %l %t %u \"%r\" %>s %b/%D**" combined

전류 대역폭을 제공 하는 %b%d출력을 계산합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.