소개
Syslog Client 를 직접 만들어 보기위해 syslog의 개념에 대해 확실히 집고 넘어가고자 내용을 정리해 봅니다.
Syslog 란?
시스템, 소프트웨어 등에서 발생하는 로그 메시지 로깅을 위한 표준 프로토콜입니다. 이 표준을 통해서 생성된 Syslog 를 Local 혹은 Remote Server(Elastic 같은) 로 송수신하여 로그 분석을 용이하게 할 수 있게 됩니다.
RFC3164 vs RFC5424
RFC3164 는 최초의 BSD 포맷의 Syslog 표준형식으로 정의 되었었습니다.
그러다 이 후 RFC5424 를 통해서 새로운 syslog format이 정의 되었고, 이를 통해서 더 정확한 timestamp 지정이 가능하게 되었고, 보다 더 구조화된 로그 메시지 설정이 가능하게 하였습니다.
RFC3164 에서의 Syslog Format
RFC3164에서 정의하고 있는 로그 Format은 아래와 같습니다.
<35>Aug 11 10:11:12 hostname su: 'su root' failed for login on /dev/pts/2
# <priority>[timestamp] [hostname] [processname] [message]
위의 포맷에서 priority 번호에 대해서만 대략적으로 설명을 하면 될 것같습니다. 나머지는 필드명만 봐서도 대략적으로 어떤 값이 들어가면 되는지 알 수 있을 것 같으니까요.
- priority
- 아래의 표(Priority 설정을 위한 Facility-Serverity)를 통해 적합한 값을 매칭하여 생성하면 priority 값을 보고도 Facility(유형) 과 Serverity(중요도)를 대략적으로 파악을 할 수 있게 됩니다.
- 예를 들어 Facility : secur/auth(4) 이고 Serverity : Error(3) 이라면, Priority 값은 35 가 되는 것이죠.
RFC5424 에서의 Syslog Format
<34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 - BOM'su root' failed for lonvick on /dev/pts/8
# <priority>VERSION ISOTIMESTAMP HOSTNAME APPLICATION PID MESSAGEID STRUCTURED-DATA MSG
위의 포맷을 보면 기존의 RFC3164에서 추가된 필드들이 보입니다. 특징적인 부분은 Structured-data 를 통해서 로그 파싱이 좀더 쉽도록 지원을 하고 있습니다.