syslog 를 이용한 원격로그지원
syslog 를 이용한 원격로그지원 | |
slog-8617.tgz |
1. syslog 설명
2. syslog.conf 파일 설명
3. 원격 저장을 위한 설정
3.1 로그를 받는 쪽
3.2 로그를 보내려는 쪽
3.3 일반사용자 계정으로 로그서버 설정 과 구축
1. syslog 설명
전통적인 유닉스 시스템에서는, 시스템에서 발생하는 내용들에대해서 로깅(Logging)을
제공합니다.
물론 보안과 관리의 목적이며 이 로그 파일들은 운영체제마다 조금씩 틀리지만,
리눅스의 경우 /var/log 에 쌓이게 됩니다.
시스템 관리자는 일정 규칙에의해 설정을 하게 되며, 자신이 개발하는 프로그램에도 syslog
기능을 사용하는게 가능합니다. syslog 기능은 syslogd 를 기동시킴으로서, 작동하게 되는데
물론 항상 떠 있어야 하겠고, 사용하는 관련 파일들로는 /etc/syslog.conf 가 주로 사용되고,
/etc/sysconfig/syslog, 원격백업등을위해서 /etc/hosts 파일과, /etc/services 파일등의 편집이
필요할 수도 있습니다.
2. syslog.conf 파일 설명
이 파일은 형식이, [selector]와 [action] 으로 나눠지며, 다시 [selector]는 [facility]와
[severity]로 나눠 집니다. 여기서 facility자리는 "어떤것에대해" 정도로 생각하면되고,
severity는 "우선순위" 입니다. [action]은 보통 파일이름을 지정해서, 해당파일에 쓰란거죠.
여기다 원격지를 지정하면 원격지로 보냅니다.
정리하면, [facility][severity][action]은, 어떤것에대해(facility), 어떤 심각도(severity) 로,
어떻게 해라(action) 입니다.
[facility] 리스트 -----------------------------------------
kern: 커널
user: 사용자 레벨(일반 프로세스)
mail: 메일 서브 시스템
auth: 보안, 권한 프로그램들
daemon: 다른 시스템 데몬
news: 뉴스 서브시스템
local0-7: 다른용도 사용을위해 예약
* : 모든것
(이 외에도 몇가지가 더 있습니다.)
[severity] 리스트 ----------------------------------------
0 : emergency 비상상태
1 : alert 상태
2 : critical 상태
3 : error 상태
4 : warning 상태
5 : notice 상태
6 : info 정보 메세지 (시스템 분석용)
7 : debug (프로그램 디버그할때)
none : 이것이 facility와 사용되면 해당 facility는 제외,
[action] 필드 --------------------------------------------
파일명 : 해당 파일에 기록
@호스트명 : 해당 호스트로 전송
종합해서 샘플을 풀이해보자면,
mail.debug /tmp/maillog
(mail 에대해, 상태는 debug로해서, /tmp/mailog 에 기록하라)
*.debug;mail.none @myhost
(모든것에대해, 상태는 debug로, mail은 제외하고, myhost로 전송하라)
conf설정에서 중요한것은 칸을 띄울때는 공백이 아니라, 탭으로 하여야 합니다.(중요!!!)
3. 원격 저장을 위한 설정
3.1 로그를 받는 쪽
로그백업을 원격지로 보내기위해서는, 보내려는 syslogd 를 기동시킬때,
/etc/sysconfig/syslog 파일을 열어서
SYSLOGD_OPTIONS="-m 0 -r"
처럼 바꿔줍니다. -r 이 Remote 의미 입니다. 물론 위 설정을 안바꾸고 syslogd를 기동시킬때
옵션으로 줘도 되죠.
3.2 로그를 보내려는 쪽
/etc/hosts 파일을 편집합니다. 로그 서버를 giran이라고 칭하고, 도메인이 giran.uu.net 이며,
IP를 111.111.111.111 이라면
111.111.111.111 giran.uu.net giran loghost
처럼 설정을 해둡니다. /etc/hosts 파일 형식은 참고로,
[IP-address fully-qualified-domain-name hostname "loghost"] 형식입니다.
이렇게만 해두면, 로그를 받는 서버측이 잘 작동하는것을 볼 수 있습니다.
하지만, 우리의 문제는 로그를 받는쪽 서버의 일개 계정 사용자 뿐이라는 거죠.
그래서 슈퍼유저가 아니라서, 받을수도 없고, 설정할 수도 없고, 기존 로그파일에
섞일 우려도 있고요.
3.3 일반사용자 계정으로 로그서버 설정 과 구축
A) /etc/services 파일 수정
이 기능을 사용하려면, 먼저 [보내는 쪽]에서 수정해야할게 /etc/services 파일을 열어서
syslog 514/udp
라고 되있는 부분을 1514 처럼 원하는 값으로 바꿔주세요.
(이 값은 후에나올, slog 툴에서 리슨 포트랑 일치해야 겠죠)
이렇게 하는 이유는 syslogd 는 원격지로 패킷을 보낼때, udp 514번을 이용합니다.
514번은 이미 글로벌하게 사용되는 포트이고, 우리는 사적으로 사용할 계획이니까요.
B) /etc/syslog.conf 파일 예제
*.info;mail.none;news.none /var/log/messages
*.info;mail.none;news.none @loghost
위에서, 첫줄은 보통 디폴트로 있는 구문입니다. 그 아래에 같은형식으로 적고, 파일이 아닌
호스트로 수정해주세요. 이렇게 같은걸 2줄 적는 이유는 동시에 처리되게 하려는거죠
로컬 로그파일에도 기록되고, 원격 호스트로도 보내고요.
C) /etc/hosts 파일 예제
111.111.111.111 giran.uu.net giran loghost
이것은 위에서 언급했습니다.
이렇게 해서 [로그를 보내려는 클라이언트]의 설정이 마무리 되었습니다.
서버측은 설정할게 없습니다. 단지 자신의 개인 계정에서 첨부 소스파일을 압축을 풀어
소스에서, LOG_HOME 수정후, 컴파일하여 실행시키면 됩니다.
#define LOG_HOME "/user4/starzan/slog/"
처럼 되있는 부분을 자신의 계정의 디렉토리를 지정하면 되겠네요. 만약 포트가 충돌된다면,
소스에서 역시 포트 번호를 바꾸시면 되며, C 소스파일에 대해서는 설명을 생략합니다.
소스는 저도 손가는대로 짠이후 안봐서 버그가 있을수 있으니, 직접 고쳐 사용하시던지
아니면, 적어주세요. ^^
# tar xvfz slog.tgz
# make (바이너리 만듦니다.)
# ./slog
# 죽일때는, kill [pid]
이 slog는 로그파일을 원격지 ip별로 기록합니다. 저 같은경우 이렇게 실행 함으로서
여러대의 로그파일을 관리했죠.
즉,
111.111.111.111.log
111.111.111.112.log
111.111.111.113.log
처럼 패킷이 들어오는 ip에 따라 로그에 기록합니다. 그래서 서버별로 관리 하기 좋죠.
이상입니다.
(첨부소스는, 간단한 UDP 서버 입니다