첫 번째 질문에 대한 답은 다음과 같습니다.
예, syslog () 호출이 차단되었습니다. 아마도 아주 짧은 시간이지만 파일 디스크립터와 관련된 동기 호출입니다. 참조 man 3 syslog
더 detials 위해.
서버가 비동기 아키텍처와 프리미티브를 사용하지 않는 한 항상 잠금이 있습니다. 예를 들어 로깅에 별도의 스레드를 사용하여 Thsi를 완화 할 수는 있지만 제거 할 수는 없습니다. 다른 두 가지 질문에 대해서는 잘 모르지만 rsyslogd 소스 코드와 syslog () 계열 함수에 대한 검사)는 유일한 방법입니다.
보다 일반적으로, UDP : 514 "network syslog protocol"을 통해 로깅을 외부 서버로 옮기면 거의 0으로 잠금을 만들 수 있습니다. 로드가 많을 때 일부 로깅이 손실 될 수 있다는 단점이 있습니다 .
먼저 "시작"서버에서 모든 로깅이 syslog를 통해 이루어 지도록해야합니다. 예를 들어 Apache2에서는 다음을 지정해야합니다.
ErrorLog "syslog:daemon"
다른 서버에 대해서는 해당 매뉴얼 페이지를 참조하십시오. 이를 확인할 수없는 경우 파일 시스템에 로그온하면 다음을 만들 수 있습니다.
둘째 , 시작 rsyslogd 구성에서 선택한 기능 (이 예에서는 "데몬")의 모든 syslog 트래픽을 하나 이상의 외부 syslog 서버로 보내도록 요청합니다. rsyslog 구성 파일에서 다음을 지정할 수 있습니다.
daemon.* @192.168.128.1
daemon.* @192.168.254.1
두 개의 로그 사본을 동시에 두 개의 다른 서버로 보내야합니다.
셋째 , 대상 서버에서 UDP : 514를 통한 syslog 메시지 수신을 활성화합니다. (목적지) rsyslogd 구성 파일에 있으며 일반적으로 defualt에 의해 비활성화됩니다 (선행 #을 제거하기에 충분합니다 :
$ModLoad imudp
$UDPServerRun 514
넷째 , 선택 사항이지만 강력히 권장되며 고해상도 타임 스탬프도 활성화합니다.
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
또한이 옵션은 일반적으로 기본적으로 비활성화되어 있습니다 (지구상 이유).