본문 바로가기
Tip & Tech/Tech

UDP로 Syslog 출력하는 방법 (syslog서버설치 및 cloudbees 예제)

by 나비와꽃기린 2019. 11. 1.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

SysLog를 활용한 로그서버 구축 (UDP)

 

1. 환경

테스트를 위해 두 서버를 사용하였다.

(1) Syslog서버( syslog 데몬이 설치되는 서버)  : 192.XX.XX.XXX

(2) Syslog클라이언트(syslog를 호출하여 data를 보내는 서버) : 192.YY.YY.YYY

 

2. 테스트방법

Syslog클라이언트서버에서 구현한 syslog호출 로직을 통해

Syslog서버에 log가 잘 기록되는지를 확인한다.

 

 

3. Syslog서버에 데몬 설치

# syslog 서버 관련 패키치 설치
yum install -y rsyslog

# syslog 서버 기동
systemctl enable rsyslog
systemctl start rsyslog

# 방화벽 오픈 (UDP 포트 OPEN)
firewall-cmd --zone=public --add-port=514/udp --permanent
firewall-cmd --reload
# syslog 서버 설정파일 수정
vi /etc/rsyslog.conf

find /udp

# UDP 관련 프로토콜 및 포트 주석을 제거하여 활성화
$ModLoad imudp
$UDPServerRun 514
#설정완료 후 Syslog서버 데몬 재시작

systemctl restart rsyslog

 

4. Syslog클라이언트서버에서 syslog관련 모듈 작성(개발)

(1) syslog를 호출하는 jar 다운로드

Jar는 cloudbees 사용 : syslog-java-client-1.1.7.jar

 

(2) 각 개발환경에 맞게 Application에 해당 jar 추가

 

(3) SyslogClient 작성

UDP 말고 TCP 등과 관련된 예제소스는 아래 공식 github사이트에 잘 작성되어 있다.

https://github.com/CloudBees-community/syslog-java-client/blob/master/README.md

 

CloudBees-community/syslog-java-client

A Syslog Client written in Java. Contribute to CloudBees-community/syslog-java-client development by creating an account on GitHub.

github.com

import com.cloudbees.syslog.Facility;
import com.cloudbees.syslog.MessageFormat;
import com.cloudbees.syslog.Severity;
import com.cloudbees.syslog.sender.UdpSyslogMessageSender;

...

// Initialise sender
UdpSyslogMessageSender messageSender = new UdpSyslogMessageSender();
messageSender.setDefaultMessageHostname("myhostname"); // some syslog cloud services may use this field to transmit a secret key
messageSender.setDefaultAppName("myapp");
messageSender.setDefaultFacility(Facility.USER);
messageSender.setDefaultSeverity(Severity.INFORMATIONAL);

//자기 환경에 맞게 ip를 수정해준다.
messageSender.setSyslogServerHostname("192.XX.XXX.XXX"); //Syslog 서버가 설치된 ip

// syslog udp usually uses port 514 as per https://tools.ietf.org/html/rfc3164#page-5
messageSender.setSyslogServerPort(514);
messageSender.setMessageFormat(MessageFormat.RFC_3164); // optional, default is RFC 3164

// send a Syslog message
messageSender.sendMessage("test message");

 

5. 테스트

(1) 작성한 java파일 컴파일 및 실행

(2) Syslog서버

cd /var/log
tail -f messages

(3) "test message"가 잘 찍히는지 확인

#시간 [messageHostName설정값] [appName설정값] [보낸text] 값으로 출력됨
Oct 11 15:00:00 myhostname myapp: test message