Bagaimana saya bisa melihat berapa banyak bandwidth yang digunakan setiap Apache Virtual Host?

24

Saya telah mengatur Apache untuk melayani beberapa Host Virtual, dan saya ingin melihat berapa banyak bandwidth yang digunakan setiap situs. Saya dapat melihat seberapa banyak seluruh server menggunakan, tetapi saya ingin laporan yang lebih rinci.

Sebagian besar hal yang saya temukan ada untuk membatasi bandwidth ke host virtual, tetapi saya tidak ingin melakukannya; Saya hanya ingin melihat situs mana yang menggunakan berapa banyak bandwidth.

Ini bukan untuk tujuan penagihan, hanya untuk informasi.

Apakah ada modul apache yang harus saya gunakan? Atau adakah cara lain untuk melakukan ini?

pkaeding
sumber

Jawaban:

23

Informasi yang Anda cari semuanya ada di log, jadi Anda harus melihat penganalisa log seperti AWStats . Opsi lainnya adalah menggunakan Google Analytics.

Untuk menganalisis log, berikut adalah contoh kasar yang dapat Anda gunakan untuk memberi tahu Anda berapa banyak lalu lintas MB yang dilaporkan file log dari baris perintah:

cat /var/log/apache/access.log | awk '{SUM+=$10}END{print SUM/1024/1024}'
Xerxes
sumber
5
Penggunaan cat yang tidak berguna: awk '...' /var/log/apache/access.log juga berfungsi
marco
Apakah cara yang disarankan akan menghitung lalu lintas yang dikirim dari beberapa halaman web ke Internet (lalu lintas keluar)?
Khaled
2
Iya nih. Tapi hati-hati jangan sampai meringkas kode respons secara tidak sengaja. Saya menyadari jumlah saya terlalu rendah karena bagi saya $ 10 adalah kode respons http. Untuk log khusus apache saya, saya perlu menggunakan {SUM + = $ 11}.
Phil
3

Awstats adalah salah satu cara untuk melakukan ini tetapi mungkin bukan yang terbaik

Antoine Benkemoun
sumber
3

Saya sarankan Anda menggunakan mekanisme logging apache yang luar biasa dan flag % I dan % O yang kurang dikenal :

Tentukan format:

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

Gunakan di httpd.conf utama Anda :

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

Nilai-nilai ini mungkin tidak memperhitungkan semua informasi header, tetapi cukup akurat untuk memiliki gagasan yang tepat tentang lalu lintas VirtualHost.

Pindai log dengan skrip perl untuk mengagregasi per host virtual setiap n menit (misalnya 5) dan mengirimkannya ke cacti.

Bendera ini disediakan oleh mod_logio yang mungkin dibuat di Apache Anda (seperti untuk Apache Debian saya).

Oktober
sumber
2
Hum, juga seperti dikutip dalam dokumentasi Apache 2.0: Perhatikan bahwa dalam httpd 2.0, tidak seperti 1.3, string format% b dan% B tidak mewakili jumlah byte yang dikirim ke klien, tetapi hanya ukuran dalam byte dari respons HTTP ( yang akan berbeda, misalnya, jika koneksi dibatalkan, atau jika SSL digunakan). Format% O yang disediakan oleh mod_logio akan mencatat jumlah sebenarnya byte yang dikirim melalui jaringan.
Oktober
2

Jika Anda memutuskan untuk menggunakan awstats dengan Apache, di luar kotak itu akan menunjukkan kepada Anda bandwidth teragregasi untuk seluruh server Anda.

Untuk melihat bandwidth per host virtual, saya sarankan menginstal vlogger .

Vlogger sebenarnya akan mengumpulkan informasi log akses Apache untuk setiap host virtual yang Anda atur untuk melakukannya di direktori / file terpisah.

Sebagai contoh jika file log Apache Anda ada di / var / log / apache2, instalasi vlogger yang khas akan membuat sesuatu seperti ini untuk host virtual Anda (mis. Vhost1.com vhost2.com):

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

Vlogger memberi Anda opsi untuk memutar log-log ini untuk Anda, memberikan cara untuk mengubah templat penamaan file log akses (misalnya menambahkan tanggal), dan mengklaim itu menangani sejumlah besar file log lebih baik daripada Apache.

Satu sisi dari hal ini adalah bahwa Anda tidak akan memiliki tampilan server teragregasi lagi (Anda harus menggabungkan log secara terpisah atau mungkin menggunakan pengaturan apache tambahan atau mungkin metode lain?).

Saya akan berhati-hati agar tidak menggunakan google analytics (atau pelacakan berbasis javascript) untuk pemantauan bandwidth server karena Anda mengandalkan klien untuk melaporkan melalui javascript. GA tidak melaporkan kepada Anda orang-orang yang javascriptnya dinonaktifkan serta perayap / spider / bot apa pun.

pengguna12345
sumber
1

Berikut adalah beberapa regex untuk mem-parsing format log yang diusulkan oleh 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 +)

Contoh log:

[12 / Jan / 2011: 14: 25: 04 +0000] file 157.157.12.206.hjaltijakobsson.com / 581 669 [12 / Jan / 2011: 14: 25: 04 +0000] 157.157.12.206 file.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 file.hjaltijakobsson.com /favicon.ico 592 512

Cocok:

Subpattern 1 (hari bulan): 12
Subpattern 2 (bulan abbr.): Jan
Subpattern 3 (tahun): 2011
Subpattern 4 (host pengunjung): 157.157.12.206
Subpattern 5 (host virtual): files.hjaltijakobsson.com
Subpattern 6 ( byte masuk): 581
Subpattern 7 (byte keluar): 669

Tepuk tangan.

hjaltij
sumber
1

Tweak sedikit pada jawaban yang diterima dengan asumsi sebenarnya ada beberapa vhost di server (dan karena itu beberapa site.com.access_log 's). Ini akan mengurutkan dan mendaftar setiap vhost

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

dan untuk direktori log 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 
michael
sumber
0

Hmm, Anda bisa mendapatkan kejahatan dengan IPTable dan pencocokan string untuk mencatat paket untuk pelaporan nanti. Hanya akan berfungsi untuk koneksi non SSL.

Atau sesuatu yang diketahui protokol dan sesi seperti Snort dapat digunakan untuk ...

Rob Dudley
sumber
0

Benar. Memfilter log adalah ide yang bagus. Saya juga ingin mendapatkan bandwidth server Apache saya ketika mengunduh file.

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

Menghitung %bdan %doutput, yang akan memberi Anda bandwidth saat ini.

David
sumber