중앙 집중식 로깅 구현하기 – rsyslog

HYEONG HWAN, MUN/ 1월 13, 2022/ 미분류/ 0 comments

https://blog.lael.be/post/10749

초고를 쓰고 틈틈이 다듬도록 하겠습니다.

현재는 trial and error 에 대해 적었음.

 

ubuntu 20.04 를 사용했음.

Ubuntu 의 기본 System Log 는 /etc/rsyslog.d/50-default.conf 파일을 따른다.

# vi /etc/rsyslog.d/50-default.conf

 

혹시나 기록하고 싶지만 주석(#)에 의해 막혀져 있는 것이 있다면 주석을 제거하고

# service rsyslog restart

혹시 현재 생성되지 않은 로그파일이 있다면, 그 파일은 기록할 내용이 있을때 생성된다. (빈 파일이 즉시 생성되지는 않음)

 

 

https://itragdoll.tistory.com/79 주로참고

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=skddms&logNo=221204436898 도움

https://ujuc.github.io/2018/03/01/rsyslog_-_templates/ 슈벌 문서 포맷팅 때문에 보기가 매우 불편한 글이다.

 

 

 

서버에서

vi rsyslog.conf

 

==

syslog 의 표준포트는 514 번임.

과거에는 udp 514 이었는데 udp 자체가 un reliable 이어서, tcp 도 나오고 여럿 나온듯.

 

UDP, TCP, TLS or RELP
You can send RFC-3164 and RFC-5424 compatible syslog to Logs Management App via any of the following protocols:

UDP: fire-and-forget protocol that doesn’t guarantee any reliability but is also the fastest and simplest implementation
TCP: provides better reliability than TCP, though messages might still be lost from the system buffers if the connection breaks and rsyslog is restarted
TLS: RFC-5425 syslog over TLS is supported
RELP: this is a reliable protocol, because it supports application-level acknowledgments

 

udp 는 그냥 메세지 보내고 끝내는것,

tcp는 연결지향이고, 연결이 끊어지면 자동 재접속을 해서 거의 최선의 노력으로 동작한다. 다만 받는 서버가 접속불능일 경우, 그 로그는 손실시킨다.

relp 라고 로그기반 가장 안전한 프로토콜이 있는데 (Reliable Event Logging Protocol) 이건 양쪽에 버퍼가 있고 acknowledgments 로 동작하므로 손실되지 않게 보장한다.

 

수집하는 로그의 중요도에 따라서 고르는게 나을듯.

 

syslog 내부가 어떻게 되있는지는 모르겠음. 다만 문서를 보니 property 와 value 로 구성된 것 같더라.

그래도 통신 구조가 궁금해서 tcpdump를 해보았다.

# tcpdump -nnAs 0 port 514

client 에서 로그를 만듬

ubuntu@ip-10-127-127-4:~$ logger -t test my syslog-test-message3

 

server 에서 raw data

<13>Nov 1 12:24:40 ip-10-127-127-4 test: my syslog-test-message3

timestamp ip source message 형식인듯.

Q1) 2021 년인것은 어떻게 아는거지?
Q2) user.notice 는 어떻게 아는거지?

https://datatracker.ietf.org/doc/html/rfc3164 RFC3164 문서를 보고 이해하려고 노력중

 

server 에서 formated data

{"@timestamp":"2021-11-01T12:24:40+09:00","message":" my syslog-test-message3","host":"ip-10-127-127-4","severity":"notice","facility":"user","syslog-tag":"test:","source":"test"}

 

# logger -p user.info -t test my syslog-test-message3 --rfc3164
<14>Nov 1 13:30:11 ip-10-127-127-4 ip-10-127-127-4 test: my syslog-test-message3

 

# logger -p user.info -t test my syslog-test-message3 --rfc5424
<14>Nov 1 13:30:19 ip-10-127-127-4 1 2021-11-01T13:30:19.664638+09:00 ip-10-127-127-4 test - - [timeQuality tzKnown="1" isSynced="1" syncAccuracy="312500"] my syslog-test-message3

 

logger: unknown facility name: users

logger: unknown priority name: infos

Facility 와 Priority 는 predefined 값만 사용가능.

 

여러번의 디버깅 결과 해석법을 알아냈다.
8로 나눈 값(int) 및 그 나머지(mod)를 알아낸다.

86 => 8 * 10 + 6 = 10, 6 = security(authpriv) info
78 => 8 * 9 + 6 = 9, 6 = cron info
14 => 8 * 1 + 6 = 1, 6 = user info

https://wiki.gentoo.org/wiki/Rsyslog


syslog-server formatted json
{“@timestamp”:”2021-11-01T14:22:19+09:00″,”message”:” test: my syslog-test-message43“,”host”:”ip-10-127-127-4″,”severity”:”debug”,”facility”:”user”,”syslog-tag”:”ip-10-127-127-4″,“source”:”ip-10-127-127-4″}
{“@timestamp”:”2021-11-01T14:22:17+09:00″,”message”:” my syslog-test-message43“,”host”:”ip-10-127-127-4″,”severity”:”debug”,”facility”:”user”,”syslog-tag”:”test:”,“source”:”test”}

client logger command

logger -p user.debug -t test my syslog-test-message43 -rfc3164
logger -p user.debug -t test my syslog-test-message43

로거 사용법 : https://www.real-world-systems.com/docs/logger.1.html

tcp log message

<15>Nov 1 14:23:06 ip-10-127-127-4 ip-10-127-127-4 test: my syslog-test-message43
<15>Nov 1 14:23:07 ip-10-127-127-4 test: my syslog-test-message43

이건 뭐지.

 

이제 timestamp 만 이해가 안가니까 살펴보자.

syslog-ng 문서에서 발췌.

Description

Syslog-ng can either use BSD (default) or ISO timestamp format in log files and file-like destinations.

BSD (default) format: Mnn DD hh:mm:ss
For example: May 10 09:39:20

ISO format: YYYY-MM-DDThh:mm:ssTZ
For example: 2019-05-09T09:39:20+08:00

 

MNn
The capitalized name of the month
대문자 월 이라네.

 

그럼 년도는 어디에?

 

Leave a Comment

작성하신 댓글은 관리자의 수동 승인 후 게시됩니다.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*