본문 바로가기

Language&Configuration/[Liunx]

[Linux] rsyslog 개념 및 사용법 - 로그 수집, 분석, 모니터링

개 요

리눅스 서버를 운영하며, 로그를 수집하고 확인하는 것은 굉장히 중요한 부분입니다. 
로그를 통해 시스템 문제를 검토하고 모니터링하여 문제를 해결할 수 있습니다.

물리적 장치나 애플리케이션 / 데몬 / 네트워크나 커널 등의 여러 로그가 서버에서 생성되고 있습니다. 
이런 로그를 빠르고 효율적으로 관리, 저장하는 것이 필요합니다.

Rsyslog: Rocket Fast System for Log processing

rsyslog는 서버 내에 생성되는 다양한 로그를 로그파일이나 콘솔, 또는 외부 서버로 저장할 수 있게 해주는 프로그램입니다. 가장 널리 사용되는 오픈 소스 로깅 프로그램이며, CentOS 7 또는 RHEL 7의 기본 로깅 서비스이기도 합니다.

https://www.rsyslog.com/doc/master/index.html

rsyslogd라는 데몬 프로세스를 통해 작업이 이루어지며, 이 과정에서 rsyslog.conf 설정 파일을 참조합니다.

rsyslog 동작 구성도

 

syslog 와 비교하여 주목할 만한 장점 3가지

- SSL, TLS 

- Database export 지원
 It supports, among others, MySQL, PostgreSQL, failover log destinations, ElasticSearch, syslog/tcp transport, fine grain output format control, high precision timestamps, queued operations and the ability to filter on any message part.

- 멀티쓰레드 지원

 

Rsyslog.conf

위 구성도 중 관리자가 주로 조작하는 것은 rsyslog.conf 파일입니다. 서버의 파일 시스템상 /etc/syslog.conf 에 위치하고 있으며, 수집하는 로그를 어떻게, 어디에 저장할지 설정할 수 있습니다.

원격 서버로 로그를 보낼 경우 포트는 514번 포트를 사용하며 UDP, TCP 방식으로 전송이 가능합니다.

아래의 포맷을 가지고 어떤 서비스 어떠한 상황일 때 어디로 로그를 보낼 지 설정합니다.

rsyslog.conf의 포맷

 

3가지의 요소는 대표적으로 아래의 값들을 선택해 입력함으로서 설정 가능합니다. 

facility : 어떤 서비스인지

kind Description
모든 서비스
daemon 데몬에 의한 메시지
cron cron 데몬에 의해 발생되는 메시지
kern kernel 메시지
authpriv 인증 및 보안 메시지
syslog syslogd 관련 메시지
user 사용자로부터 생성된 프로세스
local0 ~ local7 시스템 부팅 메시지 기록 등

 

priority : 어떤 상황일 때

kind Description
* 모든 상황
emerg 시스템이 사용 불가능한(unusable) 상태
alert 즉각적인 조치가 필요한 상황
crit 하드웨어 등의 심각한 오류가 발생한 상황 (critical condition)
err     일반적인 에러/오류가 발생한 상황
warning 경고 메시지
notice 에러/오류는 아니지만 관리자의 조치가 필요한 상황
info 의미 있는 정보 관련 메시지
debug 디버깅용 메시지

 

action : 어디로 로그를

action  설명 
현재 로그인한 모든 사용자의 스크린으로 메세지를 보냄 
host  지정된 호스트로 메세지를 보냄 
user  지정된 사용자의 스크린으로 메세지를 보냄 
 file 특정 파일에 메세지를 보냄 

 

example - UDP로 원격 서버에 보낼 경우

 /etc/rsyslog.conf 파일의 아래 항목을 주석 해제

 #$ModLoad imudp
 #$UDPServerRun 514
 
 ->
$ModLoad imudp
$UDPServerRun 514

UDP를 사용할 경우 목적지 앞에 @ 를 사용합니다.

*.info       @원격 서버 IP or host

#Port가 다를 경우  

*.info       @원격 서버 IP or host:포트번호

example - TCP로 원격 서버에 보낼 경우

 /etc/rsyslog.conf 파일의 아래 항목을 주석 해제

 #$ModLoad imtcp
 #TCPServerRun 514
 
 ->
$ModLoad imtcp
$TCPServerRun 514

TCP를 사용할 경우 목적지 앞에 @@ 를 사용합니다.

*.info       @@원격 서버 IP or host

#Port가 다를 경우  

*.info       @@원격 서버 IP or host:포트번호