Apache Sanal Ana Bilgisayarları ile “Tümünü Yakala” erişim günlüğü mü?


16

Bir web sunucusunda kurulmuş birçok sanal ana bilgisayarım var, her birinin kendi hatası ve erişim günlüğü var. İlgili satırları httpd.confşöyle:

ErrorLog /var/log/httpd-error.log
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog /var/log/httpd-access.log combined

NameVirtualHost *:80

<VirtualHost *:80>
    ServerName myhost.com
    ServerAlias www.myhost.com
    DocumentRoot /var/www/myhost.com/htdocs
    ErrorLog /var/www/myhost.com/log/error.log
    CustomLog /var/www/myhost.com/log/access.log combined
</VirtualHost>

# ... many more VirtualHosts

Şu anda, /var/log/httpd-error.log dosyasında bazı rasgele hatalar alıyorum, ancak /var/log/httpd-access.log dosyasında hiçbir şey almıyorum. TÜM erişim ve hataların paylaşılan bir günlük dosyasına kopyalanması mümkün mü? Her bir VirtualHost'a yeni girişler eklemeden bunu yapmak mümkün müdür?

Yanıtlar:


17

Bkz. Http://httpd.apache.org/docs/2.2/logs.html#virtualhost

CustomLog veya ErrorLog yönergeleri bir bölümün içine yerleştirilirse, söz konusu sanal ana bilgisayar için tüm istek veya hatalar yalnızca belirtilen dosyaya kaydedilir. Günlük yönergesi olmayan sanal ana bilgisayarların istekleri yine de ana sunucu günlüklerine gönderilir.

Başka bir deyişle, Günlük yönergelerini bir VirtualHost bölümüne yerleştirirseniz, ana sunucu yapılandırmasındaki Günlük yönergelerini geçersiz kılar. Tek bir günlük dosyasına oturum açmak istiyorsanız, VirtualHost bölümlerinizden günlük yapılandırmasını kaldırın.

Basit olması için, tüm Access verilerini tek bir günlük dosyasına kaydetmeyi tercih ederim. Daha sonra günlükleri işleyebilir ve günlük dosyalarını Sanal Ana Bilgisayarlar için günlük dosyalarına bölebilirsiniz. Ayrıca, tek bir günlük dosyasına yazmak, bilgisayar kaynaklarının daha verimli kullanılması ve bir kerede 30 günlük dosyasına yazılmasıdır. LogFormat'ınızın Sanal Ana Bilgisayarın adını günlüğe kaydedecek '% v' içerdiğinden emin olun.

TÜM erişim ve hataların paylaşılan bir günlük dosyasına kopyalanması mümkün mü?

Tüm hataları günlüğe kaydedebilir ve paylaşılan bir günlük dosyasına erişebilirsiniz, ancak günlük dosyası çirkin. İlk olarak, Apache günlük verilerini syslog'a gönderin ve sonra yerel bir dosyaya veya uzak günlük sunucusuna göndermek için syslog'u kullanın.

# Send access logs to syslog
LogFormat "%v %h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog "|/usr/bin/logger -t httpd -i -p local7.notice" combined
# Send error logs to syslog
ErrorLog syslog:local7

Ve sonra /etc/syslog.conf içinde

# Send all HTTP log data to this file
local7.*        /var/log/http-all.log

2

Ne yaptım VirtualHost bölümünde ikinci bir CustomLog satırı eklemek oldu. Ama bunu her vhost conf dosyası için yapmak zorunda kaldım. Çalışıyor ve şimdi şablonumda, bu yüzden yeni hayaletler araba alındı.

Apache2 artık isabetleri iki yere kaydediyor:

  1. Söz konusu vhost dizinindeki bir vhost özellikleri ve
  2. için /var/log/apache2tüm sankonlar için kombine dosyada.

Tabii ki, sırasıyla bu iki günlüğün her birine farklı bir LogFormat uyguluyorum. /var/log/apache2Günlük Perl ile ayrıştırılır ve analiz ve raporlama için oldukça normalize MySQL yapısına emilir. Logrotate haftada bir kez süpürür.


1

sadece tüm sanal ana bilgisayarlar için canlı günlükleri tek bir yerde görmek istiyorsanız, şunu yazabilirsiniz:

tail -f /var/www/*/access.log

aynı kural grepli kedi için de geçerlidir:

 cat /var/www/*/access.log | grep "something"

veya günlük döndürme zaten sıkıştırılmış dosyaları:

gzip -d /var/www/*/access.log.2.gz

örnekler Debian / Ubuntu üzerinde test edilmiştir


0

Bunun mümkün olduğunu düşünmüyorum. En azından belgeler böyle bir şeyden bahsetmiyor.

Bu tür bir davranışı simüle etmenin en iyi yolu,% v etiketini formatta tanımlamak ve günlük rotasyonunda, günlük dosyalarının bir kopyasını sanal ana bilgisayara özgü dosyalara bölmektir.


0

Günlük dosyası konumlarınızın sanal ana bilgisayarlarda herhangi bir deseni takip edip etmediğini bilmiyorum, ancak eğer yaparlarsa Apache'nin yinelenen bir günlük oluşturmasını ve ihtiyaç duyduğumda günlükleri cat etmesini unuturdum.

cat /var/www/*/log/access.log > /var/www/logs/access.log

0

Ben de bu soruya bir cevap arıyorum. Şimdiye kadar iki çözümüm var:

  1. Kedi söz çözüm joebert
  2. kendi kuyruk çözümüm: tail -f /var/log/httpd/*access_log

tail -fAna bilgisayardaki tüm web sunucusu etkinliklerine bir tür görünüm görebilmek istiyorum . Ben sadece tek bir dosyayı kuyruk tercih edebilecek, ancak, kuyruk çok dosya işleme şekli gerçekten sevmiyorum gibi.


Çok kuyruklu ol. Oldukça kullanışlı.
Till


0

Tüm erişim günlüklerini izlemek kesinlikle gerekli mi? Hatalara aslında bir vhost isteği neden oluyorsa, vhost hata günlüğüne kaydedilmiş bir şey olmalıdır. Bu durumda, hangi vhost'un suçlu olduğunu belirlemek için ls -t /var/www/*/log/error.log ve daha sonra sadece erişim günlük dosyasını izlemek gereksiz birçok günlük okumayı ortadan kaldırmak için iyi bir ilk adım gibi görünüyor .

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.