부분적으로 연결이 끊어진 클라이언트의 로그 전달

부분적으로 연결이 끊어진 클라이언트의 로그 전달

다음 아키텍처를 고려하십시오.

이더넷을 통해 서버에 연결된 랩톱이 있습니다.
랩탑은 서버의 rsyslog를 사용하여 로그 이벤트를 보내도록 구성되어 있으며, 서버는 이러한 로그를 수락하고 나중에 로그 활용 소프트웨어와 함께 사용할 수 있도록 파일에 저장하도록 구성되어 있습니다.

문제는 가끔 원격 위치에서 작업하기 위해 노트북의 연결이 끊어졌다가 몇 시간 후에 다시 연결될 수 있다는 것입니다. 하지만 다시 연결한 후에도 모든 로컬 이벤트를 서버로 전송하고 싶습니다.

현재 내 생각은 syslog 모듈을 사용 omrelp하고 이벤트를 디스크 대기열에 로컬로 저장하는 것이지만 syslog 서버가 다시 사용 가능해지면 어떻게 작동할지 잘 모르겠습니다. relp 프로토콜이 메시지를 다시 보내지 않으면 시간 초과/제한이 있습니까? 아니면 내 상황에 맞지 않을 수도 있습니다.

또 다른 해결 방법은 다시 연결한 후 클라이언트와 서버 간의 로그를 조정하는 사용자 지정 스크립트를 만드는 것인데, 더 나은 해결 방법이 있는지 궁금합니다.

답변1

Rsyslog는 모든 작업에 대한 대기열 메커니즘을 제공합니다. 큐는 너무 커지거나 닫힐 때 디스크로 이동할 때까지 메모리에 남아 있습니다. omfwd에 의지하지 않고 일반 TCP 전달 설정과 함께 사용할 수 있습니다 omrelp.

자세히 알아보기 대기줄, 전체 내용 보기 대기열 옵션 문서 또는 두 번째 RedHat을 살펴보세요. "25.14. 새로운 구문을 사용하여 단일 서버로 전달".

이와 같은 레거시 구문이 있는 경우

*.* @@192.168.0.2:514

또는 RainerScript 버전

action(type="omfwd" Target="192.168.0.2" Port="514" Protocol="tcp")

다음과 같은 것으로 교체하십시오.

action(type="omfwd" Target="192.168.0.2" Port="514" Protocol="tcp"
       queue.type="linkedlist"
       queue.filename="stufftoforward"
       action.resumeRetryCount="-1"
       queue.saveOnShutdown="on")

답변2

떠오르는 가능한 솔루션 중 하나는 Splunk를 사용하는 것입니다. 클라이언트(노트북)에 Universal Forwarder를 설치하고, 로그를 모니터링하도록 구성하고, 서버 Splunk 서버(인덱서 및 검색 헤드)에 설치하고, 구성한 후 데이터를 기다립니다. 연결되지 않은 경우 클라이언트는 기다렸다가 서버를 "인식"하면 로그 전달을 시작합니다. 나중에 그래픽 인터페이스를 통해 광범위한 로그 분석을 수행할 수 있습니다.

이 솔루션은 다른 머신(클라이언트)에도 적용 가능합니다.

약점은 다음과 같습니다.

  1. 하루에 500MB의 로그가 있습니다. 더 많은 트래픽을 얻으려면 라이센스를 구입해야 합니다.
  2. Splunk가 로그 회전을 얼마나 잘 처리하는지 잘 모르겠습니다. AFAIK 오프라인 상태에서 회전이 발생하면 회전 파일(예: /var/log/messages1)에서 로그를 가져오지 못할 수 있습니다. 이것은답변이 주제에 대해.

관련 정보