
문제는 특히 여러 호스트(둘 이상의 서버에 설치된 Apache 인스턴스)의 액세스 및 오류 로그에 관한 것이며 네트워크 파일 시스템에 로그를 중앙에 유지하는 것입니다.
Apache는 쓰기 후에 각 로그 파일을 닫습니까?
그렇다면 각각 자체 로그가 있는 많은 사이트를 호스팅하는 사용량이 많은 서버에서 잠재적인 성능 병목 현상이 발생할 수 있습니까?
아니요, 여러 서버가 네트워크 파일 시스템의 단일 로깅 위치에 쓸 때 해결 방법은 무엇입니까?
답변1
Apache는 쓰기 후에 각 로그 파일을 닫습니까?
소스를 사용하세요. 다음 위치에 있습니다. https://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/modules/loggers/mod_log_config.c?view=markup
당신은 그것을 읽을 수 있습니다 :
251 * log_writer is NULL before the log file is opened and is
252 * set to a opaque structure (usually a fd) after it is opened.
그런 종류의 힌트는 한 번만 열려 있다는 것을 의미합니다. 실제로 코드를 보면 초기화 시 초기에 열려 있고 그 다음에는 명백한 성능상의 이유로 절대 닫히지 않습니다.
아니요, 여러 서버가 네트워크 파일 시스템의 단일 로깅 위치에 쓸 때 해결 방법은 무엇입니까?
두 가지 이유 때문에 절대 그렇게 하지 마십시오. 먼저 그런 식으로 원격으로 로그인하지 마십시오. 로컬로 로그를 기록하거나(예를 들어 로그 파일을 별도로 전송, 예를 들어 매시간 순환할 수 있음) 적절한 데몬을 사용하면 syslog
최신 솔루션처럼 UDP(또는 TCP)를 통해 로그 콘텐츠를 전송하는 방법을 기본적으로 알고 있습니다. 원격 디스크를 마운트하고 로그 파일을 기록하지 마십시오. 그러면 성능이 저하되고 많은 문제가 발생합니다(특히 "NFS"에서처럼 원격을 의미하는 경우).
그리고 로컬인 경우에도 각 응용 프로그램은 자체 로그 파일에 기록해야 하며 동일한 파일에 기록하는 여러 응용 프로그램이 없습니다. 이로 인해 모든 종류의 경쟁 조건이 생성되고 덮어쓰기 등이 발생하게 됩니다. Apache 자체는 포크하더라도 하나의 응용 프로그램입니다. 그러나 동일한 호스트에서 서로 다른 구성으로 별도로 실행되는 2개의 Apache가 있는 경우 각각 자체 로그 파일에 기록해야 합니다.
또는 파이프에 기록하는 Apache 기능을 살펴보세요. 하지만 이것도 단점이 있습니다.
답변2
AFAIK 여러 Apache 웹 서버가 동일한 로그 파일에 동시에 쓰도록 할 수 없습니다.
클러스터의 경우 모든 노드가 자체 로그 파일에 기록하도록 한 다음 후처리를 수행하여 이를 병합하거나 Apache가 syslog 이벤트를 생성하도록 하고 이를 단일 파일로 병합할 수 있는 중앙 syslog 서버로 보내거나 ELK Stack, Graylog, Splunk 및/또는 기타 로그 집계 솔루션을 사용하여 모든 클러스터 노드의 로그 이벤트를 단일 빅 데이터 데이터베이스로 전달합니다.