Her Apache Virtual Host'un ne kadar bant genişliği kullandığını nasıl görebilirim?


24

Apache'ye birkaç Sanal Sunucu sunacak şekilde ayarlamıştım ve her sitenin ne kadar bant genişliği kullandığını görmek istiyorum. Tüm sunucunun ne kadarını kullandığını görebiliyorum, ancak daha ayrıntılı raporlar istiyorum.

Orada bulduğum şeylerin çoğu, sanal ana bilgisayarlarla bant genişliğini sınırlamak için, ancak bunu yapmak istemiyorum; Sadece hangi sitelerin ne kadar bant genişliği kullandığını görmek istiyorum.

Bu fatura amaçlı değildir, sadece bilgi amaçlıdır.

Kullanmam gereken bir apache modülü var mı? Yoksa bunu yapmanın başka bir yolu var mı?

Yanıtlar:


23

Peşinde olduğunuz bilgilerin hepsi günlüklerde olduğundan, AWStats gibi bir günlük analizcisine bakmalısınız . Diğer seçenek ise Google Analytics’i kullanmaktır.

Günlükleri analiz etmek için, bir günlük dosyasının komut satırından kaç MB trafik bildirdiğini bildirmek için kullanabileceğiniz kaba bir örnek:

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

5
kedinin yararsız kullanımı: awk '...' /var/log/apache/access.log çok çalışıyor
marco

Önerilen yollar bazı web sayfalarından Internet'e (giden trafik) gönderilen trafiği hesaplar mı?
Khaled

2
Evet. Ancak, yanıt kodlarını kazayla toplamamamaya dikkat edin. Sayılarımın çok düşük olduğunu fark ettim çünkü benim için 10 $ http yanıt kodu. Apache özel günlüğüm için bunun yerine {SUM + = $ 11} kullanmam gerekiyordu.
Phil


3

Harika apache günlüğü mekanizmasını ve az bilinen % I ve % O bayraklarını kullanmanızı öneririm :

Biçimi tanımlayın:

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

Ana httpd.conf'unuzda kullanın :

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

Değerler muhtemelen tüm başlık bilgisini muhasebeleştirmiyor, ancak VirtualHost trafiği hakkında kesin bir fikir sahibi olmak için oldukça doğru.

Her n dakikada bir sanal ana bilgisayar başına toplamak için (örneğin 5) günlükleri bir perl komut dosyası ile tarayın ve kaktüslere gönderin.

Bu bayraklar muhtemelen Apache'nizde (Debian's Apache'mde olduğu gibi) yerleşik olan mod_logio tarafından sağlanır.


2
Hum, Apache 2.0 belgelerinde de belirtildiği gibi: httpd 2.0'da, 1.3'ten farklı olarak,% b ve% B formatı dizgilerinin istemciye gönderilen bayt sayısını değil, yalnızca HTTP yanıtının bayt cinsinden boyutunu temsil ettiğini unutmayın. örneğin, bağlantı kesilirse veya SSL kullanılıyorsa, bu farklılık gösterebilir). Mod_logio tarafından sağlanan% O formatı, ağ üzerinden gönderilen gerçek bayt sayısını kaydeder.
Ekim

2

Apache ile awstats kullanmaya karar verirseniz, kutudan çıktığında, sunucunuzun tamamı için toplu bant genişliği gösterecektir.

Bant genişliğini sanal ana bilgisayar başına görmek için vlogger'ı yüklemenizi öneririz .

Vlogger, ayrı ayrı dizinlerde / dosyalarda yapmak üzere kurduğunuz her bir sanal ana makineniz için Apache erişim günlüğü bilgilerini toplar.

Örneğin, Apache günlük dosyanız / var / log / apache2'deyse, tipik vlogger kurulumu sanal konaklarınız için böyle bir şey yaratacaktır (örn. Vhost1.com vhost2.com):

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

Vlogger, size bu günlükleri döndürme seçeneği sunar, erişim günlüğü dosyasının adlandırma şablonunu değiştirmenin bir yolunu sağlar (örn. Bir tarih ekler) ve çok sayıda günlük dosyasını Apache'den daha iyi kullandığını iddia eder.

Bunun bir alt tarafı, artık birleştirilmiş sunucu görünümüne sahip olmamanızdır (günlükleri ayrı olarak toplamanız veya belki de ek bir apache ayarı veya belki başka bir yöntem kullanmanız gerekebilir).

Müşteriye javascript ile rapor vermeye güvendiğiniz için sunucu bant genişliği izleme için google analytics (veya javascript tabanlı izleme) kullanmamaya dikkat ederim. GA, kendi javascriptlerini devre dışı bırakmış kişilerin yanı sıra tüm tarayıcıları / örümcekleri / botları size bildirmez.


1

İşte Xerxes tarafından önerilen log formatını ayrıştırmak için bazı regex.

\ [([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 +)

Örnek günlük:

[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 dosyalar 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 dosyalar.hjaltijakobsson.com /favicon.ico 592 512

Maçlar:

Altmodel 1 (ayın günü): 12
altmodel 2 (. Kısalt ay): Jan
altmodel 3 (yıllık): 2011
altmodel 4 (ziyaretçi ana bilgisayar): 157.157.12.206
altmodel 5 (sanal konak): files.hjaltijakobsson.com
altmodel 6 ( gelen bayt): 581
Subpattern 7 (giden bayt): 669

Şerefe.


1

Sunucuda gerçekte birden fazla vhost (varsa bu nedenle birden fazla site.com.access_log) olduğu varsayılarak kabul edilen cevapta hafif bir değişiklik yapın. Bu, her bir vhost'u sıralar ve listeler

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

ve gzipli günlüklerin bir dizini için

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

Hmm, paketleri daha sonra raporlamak için kaydetmek için IPTable'lar ve string eşleştirme ile kötülükten kurtulabilirsiniz. Ancak sadece SSL olmayan bağlantılar için çalışacak.

Ya da Snort gibi farkında olan bir protokol ve seans ayakkabıyı kullanmak için boynuzlu tutabilir ...


0

Doğru. Günlüğü filtrelemek iyi bir fikirdir. Dosyaları indirirken Apache sunucumun bant genişliğini de almak istiyorum.

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

Size akımın bant genişliğini verecek olan %bve %dçıkışını hesaplar .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.