[Linux] Log Server 구축하기

minujana
4 min readAug 30, 2021

로그 솔루션 없이, 로그 서버에서 다른 서버의 로그를 수집하도록 설정하는 방법을 정리해두려한다. 리눅스 서버에 기본적으로 깔리는 rsyslog 서비스를 이용할 것이고, OS가 7버전이하라면 syslog 인 것 같다.

0. 알아둬야 할 것

구축하기에 앞서 먼저, 간략하게 알아둬야 할 것을 정리해보면

  • Server — Client 아키텍쳐를 사용한다.
  • TCP, UDP 선택 가능
  • 통신하는 기본 포트는 514번

이 정도면 충분할 것 같다. 구축자체는 패키지도 이미 서버에 다 설치가 되어 있기에 설정만 바꾸면 되서 아주 간단하다.

1. Server Settings

환경 설정 파일 수정

#vi /etc/rsyslog.conf14번 ~ 20번 Line을 확인하자 아래와 같이 되어있다.14 # Provides UDP syslog reception
15 #$ModLoad imudp
16 #$UDPServerRun 514
17
18 # Provides TCP syslog reception
19 #$ModLoad imtcp
20 #$InputTCPServerRun 514
15,16,19,20번 라인의 주석을 해제해주자. 무조건 UDP로만 하겠다면 15,16만 해제해도 되고, TCP로만 하겠다면 19,20만 해제해도 된다.그리고 만약 514말고 다른 포트를 쓰려면 여기서 바꿔줘도 된다.

Client 쪽에서 TCP로 보낼지, UDP로 보낼지 설정이 가능하기 때문에 그냥 TCP, UDP 둘 다 주석을 해제를 해주었다. 각각의 장점은 간단히 말해서 UDP는 빠르고, TCP는 정확하다.

#vi /etc/rsyslog.conf같은 파일에서 TCP 통신을 허용해줬던 부분의 아래에 보면 다음과 같이 
###### GLOBAL DIRECTIVES ######## 가 있는데 그 위에 다음 라인을 추가하자
$template RemoteLogs,"/var/log/remote/%hostname%.log"
*.* ?RemoteLogs

추가한 첫번째 줄은 템플릿을 정의한 것이고, RemoteLogs 템플릿의 이름이다. 모든 시스템로그를 /var/log/remote 에 호스트이름.log 파일로 저장하게 하는 설정이다. 시간별로, 월별로, 일별로, IP별로 구분을 할 수도있다.

%fromhost-ip% --> Print IP
%$YEAR% --> Print 년도
%$MONTH% --> Print 월
%$DAY% --> Print 일

다음으로는 방화벽 설정이다.

#systemctl disable --now firewalld
해서 방화벽을 걍 꺼버리면 끝나지만, 514번 포트만 허용시키려면
#firewall-cmd --add-port=514/tcp --permanent
#firewall-cmd --add-port=514/tcp --permanent
#firewall-cmd --reload

만약에 위에 환경설정에서 포트 번호를 바꿨으면 여기서도 그 포트를 열어주는 것 잊지말자

이제 서비스를 재기동해주면 끝.

#systemctl restart rsyslog.service

2. Client Settings

클라이언트는 더욱 간단하다. 서버와 같은 파일을 수정해주면 되는데 로그를 전송할 서버에 대한 정보만 주면 된다.

#vi /etc/rsyslog.conf이 파일도 ###### GLOBAL DIRECTIVES ######## 가 있는데 서버에서 원격 정보를 넣은 그 자리처럼 저 라인 위에 다음 내용을 추가하자*.* @Server IP:port
or
*.* @@Server IP:port

여기서 @는 서버로 로그를 전송하는데 UDP를 사용하곘다는 뜻이고, @@는 TCP를 사용하겠다는 뜻이다. Port는 만약에 그대로 514를 사용하면 생략해도 된다.

서버와 마찬가지로 방화벽을 열어주고, ( 테스트해보니 클라이언트 쪽은 방화벽을 열지 않아도 로그 전송에는 문제가 없긴 하다. )

#systemctl restart rsyslog.service

서비스를 재기동해주고, 서버에서 /var/log/remote/ 디렉토리에 로그가 전송되고, 실시간으로 쌓이는 것을 확인할 수 있다.

여러 서버에서 로그를 받으면, rsyslog-mysql, rsyslog-pgsql, kafka 와 같은 툴을 이용해서 더 정리를 잘 할수 있는데 db를 이용해서 로그를 저장하는 것은 다른 포스팅에서 한번에 정리를 해보도록 하겠다.

--

--