본문 바로가기

OS

rsyslog 란?

반응형

Intro

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

 

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

 

 

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 와 비교하여 주목할 만한 장점은 아래 정도가 있는데요. 특히 Database로 보내는 기능은 꽤 쓸만한 기능 같네요.

-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 특정 파일에 메세지를 보냄 

 

 

 

앞서 원격 서버로 전송할 경우 TCP, UDP 두 가지 프로토콜을 사용해 보낼 수 있으며 기본 포트는 514라고 말씀드렸는데요. 해당 케이스에 대한 예제로 rsyslog 포스팅을 마무리하겠습니다.

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:포트번호

 

 

 

지금까지 rsyslog에 대한 개념 및 rsyslog.conf 구성요소, 간단한 예제에 대해 알아보았습니다.

배워가며 작성하는 블로그입니다.

피드백 및 의견 환영입니다 🙂

반응형

'OS' 카테고리의 다른 글

sed 특정 문자열 포함하는 행 출력 / 행 갯수 출력  (0) 2023.05.17