Viết Apache2 Đăng nhập vào thiết bị xuất chuẩn / stderr?


29

Tôi đang chạy Apache2 trong một thùng chứa docker và không muốn ghi gì vào đĩa, ghi nhật ký vào thiết bị xuất chuẩn và thiết bị xuất chuẩn. Tôi đã thấy một vài cách khác nhau để làm điều này ( Giám sát và thiết bị xuất chuẩn / thiết bị xuất chuẩn , nhật ký truy cập Apache vào thiết bị xuất chuẩn ) nhưng những cách này có vẻ như là hack. Không có cách nào để làm điều này theo mặc định?

Để rõ ràng, tôi không muốn theo dõi nhật ký, vì điều đó sẽ dẫn đến những thứ được ghi vào đĩa trong container.


Bạn sẽ không muốn những bản ghi đó có thể dễ dàng truy cập cho mục đích khắc phục sự cố / gỡ lỗi chứ? Tại sao không chỉ viết chúng vào một máy chủ syslog (r) thay thế?
HTTP500

@ HTTP500 - Chúng bị bắt ở bên ngoài thùng chứa docker.
Matt

Nếu bạn sử dụng: TỪ php: 5.6-apache, điều đó đã bao gồm các bản ghi vào thiết bị xuất chuẩn và thiết bị xuất chuẩn.
Martlark

Câu trả lời:


30
  ErrorLog /dev/stderr
  TransferLog /dev/stdout

hoạt động trên Ubuntu và centos cho tôi


tập tin nào nên đi vào vv
Alexander Mills

Điều này đi vào domain.conftập tin của bạn hoặc .htaccessnếu bạn không sử dụng a conf.
Tyler Christian

25

Làm thế nào về việc đặt cái này trong Dockerfile của bạn sau khi gói apache2 được cài đặt?

RUN ln -sf /proc/self/fd/1 /var/log/apache2/access.log && \
    ln -sf /proc/self/fd/1 /var/log/apache2/error.log

Giả sử rằng đây là đường dẫn của các bản ghi. Nó dành cho Ubuntu 14.04 và cũng hoạt động cho Ubuntu 16.04.

Lưu ý: nếu bạn chắc chắn rằng các liên kết tượng trưng /dev/stdouthoặc /proc/stderrở đó, thì bạn cũng có thể sử dụng các liên kết đó. Tôi thích đường dẫn đến tập tin thực sự vì điều này được đảm bảo hiện tại.


cũng hoạt động rất tốt với Ubuntu 16.04 :)
OkieOth

1
Chết tiệt, đó là một hack khéo léo! Apache cố gắng mở một tệp thông thường, nhưng được chuyển hướng qua symlink đến thiết bị xuất chuẩn của chính nó từ quan điểm riêng của nó.
joonas.fi

1
Chỉ muốn nói lời cảm ơn ... bộ chứa docker httpd 2.4 apache chính thức không thể ghi nhật ký sau khi bật ssl. Thêm các dòng này + ssl numquest_log vào Dockerfile lấy từ httpd2.4 hoạt động.
j.con

3
Bạn có thể viết tắt / Proc / self / fd / 1 là / dev / stdout. Chúng chính xác là như nhau.
Chuck Adams

@ChuckAdams - chúng là một liên kết mềm và thường ở đó, nhưng không đảm bảo khi xây dựng hình ảnh mà chúng hiện diện. Đặc biệt là cắt giảm hình ảnh vi mô. Trong khi đó, kernel sẽ luôn xuất / Proc / self / fd / 1 & 2.
Matt

1

Không cụ thể một câu trả lời được yêu cầu nhưng có lẽ là một cách tốt hơn, tùy thuộc vào kịch bản của bạn, sẽ là không đăng nhập vào thiết bị xuất chuẩn / stderr. Chỉ cần chuyển các bản ghi thành con mèo theo định dạng JSON. Điều này sẽ loại bỏ sự cần thiết phải phân biệt các luồng vì json có thể có dữ liệu cần thiết trong đó để phân biệt chúng. ví dụ một cái gì đó dọc theo dòng sau đây. Điều này sau đó có thể được tiêu hóa dễ dàng hơn nhiều vào một cái gì đó như Graylog

GlobalLog "| cat - " gelf
ErrorLog "| cat - " 

LogFormat "{ \"apache_log\": \"ACCESS\", \"app_name\": \"apache\",  \"Connection\": \"%{X-Forwarded-Proto}i:%{X-Forwarded-Port}i \", \"X-Forwarded-For\": \"%{X-Forwarded-For}i\",  \"version\": \"1.1\", \"vhost\": \"%V\", \"short_message\": \"%r\", \"timestamp\": %{%s}t, \"level\": 6, \"user_agent\": \"%{User-Agent}i\", \"source_ip\": \"%a\", \"duration_usec\": %D, \"duration_sec\": %T, \"request_size_byte\": %O, \"http_status\": %s, \"http_request_path\": \"%U\", \"http_request\": \"%U%q\", \"http_method\": \"%m\", \"http_referer\": \"%{Referer}i\", \"X-Powered-By\": \"%{X-Powered-By}i\" }" gelf

ErrorLogFormat "{ \"app_name\": \"apache\",  \"apache_log\": \"ERROR\", \"time\":\"%{%Y-%m-%d}tT%{%T}t.%{msec_frac}tZ\", \"function\" : \"[%-m:%l]\" , \"process\" : \" [pid %P:tid %T] \" , \"message\" : \"%M\" ,\ \"referer\"\ : \" %{Referer}i \" }"

Ngoài ra còn có một mô-đun đăng nhập gelf, vì vậy bạn có thể truyền trực tiếp từ apache đến một máy chủ loại Graylog nếu bạn muốn

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.