다음 아키텍처를 고려하십시오.
이더넷을 통해 서버에 연결된 랩톱이 있습니다.
랩탑은 서버의 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 서버(인덱서 및 검색 헤드)에 설치하고, 구성한 후 데이터를 기다립니다. 연결되지 않은 경우 클라이언트는 기다렸다가 서버를 "인식"하면 로그 전달을 시작합니다. 나중에 그래픽 인터페이스를 통해 광범위한 로그 분석을 수행할 수 있습니다.
이 솔루션은 다른 머신(클라이언트)에도 적용 가능합니다.
약점은 다음과 같습니다.
- 하루에 500MB의 로그가 있습니다. 더 많은 트래픽을 얻으려면 라이센스를 구입해야 합니다.
- Splunk가 로그 회전을 얼마나 잘 처리하는지 잘 모르겠습니다. AFAIK 오프라인 상태에서 회전이 발생하면 회전 파일(예: /var/log/messages1)에서 로그를 가져오지 못할 수 있습니다. 이것은답변이 주제에 대해.