Intro
리눅스 서버를 운영하며, 로그를 수집하고 확인하는 것은 굉장히 중요한 부분입니다. 로그를 통해 시스템 문제를 검토하고 모니터링하며, 해결할 수 있죠.
물리적 장치나 애플리케이션 / 데몬 / 네트워크나 커널 등의 여러 로그가 서버에서 생성되고 있습니다. 이런 로그를 빠르고 효율적으로 관리, 저장하는 것이 필요합니다.
Rsyslog: Rocket Fast System for Log processing
rsyslog는 서버 내에 생성되는 다양한 로그를 로그파일이나 콘솔, 또는 외부 서버로 저장할 수 있게 해주는 프로그램입니다. 가장 널리 사용되는 오픈 소스 로깅 프로그램이며, CentOS 7 또는 RHEL 7의 기본 로깅 서비스이기도 합니다.
https://www.rsyslog.com/doc/master/index.html
rsyslogd라는 데몬 프로세스를 통해 작업이 이루어지며, 이 과정에서 rsyslog.conf 설정 파일을 참조합니다.
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 방식으로 전송이 가능합니다.
아래의 포맷을 가지고 어떤 서비스가 어떠한 상황일 때 어디로 로그를 보낼 지 설정합니다.
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 |
---|