web-dev-qa-db-ja.com

各Apache仮想ホストが使用している帯域幅を確認するにはどうすればよいですか?

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

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

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

使用する必要があるApacheモジュールはありますか?またはこれを行う他の方法はありますか?

24
pkaeding

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

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

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

Awstats はこれを行う1つの方法ですが、おそらく最良ではありません

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によって提供されます(これはおそらく私のDebianのApacheのように)Apacheに組み込まれています。

3
Oct

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が無効になっているユーザーやクローラー/スパイダー/ボットにはレポートしません。

2
user12345

サーバー上に実際に複数のvhost(したがって複数の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 
1
michael

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
hjaltij

ええと、後で報告するためにパケットをログに記録するために、IPTablesと文字列のマッチングで悪を得る可能性があります。ただし、非SSL接続でのみ機能します。

または、Snortのようなプロトコルとセッションに対応した何かを使用するように角張ることもできます...

0
Rob Dudley

正しい。ログをフィルタリングすることをお勧めします。ファイルをダウンロードするときに、Apacheサーバーの帯域幅も取得したいと考えています。

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

%bおよび%d出力を計算します。これにより、現在の帯域幅が得られます。

0
David