各Apache Virtual Hostが使用している帯域幅を確認するにはどうすればよいですか?


24

複数の仮想ホストを提供するようにApacheを設定していますが、各サイトが使用する帯域幅を確認したいと思います。サーバー全体の使用量は確認できますが、より詳細なレポートが必要です。

私がそこに見つけたほとんどのことは、仮想ホストへの帯域幅を制限するためのものですが、私はそれをしたくありません。どのサイトがどれだけの帯域幅を使用しているかを見たいだけです。

これは、請求目的ではなく、情報提供のみを目的としています。

使用すべきApacheモジュールはありますか?または、これを行う他の方法はありますか?

回答:


23

必要な情報はすべてログにあるため、AWStatsなどのログアナライザーを確認する必要があります。もう1つのオプションは、Googleアナリティクスを使用することです。

ログを分析するための大まかな例を次に示します。これは、ログファイルがコマンドラインから報告するトラフィックのMB数を示すために使用できます。

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

5
猫の役に立たない使用:awk '...' /var/log/apache/access.logも動作します
marco

推奨される方法では、一部のWebページからインターネットに送信されるトラフィック(送信トラフィック)を計算しますか?
カレド

2
はい。ただし、誤って応答コードを要約しないように注意してください。私にとっては$ 10がhttp応答コードだからです。Apacheカスタムログでは、代わりに{SUM + = $ 11}を使用する必要がありました。
フィル


3

すばらしいApacheログメカニズムと、あまり知られていない%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)ごとに仮想ホストごとに集計し、これをcactiに送信します。

これらのフラグはmod_logioによって提供されます。mod_logioはおそらくApacheに組み込まれています(私のDebianのApache用)。


2
ハム、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よりも多くのログファイルを処理できると主張しています。

これの1つの欠点は、集約されたサーバービューがもうないということです(ログを個別に集約する必要があるか、追加のApache設定または他の方法を使用する必要があるでしょうか?)。

クライアントによるJavaScript経由のレポートに依存しているため、サーバー帯域幅の監視にGoogleアナリティクス(またはJavaScriptベースの追跡)を使用しないように注意します。GAは、JavaScriptを無効にしているユーザーや、クローラー/スパイダー/ボットを報告しません。


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 / 624 747 [12 / Jan / 2011:14:25:04 +0000] 157.157.12.206 files.hjaltijakobsson.com /icons/blank.gif 687 186 [12 / Jan / 2011:14:25:04 +0000] 157.157。 12.206 files.hjaltijakobsson.com /icons/compressed.gif 693 188 [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

およびgzip圧縮されたログのディレクトリ用

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.