CentOS / RHEL 7에서 Rsyslog를 사용하여 중앙 집중식 로그 서버를 만드는 방법


시스템 관리자가 CentOS 7 또는 RHEL 7 서버 시스템에서 문제를 식별하거나 해결하려면/var에있는 시스템에 저장된 로그 파일에서 특정 기간 동안 시스템에서 발생한 이벤트를 알고 확인해야합니다. "/ log 디렉토리.

Linux 시스템의 syslog 서버는 모든 서버, 네트워크 장치, 라우터, 스위치 및 로그를 생성하는 대부분의 내부 서비스가 특정 내부 문제 또는 정보 메시지와 관련하여 로그를 보낼 수있는 네트워크를 통해 중앙 모니터링 지점으로 작동 할 수 있습니다. ".

CentOS/RHEL 7 시스템에서 Rsyslog 데몬은 사전 설치된 기본 로그 서버이고 그 뒤에 Systemd Journal Daemon (journald)이 있습니다.

Rsyslog 서버는 클라이언트/서버 아키텍처 서비스로 빌드되며 두 역할을 동시에 수행 할 수 있습니다. 서버로 실행하고 네트워크의 다른 장치에서 전송 한 모든 로그를 수집하거나 원격 엔드 포인트 syslog 서버에 기록 된 모든 내부 시스템 이벤트를 전송하여 클라이언트로 실행할 수 있습니다.

rsyslog가 클라이언트로 구성되면 로그를 로컬 파일 시스템의 파일에 로컬로 저장하거나 시스템에 저장된 파일에 기록하거나 이벤트 로그 파일을 로컬에 기록하여 원격 syslog 서버로 보내는 대신 원격으로 보낼 수 있습니다. "동시.

Syslog 서버는 다음 체계를 사용하여 모든 로그 메시지를 작동합니다.

type (facility).priority (severity)  destination(where to send the log)

A. 시설 또는 유형 데이터는 메시지를 생성하는 내부 시스템 프로세스로 표시됩니다. Linux에서 로그를 생성하는 내부 프로세스 (시설)는 다음과 같이 표준화됩니다.

  • auth = messages generated by authentication processes (login).
  • cron= messages generated by scheduled processes (crontab).
  • daemon = messages generated by daemons (internal services).
  • kernel = messages generated by the Linux Kernel itself.
  • mail = messages generated by a mail server.
  • syslog = messages generated by the rsyslog daemon itself.
  • lpr = messages generated by local printers or a print server.
  • local0 – local7 = custom messages defined by an administrator (local7 is usually assigned for Cisco or Windows).

B. 우선 순위 (심각도) 수준도 표준화됩니다. 각 우선 순위는 아래에 설명 된대로 표준 약어와 숫자로 지정됩니다. "일곱 번째 우선 순위는 모든 것 중 더 높은 수준입니다.

  • emerg = Emergency – 0
  • alert = Alerts – 1
  • err = Errors – 3
  • warn = Warnings – 4
  • notice = Notification – 5
  • info = Information – 6
  • debug = Debugging – 7

특수 Rsyslog 키워드 :

  • * = all facilities or priorities
  • none = the facilities have no given priorities Eg: mail.none

C. syslog 스키마의 세 번째 부분은 대상 지시문으로 표시됩니다. Rsyslog 데몬은 로컬 파일 시스템의 파일 (대부분/var/log/디렉토리의 파일)에 기록되거나 다른 로컬 프로세스로 파이프되거나 로컬 사용자 콘솔 (표준 출력으로)에 보낼 로그 메시지를 보낼 수 있습니다. , 또는 TCP/UDP 프로토콜을 통해 원격 syslog 서버로 메시지를 보내거나/dev/null에 대한 메시지를 버립니다.

CentOS/RHEL 7을 중앙 로그 서버로 구성하려면 먼저 모든 로그 파일이 기록되는/var 파티션이 모든 로그 파일을 저장할 수있을만큼 충분히 큰지 (최소 몇 GB) 확인해야합니다. "다른 장치에서 보낼 로그 파일. "/ var/log/디렉토리를 마운트하려면 별도의 드라이브 (LVM, RAID)를 사용하는 것이 좋습니다.

  1. CentOS 7.3 Installation Procedure
  2. RHEL 7.3 Installation Procedure

CentOS / RHEL 7 서버에서 Rsyslog를 구성하는 방법

1. 기본적으로 Rsyslog 서비스는 자동으로 설치되며 CentOS/RHEL에서 실행되어야합니다. 7. 데몬이 시스템에서 시작되었는지 확인하려면 루트 권한으로 다음 명령을 실행합니다.

# systemctl status rsyslog.service

서비스가 기본적으로 실행되지 않는 경우 rsyslog 데몬을 시작하려면 아래 명령을 실행하십시오.

# systemctl start rsyslog.service

2. 중앙 로깅 서버로 사용하려는 시스템에 rsyslog 패키지가 설치되어 있지 않으면 다음 명령을 실행하여 rsyslog 패키지를 설치합니다.

# yum install rsyslog

3. rsyslog 데몬을 중앙 집중식 로그 서버로 구성하여 외부 클라이언트에 대한 로그 메시지를 수신 할 수 있도록 시스템에서 수행해야하는 첫 번째 단계는 기본 구성 인 자주 사용하는 텍스트 편집기를 사용하여 열고 편집하는 것입니다. "/etc/rsyslog.conf의 파일. 아래 발췌 부분에 나와 있습니다.

# vi /etc/rsyslog.conf

rsyslog 기본 구성 파일에서 514 포트를 통해 Rsyslog 서버에 UDP 전송 수신을 제공하기 위해 다음 행을 검색하고 주석 처리를 제거합니다 (행 시작에서 해시 태그 # 기호 제거). UDP는 Rsyslog의 로그 전송에 사용되는 표준 프로토콜입니다.

$ModLoad imudp 
$UDPServerRun 514

4. UDP 프로토콜은 TCP 오버 헤드가 없으므로 TCP 프로토콜보다 데이터 전송 속도가 빠릅니다. 반면 UDP 프로토콜은 전송 된 데이터의 신뢰성을 보장하지 않습니다.

그러나 로그 수신을 위해 TCP 프로토콜을 사용해야하는 경우 514 포트에서 TCP 소켓을 바인딩하고 수신하도록 Rsyslog 데몬을 구성하려면 /etc/rsyslog.conf 파일에서 다음 줄을 검색하고 주석 처리를 제거해야합니다. 수신을위한 TCP 및 UDP 수신 소켓은 Rsyslog 서버에서 동시에 구성 할 수 있습니다.

$ModLoad imtcp 
$InputTCPServerRun 514 

5. 다음 단계에서 아직 파일을 닫지 말고 원격 메시지 수신에 사용할 새 템플릿을 만듭니다. 이 템플릿은 로컬 Rsyslog 서버에 syslog 네트워크 클라이언트가 보낸 수신 메시지를 저장할 위치를 지시합니다. 템플릿은 아래 발췌 부분에 설명 된대로 GLOBAL DIRECTIVES 블록의 시작 전에 추가해야합니다.

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

위의 RemoteLogs 지시문은 Rsyslog 데몬이 템플릿 구성에있는 정의 된 속성을 기반으로 메시지를 생성 한 클라이언트 시스템 이름 및 원격 클라이언트 기능 (애플리케이션)을 기반으로 수신 된 모든 로그 메시지를 수집하고 개별 파일에 기록하도록 지시합니다. % "HOSTNAME % 및 % PROGRAMNAME %.

이러한 모든 로그 파일은 클라이언트 시스템의 호스트 이름을 따서 명명 된 전용 파일에 로컬 파일 시스템에 기록되고/var/log/디렉토리에 저장됩니다.

& ~ 리디렉션 규칙은 로컬 Rsyslog 서버에 수신 된 로그 메시지 처리를 중지하고 메시지를 삭제하도록 지시합니다 (내부 로그 파일에 기록하지 않음).

RemoteLogs 이름은이 템플릿 지시문에 지정된 임의의 이름입니다. 템플릿에 가장 적합한 이름을 사용할 수 있습니다.

메시지를 생성 한 기능을 필터링하지 않고 원격 클라이언트의 IP 주소를 따서 명명 된 단일 로그 파일에 클라이언트로부터받은 모든 메시지를 기록하려면 아래 발췌 부분을 사용하십시오.

$template FromIp,"/var/log/%FROMHOST-IP%.log" 
. ?FromIp & ~ 

인증 기능 플래그가있는 모든 메시지가 \"TmplAuth\"라는 템플릿에 기록되는 템플릿의 또 다른 예입니다.

$template TmplAuth, "/var/log/%HOSTNAME%/%PROGRAMNAME%.log" 
authpriv.*   ?TmplAuth

다음은 Rsyslog 7 서버에서 템플릿 정의를 발췌 한 것입니다.

template(name="TmplMsg" type="string"
         string="/var/log/remote/msg/%HOSTNAME%/%PROGRAMNAME:::secpath-replace%.log"
        )

위의 템플릿 발췌문은 다음과 같이 작성할 수도 있습니다.

template(name="TmplMsg" type="list") {
    constant(value="/var/log/remote/msg/")
    property(name="hostname")
    constant(value="/")
    property(name="programname" SecurePath="replace")
    constant(value=".log")
    }

복잡한 Rsyslog 템플릿을 작성하려면 man rsyslog.conf 명령을 실행하여 Rsyslog 구성 파일 매뉴얼을 읽거나 Rsyslog 온라인 문서를 참조하십시오.

6. 위에서 설명한대로 자체 설정으로 Rsyslog 구성 파일을 편집 한 후 다음 명령을 실행하여 변경 사항을 적용하기 위해 Rsyslog 데몬을 다시 시작합니다.

# service rsyslog restart

7. 지금까지 Rsyslog 서버는 중앙 집중식 로그 서버로 작동하고 syslog 클라이언트의 메시지를 기록하도록 구성되어야합니다. Rsyslog 네트워크 소켓을 확인하려면 루트 권한으로 netstat 명령어를 실행하고 grep을 사용하여 rsyslog 문자열을 필터링합니다.

# netstat -tulpn | grep rsyslog 

8. CentOS/RHEL 7에서 SELinux를 활성화 한 경우 다음 명령을 실행하여 네트워크 소켓 유형에 따라 rsyslog 트래픽을 허용하도록 SELinux를 구성합니다.

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

9. 방화벽이 활성화되고 활성화 된 경우 아래 명령을 실행하여 Firewalld에서 rsyslog 포트를 여는 데 필요한 규칙을 추가합니다.

# firewall-cmd --permanent --add-port=514/tcp
# firewall-cmd --permanent --add-port=514/udp
# firewall-cmd –reload

그게 다야! "Rsyslog는 이제 서버 모드로 구성되었으며 원격 클라이언트의 로그를 중앙 집중화 할 수 있습니다. 다음 기사에서는 CentOS/RHEL 7 서버에서 Rsyslog 클라이언트를 구성하는 방법을 살펴 봅니다.

Rsyslog 서버를 원격 로그 메시지의 중앙 모니터링 지점으로 사용하면 로그 파일을 검사하고 클라이언트 상태를 관찰하거나 시스템이 충돌하거나 어떤 종류의 공격을 받고있을 때 클라이언트 문제를보다 쉽게 디버깅 할 수 있습니다.