웹사이트 검색

Linux에서 Rsyslog를 사용하여 중앙 로깅 서버를 설정하는 방법


로그는 모든 소프트웨어나 운영체제의 중요한 구성요소입니다. 로그는 일반적으로 목적에 따라 사용자의 작업, 시스템 이벤트, 네트워크 활동 등을 기록합니다. Linux 시스템에서 가장 널리 사용되는 로깅 시스템 중 하나는 rsyslog입니다.

Rsyslog는 다양한 유형의 소스(시스템/응용 프로그램)에서 데이터를 받아 여러 형식으로 출력하는 강력하고 안전한 고성능 로그 처리 시스템입니다.

일반 syslog 데몬에서 모든 기능을 갖춘 엔터프라이즈 수준 로깅 시스템으로 발전했습니다. 클라이언트/서버 모델로 설계되었으므로 클라이언트 및/또는 다른 서버, 네트워크 장치 및 원격 애플리케이션을 위한 중앙 로깅 서버로 구성할 수 있습니다.

테스트 환경

이 가이드에서는 다음 호스트를 사용합니다.

  • 서버: 192.168.241.140
  • 클라이언트: 172.31.21.58

Rsyslog 서버를 설치하고 구성하는 방법

대부분의 Linux 배포판에는 rsyslog 패키지가 사전 설치되어 있습니다. 설치되어 있지 않은 경우 표시된 대로 Linux 패키지 관리자 도구를 사용하여 설치할 수 있습니다.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04

rsyslog가 설치되면 지금 서비스를 시작하고 부팅 시 자동 시작되도록 활성화하고 systemctl 명령으로 상태를 확인해야 합니다.

sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

기본 rsyslog 구성 파일은 /etc/rsyslog.conf에 있으며, 모듈을 로드하고, 전역 지시문을 정의하고, 로그 메시지 처리 규칙을 포함하며, /etc의 모든 구성 파일도 포함합니다. /rsyslog.d/ 다양한 애플리케이션/서비스용.

sudo vim /etc/rsyslog.conf

기본적으로 rsyslogsystemd 저널에서 구조화된 로그 메시지를 가져오고 syslog를 허용하기 위해 imjournalimusock 모듈을 사용합니다. Unix 소켓을 통해 로컬 시스템에서 실행되는 응용 프로그램의 메시지입니다.

rsyslog를 네트워크/중앙 로깅 서버로 구성하려면 원격 syslog 수신에 사용할 프로토콜(UDP 또는 TCP 또는 둘 다)을 설정해야 합니다. 포트가 수신 대기합니다.

더 빠르지만 신뢰할 수 없는 UDP 연결을 사용하려면 아래 줄을 검색하고 주석 처리를 해제하세요(514를 수신하려는 포트로 바꾸세요. 클라이언트가 메시지를 보내는 포트 주소와 일치하는 경우 rsyslog 클라이언트를 구성할 때 이에 대해 자세히 살펴보겠습니다.

$ModLoad imudp
$UDPServerRun 514

TCP 연결(느리지만 더 안정적인)을 사용하려면 아래 줄을 검색하여 주석을 제거하세요.

$ModLoad imtcp
$InputTCPServerRun 514

이 경우 UDP와 TCP 연결을 동시에 사용하려고 합니다.

다음으로 원격 로그 처리를 위한 규칙 세트를 다음 형식으로 정의해야 합니다.

facility.severity_level	destination (where to store log)

어디 :

  • facility: 프로세스/애플리케이션 생성 메시지 유형으로, auth, cron, 데몬, 커널, local0..local7이 포함됩니다. *를 사용하면 모든 시설을 의미합니다.
  • severity_level: 로그 메시지 유형입니다: emerg-0, Alert-1, crit-2, err-3, warning-4, note-5, info-6, debug-7. *를 사용하면 모든 심각도 수준을 의미하며, 없음은 심각도 수준이 없음을 의미합니다.
  • 대상: 로컬 파일이거나 원격 rsyslog 서버(IP:port 형식으로 정의됨)입니다.

RemoteLogs 템플릿을 사용하여 원격 호스트에서 로그를 수집하기 위해 다음 규칙 세트를 사용합니다. 스크린샷에 표시된 것처럼 이러한 규칙은 로컬 메시지 처리 규칙보다 먼저 와야 합니다.

$template RemoteLogs,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log"
*.* ?RemoteLogs 
& ~

위의 규칙 집합을 보면 첫 번째 규칙은 “$template RemoteLogs,”/var/log/%HOSTNAME%/%PROGRAMNAME%.log” ”입니다.

$template 지시문은 rsyslog 데몬에게 수신된 모든 원격 메시지를 수집하여 호스트 이름/var/log 아래의 고유 로그에 기록하도록 지시합니다. >(클라이언트 컴퓨터 이름) 및 RemoteLogs 템플릿에 있는 설정에 정의된 대로 메시지를 생성한 원격 클라이언트 기능(프로그램/응용 프로그램)입니다.

두 번째 줄 “*.* ?RemoteLogs ”RemoteLogs 템플릿 구성을 사용하여 모든 심각도 수준의 모든 시설에서 기록된 메시지를 의미합니다.

마지막 줄 “& ~ ”은 메시지가 파일에 기록되면 rsyslog에 메시지 처리를 중지하도록 지시합니다. “& ~”를 포함하지 않으면 메시지가 대신 로컬 파일에 기록됩니다.

사용할 수 있는 다른 템플릿도 많이 있습니다. 자세한 내용은 rsyslog 구성 매뉴얼 페이지(man rsyslog.conf)를 참조하거나 Rsyslog 온라인 설명서를 참조하세요.

rsyslog 서버를 구성하는 것이 전부입니다. 구성 파일을 저장하고 닫습니다. 최근 변경 사항을 적용하려면 다음 명령을 사용하여 rsyslog 데몬을 다시 시작하세요.

sudo systemctl restart rsyslog

이제 rsyslog 네트워크 소켓을 확인하십시오. ss 명령(또는 동일한 플래그가 있는 netstat) 명령을 사용하고 출력을 grep으로 파이프하여 rsyslogd 연결을 필터링합니다.

sudo ss -tulnp | grep "rsyslog"

다음으로, CentOS 7에서 SELinux가 활성화된 경우 다음 명령을 실행하여 네트워크 소켓 유형에 따라 rsyslog 트래픽을 허용합니다.

sudo semanage -a -t syslogd_port_t -p udp 514
sudo semanage -a -t syslogd_port_t -p tcp 514 

시스템에 방화벽이 활성화되어 있는 경우 다음을 실행하여 포트 514를 열어 rsyslog 서버에 대한 UDP/TCP 연결을 모두 허용해야 합니다.

------------- On CentOS ------------- 
sudo firewall-cmd --permanent --add-port=514/udp
sudo firewall-cmd --permanent --add-port=514/tcp
sudo firewall-cmd --reload

------------- On Ubuntu -------------
sudo ufw allow 514/udp
sudo ufw allow 514/tcp
sudo ufw reload 

Rsyslog 서버에 로그를 보내도록 Rsyslog 클라이언트를 구성하는 방법

이제 클라이언트 시스템에서 다음 명령을 사용하여 rsyslog 서비스가 실행 중인지 확인하십시오.

sudo systemctl status rsyslog

설치되어 있지 않은 경우 앞서 설명한 대로 설치하고 서비스를 시작합니다.

sudo yum update && yum install rsyslog 	#CentOS 7
sudo apt update && apt install rsyslog	#Ubuntu 16.04, 18.04
sudo systemctl start rsyslog
sudo systemctl enable rsyslog
sudo systemctl status rsyslog

rsyslog 서비스가 실행되면 기본 구성을 변경할 기본 구성 파일을 엽니다.

sudo vim /etc/rsyslog.conf

rsyslog 데몬이 로그 클라이언트 역할을 하도록 하고 로컬에서 생성된 모든 로그 메시지를 원격 rsyslog 서버로 전달하려면 다음 스크린샷에 표시된 대로 파일 끝에 이 전달 규칙을 추가하세요.

*. *  @@192.168.100.10:514

위의 규칙은 모든 시설에서 모든 심각도 수준으로 메시지를 보냅니다. auth와 같은 특정 시설에서 메시지를 보내려면 다음 규칙을 사용하세요.

auth. *  @@192.168.100.10:514

변경 사항을 저장하고 구성 파일을 닫습니다. 위 설정을 적용하려면 rsyslog 데몬을 다시 시작하세요.

sudo systemctl restart rsyslog

Rsyslog 서버에서 원격 로깅을 모니터링하는 방법

마지막 단계는 rsyslog가 /var/log 아래에서 hostname/programname.log 형식으로 클라이언트로부터 메시지를 실제로 수신하고 기록하는지 확인하는 것입니다.

ls 명령을 실행하여 상위 로그 디렉토리의 긴 목록을 작성하고 ip-172.31.21.58(또는 클라이언트 시스템의 호스트 이름이 무엇이든)이라는 디렉토리가 있는지 확인하십시오.

 
ls -l /var/log/

디렉터리가 존재하는 경우 다음을 실행하여 그 안에 있는 로그 파일을 확인하세요.

sudo ls -l /var/log/ip-172-31-21-58/

요약

Rsyslog는 클라이언트/서버 아키텍처로 설계된 고성능 로그 처리 시스템입니다. 이 가이드에 설명된 대로 Rsyslog를 중앙/네트워크 로깅 서버 및 클라이언트로 설치하고 구성할 수 있기를 바랍니다.

추가 도움이 필요하면 관련 rsyslog 매뉴얼 페이지를 참조할 수도 있습니다. 언제든지 피드백을 주거나 질문을 해주세요.