2010-12-15 14 views

答えて

1

あなたの最善の策は、渡されたバイトを追跡し コマンドintefaceをethXをを通過したパケットの数を解析することですの/ sbin/ifconfigコマンド あなたのLinuxボックスが

eth0  
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:32363649 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:35133219 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:2813232645 (2.6 GiB) TX bytes:1696525681 (1.5 GiB) 
      Interrupt:16 Memory:f4000000-f4012700 
+0

再起動すると問題は起こりますが効果的ではなく、間違いがあります。 –

+0

読み取り値が以前の値よりも小さい場合、再起動が発生したことを意味し、最後に保存された値+何らかのエラーマージンに加算します(最後のチェックから平均帯域幅*時間です...) –

+0

長い時間のLinuxのsysadminはここにありますので、申し訳ありません。Windowsの解決策はありません:) Windowsはトラフィックカウンタをどこかに記録していますステータス – damir

1
を再起動した場合、カウンタがリセットされていることに注意してくださいされます

サイトのApacheアクセスログを解析して、合計帯域幅を把握することができます。ここでは(実際の実装は、あなたのログフォーマットに依存します)緩い疑似phpの例です:

<?php 
$logfile = '/var/log/apache/httpd-access.log'; 
$startDate = '2010-10-01'; 
$endDate = '2010-10-31'; 

$fh = fopen($logfile, 'r'); 

if (!$fh) die('Couldn\'t open log file.'); 

$totalBytes = 0; 

// let's pretend the log is a csv file because i'm lazy at parsing 
while (($info = fgetcsv($fh, 0, ' ', '"')) !== false) { 
    // get the date of the log entry 
    $date = $info[3]; 
    // check if the date is within our month of interest 
    if ($date > $startDate && $date < $endDate) { 
    // get the number of bytes sent in the request 
    $totalBytes += $info[7]; 
    } 
} 

fclose($fh); 

echo 'Total bytes used: ' . $totalBytes; 

はまた、このスクリプトは、ログのサイズによっては非常に遅くなる可能性があるので、あなたは結果をキャッシュ考慮すべきです繰り返し使用するのではなく、後で使用するために使用します。

+0

私は1日に1M訪問のようになります... –

+0

その場合、ログファイル分析/統計のためのAWStatsまたは類似のソフトウェアの設定を検討してください。定期的に(cronjobを使用して)更新してから、AWStats 'データキャッシュファイル。 –

関連する問題