Syslog란 무엇인가? | rsyslog.conf 설정

Syslog는 원래 Sendmail의 일부로 개발되었으며, 이후 로그 관리의 편리함이 인식되면서 독립적인 표준으로 발전하게 되었습니다. System Logging의 약자로, 로그를 기록하고 관리하는 표준 서비스 또는 프로토콜을 의미합니다. 메일 서버, FTP 서버 등 다양한 프로그램이 생성하는 메시지를 중앙에서 수집하여 로그 파일로 저장하고, 이를 분석할 수 있도록 지원합니다.

시스템을 효율적으로 모니터링하고, 잠재적인 문제를 신속하게 식별 및 해결하며, 시스템이 최적의 상태를 유지하도록 지원합니다.

✅ Syslog 정의

Syslog는 소프트웨어 애플리케이션과 시스템이 중앙 로그 관리 시스템이나 로그 파일로 로그 메시지를 전송할 수 있도록 하는 컴퓨터 데이터 로깅 표준입니다. 이러한 로그 메시지에는 시스템 활동, 보안 이벤트, 애플리케이션 오류 등이 포함될 수 있습니다. 로그의 생성과 관리를 하는 데몬이라 정의할 수 있습니다.

Syslog 시스템은 다음과 같은 주요 구성 요소로 이루어져 있습니다.

  1. Syslog 발신자(클라이언트): 로그 메시지를 생성하여 Syslog 서버로 전송하는 애플리케이션이나 시스템 구성 요소입니다.
  2. Syslog 수신자(서버): 여러 발신자로부터 로그 메시지를 수신하고 저장하는 중앙 집중식 로그 관리 시스템입니다.
  3. Syslog 프로토콜: 발신자와 수신자 간에 전송되는 로그 메시지의 형식과 구조를 정의하는 규약입니다.

Syslog는 컴퓨터 시스템의 관리, 보안 알림은 물론, 일반 정보, 분석, 디버깅 메시지 등을 제공합니다. 또한 프린터, 라우터와 같은 다양한 장비 뿐만 아니라 여러 플랫폼을 지원합니다. 이러한 특성 덕분에 Syslog는 다양한 시스템에서 생성된 로그 데이터를 중앙 저장소에 수집하고 관리하는 데 널리 사용됩니다.

✅ Syslog 기본 기능과 데몬

Syslog의 기본 기능 중 첫 번쨰는 로그를 쓰고 출력하는 기능입니다. Syslog의 기본 기능 중 첫 번째는 로그를 쓰고 출력하는 기능입니다. 샌드 메일이나 FTP 서버의 로그 정보를 로그 파일로 쓰는 흐름을 단순하게 다음과 같은 순서로 생각할 수 있습니다.

syslog 흐름도 예시(Rsyslog.conf에서 관리)

두 번째로 로그 수집 및 관리 기능이 있습니다. 여러 서버의 로그를 하나의 서버로 로그를 수집하여 관리하는 것입니다. 애플리케이션 서버에서 만들어진 Syslog가 로그 서버로 전송되어 Syslog로 변경되어 로그 파일로 저장되는 것입니다.

애플리케이션 서버: Syslog 생성 
로그 정보 전송  
로그 서버: Syslog를 로그 파일로 저장

현재는 syslog 앱을 사용하지 않고 Syslog-ng(syslog New Generation) 또는 Rsyslog(Rocket Fast System for Log processing) 데몬을 사용하고 있습니다. Syslog-ng는 고급 기능을 제공하고, 복잡한 필터링이나 로그 포워딩이 필요한 환경에서 유리하며, Rsyslog는 기본적인 설정으로도 충분히 강력한 성능을 제공하며, 간단하고 빠른 설정을 원할 때 유리합니다.

Syslog-ng 및 Rsyslog 데몬의 특징은

  1. 로그 분류 기능
    • 로그를 다양한 기준으로 분류하고 필터링하여 효율적으로 관리합니다.
  2. TCP 기반 로그 송수신
    • TCP를 이용해 로그 정보를 송수신하여 로그 정보 손실을 방지합니다.
  3. SSL/TLS 암호화 지원
    • 네트워크를 통한 로그 전송 시 SSL/TLS를 사용하여 안전한 로그 전송을 보장합니다.
  4. 데이터베이스 로그 출력
    • 로그를 데이터베이스로 출력하여 장기적인 보관 및 분석을 용이하게 합니다.

✅ Rsyslog 설정 파일

514번 포트를 사용하며 TCP와 UDT로 전송이 가능하며, /etc/rsyslog.conf 파일에서 설정을 담당합니다.

어느 서비스상황에 따라 어디로 로그를 보내는지를 설정할 수 있습니다.

rsyslog.conf 설정 방법

1. facility: 서비스 유형

facility는 로그 메시지를 발생시키는 프로그램 또는 서비스의 유형을 나타냅니다. 즉, 로그가 어떤 소스에서 발생했는지, 예를 들어 시스템, 애플리케이션, 데몬 등의 종류를 구분하는 역할을 합니다. *를 설정해서 메시지가 오는 경로를 설정할 수 있습니다.

Facility 코드

설명

auth

인증 시스템 (login, su 등)

authpriv

프라이빗 인증 시스템

cron

크론 작업 관리 시스템

daemon

각종 데몬

kern

커널

lpr

프린터

mail

메일 시스템

syslog

syslog 기능

local0 ~ local7

사용자 정의 설정

2. priority: 메시지의 우선 순위

로그 메시지의 위험 상황에 따른 위험도우선 순위로 지정합니다. *를 사용해서 모든 우선순위를 선택할 수도 있습니다.

구분

설명

emerg

위급적인 상태

alert

급한 대응이 필요함

crit

위험한 상태

err

일반적인 에러

warning

시스템으로부터의 경고

notice

시스템으로부터의 중요한 통지

info

시스템으로부터의 정보

debug

디버그 정보

none

priority를 무시(제외)

3. action: 로그 저장 위치

로그 발생 프로그램과 우선순위에 대해 어떻게 처리할지에 대한 액션을 설정합니다. *를 사용해서 모든 유저가 확인할 수 있게 설정할 수 있습니다.

action

설명

*

현재 로그인한 모든 사용자에게 메시지를 보냅니다.

host

지정된 호스트(서버)로 메시지를 보냅니다.

user

지정된 사용자에게 메시지를 보냅니다.

file

특정 파일에 메시지를 기록합니다.

4. rsyslog.conf 설정 예시

/etc/rsyslog.conf
#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# Save news errors of level crit and higher in a special file.

# 설정 후 # 
systemctl restart rsyslog

예를 들어 /var/log/messages 설정은 모든 info 레벨의 메시지를 저장하고 그중에 mail, authpriv, cron은 제외한다는 내용입니다.

facility.priority;  action
설명

facility.priority; action
*.info;
mail.none;
mail이 facility, none이 priority임을 알 수 있습니다.
당연히 /var/log/messages가 action에 해당합니다.

◻️ 수신 활성화

각각의 UDP와 TCP의 주석 해제를 통해 수신 활성화를 할 수 있습니다.

# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
#module(load="imudp") # needs to be done just once
#input(type="imudp" port="514")

# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
#module(load="imtcp") # needs to be done just once
#input(type="imtcp" port="514")

◻️ 발신 활성화

# ### sample forwarding rule ###
#action(type="omfwd"
# # An on-disk queue is created for this action. If the remote host is
# # down, messages are spooled to disk and sent when it is up again.
#queue.filename="fwdRule1"       # unique name prefix for spool files
#queue.maxdiskspace="1g"         # 1gb space limit (use as much as possible)
#queue.saveonshutdown="on"       # save messages to disk on shutdown
#queue.type="LinkedList"         # run asynchronously
#action.resumeRetryCount="-1"    # infinite retries if host is down
# # Remote Logging (we use TCP for reliable delivery)
# # remote_host is: name/ip, e.g. 192.168.0.1, port optional e.g. 10514
#Target="remote_host" Port="XXX" Protocol="tcp")

*.*     @@192.168.1.100:514  # TCP 프로토콜을 사용하여 192.168.1.100의 514 포트로 로그 전송
  • *.* facility.severity 을 의미함
  • @ 한 개: UDP 프로토콜 사용
  • @@ 두 개: TCP 프로토콜 사용

✅ Syslog의 Facility, Severity 코드

FacilitySeverity 코드는 로그 메시지 안에 출력되는 결과로 포함됩니다. 이 두 코드는 로그 메시지를 효과적으로 분류하고 관리할 수 있도록 도와주는 중요한 요소입니다.

Facility는 로그가 발생한 프로그램이나 서비스를 나타내며, 예를 들어, 시스템 로그, 메일 시스템, 인증 시스템 등의 출처를 구분합니다.

Severity는 해당 로그 메시지의 중요도나 긴급성을 나타내며, 예를 들어, 경고, 오류, 정보 등으로 메시지의 중요도를 구별합니다.

따라서, 로그 메시지에는 FacilitySeverity 정보가 포함되어, 이를 바탕으로 로그를 분석하고 필요한 작업을 신속하게 처리할 수 있습니다.

1. syslog Facility 코드

2. Syslog Severity 코드

심각도는 7번 높은 순서부터 숫자가 낮아질수록 더 높은 우선순위와 중요한 메시지를 알리게 되어 있습니다.

Similar Posts

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다