अपाचे वर्चुअल होस्ट के साथ "कैच-ऑल" एक्सेस लॉग?


16

मेरे पास वेब सर्वर पर स्थापित कई वर्चुअल होस्ट हैं, प्रत्येक की अपनी त्रुटि और एक्सेस लॉग है। इस तरह की प्रासंगिक लाइनें httpd.confहैं:

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

वर्तमान में, मुझे /var/log/httpd-error.log में कुछ यादृच्छिक त्रुटियाँ मिल रही हैं, लेकिन मुझे /var/log/httpd-access.log में कुछ नहीं मिल रहा है। क्या सभी एक्सेस और त्रुटियों को एक साझा लॉगफ़ाइल में दोहराया जाना संभव है? क्या हर एक VirtualHost में नई प्रविष्टियों को जोड़े बिना ऐसा करना संभव है?

जवाबों:


17

Http://httpd.apache.org/docs/2.2/logs.html#virtualhost देखें

यदि CustomLog या ErrorLog निर्देशों को एक अनुभाग के अंदर रखा गया है, तो उस वर्चुअल होस्ट के लिए सभी अनुरोध या त्रुटियां केवल निर्दिष्ट फ़ाइल में लॉग की जाएंगी। कोई भी वर्चुअल होस्ट जिसमें लॉगिंग निर्देश नहीं हैं, फिर भी इसके अनुरोध मुख्य सर्वर लॉग में भेजे जाएंगे।

दूसरे शब्दों में, यदि आप लॉगिंग निर्देशों को एक वर्चुअलबॉस्ट अनुभाग में रखते हैं, तो यह मुख्य सर्वर कॉन्फ़िगरेशन के भीतर लॉगिंग निर्देशों को ओवरराइड करेगा। यदि आप किसी एकल लॉगफ़ाइल में लॉग इन करना चाहते हैं, तो अपने VirtualHost से लॉग कॉन्फ़िगरेशन को हटा दें।

सादगी के लिए, मैं सभी एक्सेस डेटा को एक लॉगफाइल में लॉग करना पसंद करता हूं। बाद में, आप लॉग को संसाधित कर सकते हैं और वर्चुअल होस्ट के लिए लॉगफ़ाइल्स को लॉगफ़ाइल्स में विभाजित कर सकते हैं। इसके अलावा, एकल लॉगफ़ाइल में लिखना कंप्यूटर संसाधनों का एक अधिक कुशल उपयोग है, फिर एक बार में 30 लॉगफ़ाइल्स लिखना। बस सुनिश्चित करें कि आपके LogFormat में '% v' शामिल है, जो वर्चुअल होस्ट के नाम को लॉग करेगा।

क्या सभी एक्सेस और त्रुटियों को एक साझा लॉगफ़ाइल में दोहराया जाना संभव है?

आप सभी त्रुटियों को लॉग कर सकते हैं और साझा लॉगफ़ाइल तक पहुंच सकते हैं, लेकिन लॉगफ़ाइल बदसूरत है। सबसे पहले, Apache लॉग डेटा को syslog पर भेजें, और फिर किसी स्थानीय फ़ाइल या दूरस्थ लॉग सर्वर पर भेजने के लिए syslog का उपयोग करें।

# 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

और फिर /etc/syslog.conf में

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

2

मैंने जो किया वह VirtualHost अनुभाग में एक दूसरी CustomLog पंक्ति जोड़ रहा था। लेकिन मुझे यह हर एक vhost conf फाइल के लिए करना था। यह काम करता है और यह मेरे खाके में है इसलिए अब नई vhosts की कार ली गई है।

मेरा Apache2 अब दो स्थानों पर हिट करता है:

  1. उस vhost की निर्देशिका में एक vhost के लिए विशेष और
  2. करने के लिए /var/log/apache2सभी vhosts के लिए एक संयुक्त फ़ाइल में।

मैं इनमें से प्रत्येक के लिए एक अलग लॉगफ़ॉर्मेट लागू करता हूं, क्रमशः समायोजित करने के लिए। /var/log/apache2लॉग पर्ल के साथ पार्स और विश्लेषण और रिपोर्टिंग के लिए एक अत्यधिक सामान्यीकृत MySQL संरचना में चूसा जाता है। लोगरोट सप्ताह में एक बार स्वीप करते हैं।


1

यदि आप केवल सभी प्रकार के वर्चुअल मेजबानों के लिए एक ही स्थान पर लाइव लॉग देखना चाहते हैं, तो आप टाइप कर सकते हैं:

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

grep के साथ बिल्ली के लिए भी यही नियम लागू होता है:

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

या यदि लॉग रोटेट पहले से ही फ़ाइलों को संपीड़ित करता है:

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

उदाहरणों का परीक्षण डेबियन / उबंटू पर किया जाता है


0

मुझे नहीं लगता कि यह संभव है। कम से कम प्रलेखन में ऐसी बात का उल्लेख नहीं है।

इस प्रकार के व्यवहार को अनुकरण करने का सबसे अच्छा तरीका प्रारूप में% v टैग को परिभाषित करना है और लॉग रोटेशन पर लॉग फ़ाइलों की एक प्रतिलिपि को वर्चुअल होस्ट विशिष्ट फ़ाइलों में विभाजित करना है।


0

मुझे नहीं पता कि आपके लॉग फ़ाइल स्थान वर्चुअलहोस्टेस के किसी भी प्रकार के पैटर्न का अनुसरण करते हैं, लेकिन यदि वे करते हैं तो मैं अपाचे को एक डुप्लिकेट लॉग बनाने के बारे में भूल जाऊंगा और जब मुझे उनकी आवश्यकता होगी, तो लॉग को पूरा कर लेंगे।

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

0

मैं इस सवाल का जवाब भी ढूंढ रहा हूं। अब तक, मेरे पास दो समाधान हैं:

  1. बिल्ली समाधान joebert उल्लेख किया
  2. मेरी अपनी पूंछ समाधान: tail -f /var/log/httpd/*access_log

मैं tail -fहोस्ट पर सभी वेब सर्वर गतिविधि में एक प्रकार का दृश्य देखने में सक्षम होना चाहता हूं । मैं बहुत अधिक सिर्फ एक फ़ाइल को पूंछने में सक्षम हो सकता हूं, हालांकि, जैसा कि मुझे वास्तव में पसंद नहीं है जिस तरह से पूंछ कई फाइलों को संभालती है।


मल्टीटेल प्राप्त करें। यह बहुत उपयोगी है।
तक

0

आपके पास ErrorLog निर्देश http://httpd.apache.org/docs/2.2/mod/core.html#errorlog का उपयोग करके 2 संभावनाएं हैं

1) syslog का उपयोग करें और [r] syslog.conf में दोहराव को संभालें

2) पाइप का उपयोग करें, लॉग प्रविष्टि को किसी एप्लिकेशन / स्क्रिप्ट पर भेजें और उस एप्लिकेशन / स्क्रिप्ट में दोहराव को संभालें


0

क्या सभी एक्सेस लॉग को सख्ती से देखना आवश्यक है? यदि त्रुटियाँ वास्तव में vhost के अनुरोध के कारण होती हैं, तो vhost त्रुटि लॉग में कुछ लॉग होना चाहिए। उस स्थिति में, ls -t /var/www/*/log/error.log यह निर्धारित करने के लिए कि कौन-सा vhost अपराधी है और फिर यह देखना कि एक्सेस लॉग फ़ाइल बहुत सारे बेकार लॉग रीडिंग को खत्म करने के लिए एक अच्छा पहला कदम प्रतीत होगा। ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.