rsyslogd (8) 및 쓰기 버퍼 증가를 통한 비동기 로깅


10

가상 컨테이너 (VMware)에서 실행되고 로컬 스토리지가 부족한 트래픽이 많은 웹 사이트에서 직접 로깅에서 로그 파일 (원격 네트워크 스토리지에 상주)로 전환하여 처리량 (초당 요청 수)을 크게 늘 렸습니다. rsyslogd .

기본적으로 동기 로깅에서 비동기 로깅으로 전환했습니다. 웹 서버 작업자는 syslog (3) 를 사용하여 일부 메모리 버퍼에 쓰고 rsyslogd (8) 는 데이터를 실제 파일에 병렬로 자체 속도로 전송하므로 로깅시 프로세스가 IO에서 차단되지 않습니다.

여태까지는 그런대로 잘됐다. 문제는 경우에 따라 rsyslogd의 쓰기가 방지되고 (예 : 일시적 / 장기 네트워크 중단) 수신 버퍼가 빨리 채워진다는 것입니다.

내 질문은 :

  • syslog (3)를 사용하여 rsyslogd에 쓸 때 클라이언트가 차단할 수 있습니까 ?
  • rsyslogd 통계 를 볼 수있는 방법이 있습니까? 예를 들어 버퍼가 얼마나 크거나 꽉 찼습니까?
  • rsyslogd 수신 버퍼 의 크기를 늘리는 방법이 있습니까?

2
이 문제를 해결 한 적이 있습니까? 그렇다면 귀하의 답변을 읽는 데 관심이 있습니다.
djeikyb

1
@djeikyb : 죄송합니다. 나는 관심을 보았지만 (질문에 대한 투표) 아직 아무도 대답하지 않았다. 소스 코드 다이빙이 필요한 것 같습니다.
arielf

1
어떤 웹 서버를 사용하고 있는지 말하지 않습니다. syslog를 전혀 사용해서는 안됩니다. 예를 들어 Apache는 syslog를 사용하여 로그하거나 로그 파일에 쓰나요? 데이터베이스에 로그인하는 것도 가능합니다.
blujay

답변:


1

rsyslog의 기본 메시지 대기열에 대한 기본 모드는 고정 크기 배열입니다. 10k 요소에 대한 제한이 있습니다. 이 메시지를 링크 된 목록 대기열로 변경하면 가끔 발생하는 메시지 버스트를 훨씬 잘 처리해야합니다.

예, 있습니다 FixedArrayLinkedList큐.


"변경을 시도하십시오 ..."더 명확 할 수 있습니까? 살펴보기 /etc/rsyslog.conf: 언급 한 대기열 유형과 관련이 없습니다. 코드 변경이 필요합니까? 이것들은 어디서 어떻게 구성 할 수 있습니까? 감사!
arielf 2016 년

1

첫 번째 질문에 대한 답은 다음과 같습니다.

예, 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

또한이 옵션은 일반적으로 기본적으로 비활성화되어 있습니다 (지구상 이유).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.