Syslog에 대해 알아보겠습니다.
Ⅰ. Syslog 란 ?
Linux 및 Unix 계열 시스템에서 로그 메시지를 수집·저장·관리하는 표준 로깅 프로토콜입니다. 커널, 데몬, 애플리케이션 등 다양한 소스에서 발생하는 이벤트를 시간 순서대로 중앙집중식으로 기록하여, 시스템 운영자에게 문제 진단·보안 모니터링·시스템 상태 추적 등의 핵심 정보를 제공합니다.
현재 Syslog는 사실상의 Linux 로그 표준으로 자리 잡았으며, 모든 주요 배포판에서 기본적으로 사용됩니다.
Ⅱ. Syslog의 동작 원리
ⅰ. 로깅 아키텍처 구조
| 구분 | 설명 |
| 커널 로깅 (Kernel Logging) | 커널 내부에서 발생하는 이벤트를 커널 링 버퍼(Ring Buffer)에 기록. 부팅 시점 로그가 주로 저장됨. |
| 사용자 로깅 (User Logging) | 사용자 공간에서 실행되는 프로세스나 서비스 로그를 syslog 데몬(rsyslogd)이 관리. |
ⅱ. 로그 생성 과정
1) 로그 발생: 커널 또는 애플리케이션이 Syslog API를 호출
2) 수집: rsyslogd 데몬이 로그 메시지를 수신
3) 분류: /etc/rsyslog.conf 설정에 따라 로그를 분류
4) 저장: 지정된 대상(파일, 콘솔, 원격 서버 등)에 기록
Ⅲ. Syslog vs RSyslog vs Systemd Journal 비교
| 항목 | Traditional Syslog | RSyslog | Systemd Journal |
| 데이터 형식 | 텍스트 | 텍스트 | 바이너리 |
| 성능 | 기본 로깅 | 고성능, 중앙 로그 수집에 특화 | 로컬 데스크톱 최적화 |
| 원격 전송 | 제한적 | 다양한 프로토콜 지원 | 별도 기능 없음 |
| 구조화 데이터 | 미지원 | 지원 | 지원 |
| 검색 도구 | grep, awk | grep, awk | journalctl |
| 설정 난이도 | 단순 | 중간 | 단순 |
* RSyslog는 기존 Syslog의 확장 버전으로 다양한 입력 소스와 고성능 처리 기능을 제공해 서버 환경에 최적화되어 있습니다.
* Systemd Journal은 systemd와 통합된 로컬 로그 시스템으로 바이너리 포맷을 통해 빠른 검색이 가능하지만 파일 손상 시 전체 로그가 무효화될 수 있습니다.
Ⅳ. Syslog 메시지 구조
ⅰ. 기본 형식
날짜 시간 호스트명 프로세스명: 메시지
예시) Dec 5 10:52:25 myhost anacron[1058]: Job cron.daily terminated
ⅱ. RFC 표준
□ RFC 3164 (BSD Syslog 형식)
<priority>timestamp hostname: message
□ RFC 5424 (IETF Syslog 형식)
<PRI>VERSION TIMESTAMP HOSTNAME APP-NAME PROCID MSGID STRUCTURED-DATA MESSAGE
Ⅴ. Facility와 Priority Level
ⅰ. Facility (로그 출처)
| 구분 | 설명 |
| kern (0) | 커널 메시지 |
| user (1) | 사용자 수준 메시지 |
| mail (2) | 메일 시스템 |
| daemon (3) | 시스템 데몬 |
| authpriv (4) | 인증/보안 관련 |
| local0~7 (16~23) | 사용자 정의 용도 |
ⅱ. Priority Level (심각도)
| Level | 심각도 | 설명 |
| 0 | emerg | 시스템 사용 불가 |
| 1 | alert | 즉각 조치 필요 |
| 2 | crit | 치명적 오류 |
| 3 | err | 일반 오류 |
| 4 | warning | 경고 상태 |
| 5 | notice | 주목할 이벤트 |
| 6 | info | 일반 정보 |
| 7 | debug | 디버그 정보 |
* Priority 계산식
Priority = Facility × 8 + Level
Ⅵ. RSyslog 설정 및 구성
ⅰ. 주요 설정 파일
1) /etc/rsyslog.conf: 기본 설정
2) /etc/rsyslog.d/*.conf: 서비스별 세부 설정
ⅱ. 기본 문법
| facility.priority action(destination) |
ⅲ. 예시
| *.info /var/log/messages mail.* /var/log/maillog *.* @192.168.1.100:514 # UDP 전송 *.* @@192.168.1.100:514 # TCP 전송 |
ⅳ. 주요 모듈
| module(load="imuxsock") # 로컬 소켓 module(load="imklog") # 커널 로그 module(load="imudp") # UDP 수신 module(load="imtcp") # TCP 수신 |
Ⅶ. 주요 로그 파일 위치
| 로그 파일 | 설명 |
| /var/log/messages | 일반 시스템 메시지 |
| /var/log/secure or /var/log/auth.log | 인증 및 보안 관련 |
| /var/log/maillog | 메일 서버 로그 |
| /var/log/cron | 스케줄러 로그 |
| /var/log/kern.log | 커널 메시지 |
| /var/log/boot.log | 부팅 로그 |
| /var/log/dmesg | 커널 초기화 메시지 |
Ⅷ. Logrotate를 통한 로그 관리
ⅰ. 개념
로그 파일 크기 증가를 제어하고 오래된 로그를 자동 관리하는 도구입니다. 디스크 공간 절약 및 로그 관리 자동화에 사용됩니다.
ⅱ. 주요 설정 파일
1) /etc/logrotate.conf : 전역 설정
2) /etc/logrotate.d/ : 서비스별 설정
ⅲ. 예시
| /var/log/myapp/*.log { daily rotate 30 compress notifempty create 0644 root root postrotate systemctl reload myapp endscript } |
Ⅸ. 원격 로깅 설정
ⅰ. 서버(수신 측)
| module(load="imudp") input(type="imudp" port="514") module(load="imtcp") input(type="imtcp" port="514") |
ⅱ. 클라이언트(전송 측)
| *.* @192.168.1.100:514 # UDP *.* @@192.168.1.100:514 # TCP local3.info @@192.168.1.100:12468 |
Ⅹ. 관리 및 보안 및 성능 고려사항
ⅰ. 문제해결 및 관리 명령어
| 목적 | 명령어 |
| 실시간 로그 확인 | tail -f /var/log/messages / journalctl -f |
| 서비스별 로그 | journalctl -u ssh |
| 커널 메시지 | dmesg, journalctl -k |
| 로그 검색 | grep "error" /var/log/messages |
| 서비스 상태 | systemctl status rsyslog |
| 설정 검사 | rsyslogd -N1 |
ⅱ. 로그 보안
| $FileOwner syslog $FileGroup adm $FileCreateMode 0640 $DirCreateMode 0755 |
□ 파일 권한 제한 및 TLS 암호화 전송 권장
□ 로그 무결성 보장을 위한 별도 백업 또는 서명 시스템 필요
ⅲ. 성능 최적화
| $MainMsgQueueSize 100000 $MainMsgQueueWorkerThreads 4 $ActionFileEnableSync off $OMFileFlushInterval 10 |
→ 큐 크기 확대, 비동기 쓰기, 버퍼링으로 대용량 로그 처리 향상