어떤 이유로,시스템 로그유효한 메시지를 올바르게 해석할 수 없는 것 같습니다 RFC 5424
. RFC에서 제공한 예제도 작동하지 않습니다.
$ echo "<165>1 2003-08-24T05:14:15.000003-07:00 192.0.2.1 myproc 8710 - - %% It's time to make the do-nuts." | nc -w1 -Uu /dev/log
로그 라인 결과:
Dec 1 16:39:08 host 1 2003-08-24T05:14:15.000003-07:00 192.0.2.1 myproc 8710 - - %% It's time to make the do-nuts.
이는 메시지가 RFC 5424
메시지로 올바르게 해석되지 않고 대신 전체 문자열이 메시지 페이로드로 처리됨을 나타냅니다.
반면에 이전 RFC 3164
형식은 문제 없이 허용됩니다.
$ echo "<165>Dec 1 05:14:15 myproc[8710]: %% It's time to make the do-nuts."| nc -w1 -Uu /dev/log
결과는 올바른 로그 줄입니다.
Dec 1 16:44:31 host myproc[8710]: %% It's time to make the do-nuts.
인터넷을 뒤져봐도 지원이 부족하다는 언급은 찾을 수 없습니다.시스템 로그옆. 내가 뭐 잘못 했어요?
저는 리눅스 민트 20을 사용하고 있습니다.시스템 로그버전은8.2001.0 (aka 2020.01)
때문인가?체계즉, 메시지 내용이 도착하기 전에 어떤 방식으로든 수정합니다.시스템 로그?
답변1
동일한 문제가 있었고 마침내 이것을 rsyslog.conf에 추가하여 해결책을 찾았습니다.
input(type="imuxsock" socket="/dev/log" useSpecialParser="off")
useSpecialParser 매개변수는 imuxsock 입력 모듈에 RFC5424 형식을 구문 분석할 수 없는 특수 구문 분석기 대신 메시지에 일반 구문 분석기를 사용하도록 지시합니다. 참조.https://rsyslog-doc.readthedocs.io/en/latest/configuration/modules/imuxsock.html
RFC5424는 udp 또는 tcp와 같은 다른 입력 모듈에 대해 항상 올바르게 구문 분석합니다.
답변2
상황은 여기에 잘 설명되어 있습니다.syslog 메시지 형식과의 혼동.
간단히 말해서:
- 대부분의 *nix 로거는 RFC 3164를 사용합니다.
- 그러나 rsyslogd를 사용하면 RFC 5424 형식을 구성할 수 있습니다.
다음은 진행 방법을 설명하는 많은 기사 중 하나입니다.
기본적으로 Syslog는 RFC 3164에 따라 생성됩니다. 각 syslog에 최대량의 정보를 구조화된 형식으로 제공하려면 RFC 5424 관련 syslog 로깅을 활성화하면 됩니다.
RFC 5424 호환 syslog에는 syslog 유형 식별, syslog 메시지 필터링, syslog 생성 시간(표준 시간대에 따른 연도 및 밀리초) 식별 및 기타 개선 사항을 돕는 향상된 syslog 헤더가 있습니다. 이
logging enable rfc5424
명령을 사용하여 RFC 5424 관련 syslog를 활성화할 수 있습니다. RFC 5424 특정 Syslog를 활성화하기 전에 로깅 버퍼를 지워야 합니다. 그렇지 않으면 오류가 표시됩니다.
OP에 따르면 :
내 질문은 클라이언트와 rsyslog 서비스 간의 통신 프로토콜에 관한 것입니다.
저는 libc의 라이브러리 함수 syslog()를 사용하지 않습니다... 저는 nc를 사용하여 /dev/log에 직접 데이터그램을 보내고 있습니다
이 경우 해결책은 표준 RFC 3164 형식으로 데이터그램을 보내는 것 같습니다.
가능성이 희박한 경우:
https://www.rsyslog.com/doc/master/concepts/messageparser.html
메시지 구문 분석기는 rsyslog 5.3.4 이상의 기능입니다.
[그들은] syslog 메시지를 수신한 후 구문 분석하는 데 사용되는 rsyslog의 구성 요소입니다. rsyslog 5.3.4 이전에는 메시지 구문 분석기가 rsyslog 코어 자체에 내장되어 있어 수정할 수 없었습니다(rsyslog 코드 수정 외에).
5.3.4에서는 이것을 변경했습니다. 메시지 구문 분석기는 이제 로드 가능한 모듈입니다(입력 및 출력 모듈과 마찬가지로). 이는 rsyslog 코어를 수정하거나 프로젝트에 기여하지 않고도 새 메시지 구문 분석기를 추가할 수 있음을 의미합니다.