Nhật ký truy cập-Tất cả các nhật ký truy cập với các máy chủ ảo Apache?


16

Tôi có nhiều máy chủ ảo được thiết lập trên một máy chủ web, mỗi máy chủ đều có lỗi và nhật ký truy cập riêng. Các dòng liên quan httpd.conflà một cái gì đó như thế này:

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

Hiện tại, tôi đang gặp một số lỗi ngẫu nhiên trong /var/log/httpd-error.log, nhưng tôi không nhận được gì trong /var/log/httpd-access.log. Có thể có TẤT CẢ các truy cập và lỗi trùng lặp với một logfile được chia sẻ không? Có thể làm điều này mà không cần thêm các mục mới vào mỗi Virtualhost không?

Câu trả lời:


17

Xem http://httpd.apache.org/docs/2.2/logs.html#virtualhost

Nếu các lệnh CustomLog hoặc ErrorLog được đặt bên trong một phần, tất cả các yêu cầu hoặc lỗi cho máy chủ ảo đó sẽ chỉ được ghi vào tệp được chỉ định. Bất kỳ máy chủ ảo nào không có chỉ thị ghi nhật ký vẫn sẽ có các yêu cầu được gửi đến nhật ký máy chủ chính.

Nói cách khác, nếu bạn đặt các lệnh Ghi nhật ký trong phần Virtualhost, nó sẽ ghi đè các lệnh Ghi nhật ký trong cấu hình máy chủ chính. Nếu bạn muốn đăng nhập vào một logfile, sau đó xóa cấu hình nhật ký khỏi các phần Virtualhost của bạn.

Để đơn giản, tôi thích đăng nhập tất cả dữ liệu Access vào một logfile duy nhất. Sau đó, bạn có thể xử lý nhật ký và chia logfiles thành logfiles cho Virtual Hosts. Ngoài ra, viết vào một logfile là cách sử dụng tài nguyên máy tính hiệu quả hơn sau đó ghi vào 30 logfile cùng một lúc. Chỉ cần đảm bảo LogFormat của bạn bao gồm '% v', sẽ ghi lại tên của Máy chủ ảo.

Có thể có TẤT CẢ các truy cập và lỗi trùng lặp với một logfile được chia sẻ không?

Bạn có thể đăng nhập tất cả các lỗi và truy cập vào một logfile được chia sẻ, nhưng logfile thì xấu. Đầu tiên, gửi dữ liệu nhật ký Apache tới syslog và sau đó sử dụng syslog để gửi đến tệp cục bộ hoặc máy chủ nhật ký từ xa.

# 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

Và sau đó trong /etc/syslog.conf

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

2

Những gì tôi đã làm là thêm một dòng CustomLog thứ hai trong phần Virtualhost. Nhưng tôi đã phải làm điều này cho mỗi tệp conf vhost. Nó hoạt động và nó nằm trong mẫu của tôi bây giờ vì vậy các vhost mới được đưa vào xe.

Apache2 của tôi bây giờ ghi nhật ký lượt truy cập đến hai nơi:

  1. Các chi tiết cụ thể cho một vhost trong thư mục của vhost đó và
  2. để /var/log/apache2trong một file kết hợp cho tất cả vhosts.

Tất nhiên, tôi áp dụng một LogFormat khác nhau cho mỗi hai bản ghi này để phù hợp. Các /var/log/apache2bản ghi được phân tách với Perl và bị hút vào một cấu trúc MySQL rất bình thường để phân tích và báo cáo. Logrotate quét lên mỗi tuần một lần.


1

tốt nếu bạn chỉ muốn xem nhật ký trực tiếp ở một nơi cho tất cả các máy chủ ảo, bạn chỉ cần gõ:

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

quy tắc tương tự áp dụng cho mèo với grep:

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

hoặc nếu bản ghi xoay đã nén các tệp đã có:

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

ví dụ được thử nghiệm trên Debian / Ubuntu


0

Tôi không nghĩ rằng điều này là có thể. Ít nhất là tài liệu không đề cập đến điều đó.

Cách tốt nhất để mô phỏng loại hành vi này là xác định thẻ% v theo định dạng và tại vòng quay nhật ký, chia một bản sao của tệp nhật ký cho các tệp cụ thể của máy chủ ảo.


0

Tôi không biết các vị trí tệp nhật ký của bạn có tuân theo bất kỳ loại mẫu nào trên các máy chủ ảo hay không, nhưng nếu có, tôi sẽ quên việc Apache tạo một nhật ký trùng lặp và chỉ ghi nhật ký khi tôi cần chúng.

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

0

Tôi đang tìm kiếm một câu trả lời cho câu hỏi này là tốt. Cho đến nay, tôi có hai giải pháp:

  1. những con mèo joebert giải pháp nêu
  2. giải pháp đuôi của riêng tôi: tail -f /var/log/httpd/*access_log

Tôi muốn có thể thấy một tail -floại chế độ xem vào tất cả hoạt động của máy chủ web trên máy chủ. Tuy nhiên, tôi muốn có thể chỉ theo dõi một tệp, vì tôi không thực sự thích cách đuôi xử lý nhiều tệp.


Nhận đa nhiệm. Nó khá hữu ích.
Đến

0

Bạn có 2 khả năng sử dụng chỉ thị ErrorLog http://httpd.apache.org/docs/2.2/mod/core.html#errorlog

1) Sử dụng syslog và xử lý sao chép trong [r] syslog.conf

2) Sử dụng đường ống, gửi mục nhật ký đến một ứng dụng / tập lệnh và xử lý sự trùng lặp trong ứng dụng / tập lệnh đó


0

Là xem tất cả các bản ghi truy cập cần thiết nghiêm ngặt? Nếu các lỗi thực sự gây ra bởi một yêu cầu cho một vhost, thì sẽ có một cái gì đó được ghi vào nhật ký lỗi vhost. Trong trường hợp đó, ls -t /var/www/*/log/error.log để xác định vhost nào là thủ phạm và sau đó xem tệp nhật ký truy cập đó có vẻ là bước đầu tiên tốt để loại bỏ rất nhiều việc đọc nhật ký không cần thiết .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.