15.2. 로깅 RHEL 시스템 역할을 사용하여 원격 로깅 솔루션 적용
로깅
RHEL 시스템 역할을 사용하여 하나 이상의 클라이언트가 systemd-journal
서비스에서 로그를 가져와서 원격 서버로 전달하는 원격 로깅 솔루션을 구성할 수 있습니다. 서버는 remote_rsyslog
및 remote_files
구성에서 원격 입력을 수신하고 원격 호스트 이름으로 이름이 지정된 디렉터리의 로컬 파일에 로그를 출력합니다.
따라서 다음과 같은 경우 필요한 사용 사례를 처리할 수 있습니다.
- 중앙 집중식 로그 관리: 단일 스토리지 지점에서 여러 시스템의 로그 메시지를 수집, 액세스 및 관리하면 일상적인 모니터링 및 문제 해결 작업을 단순화할 수 있습니다. 또한 이 사용 사례로 로그 메시지를 확인하기 위해 개별 시스템에 로그인할 필요가 줄어듭니다.
- 강화된 보안: 로그 메시지를 한 중앙에 저장하면 안전하고 변조 방지 환경에 있을 가능성이 높아집니다. 이러한 환경을 통해 보안 문제를 보다 효과적으로 감지하고 대응하고 감사 요구 사항을 충족할 수 있습니다.
- 로그 분석의 효율성 개선: 여러 시스템의 로그 메시지 상관관계는 여러 머신 또는 서비스에 걸쳐 있는 복잡한 문제를 신속하게 해결하는 데 중요합니다. 이렇게 하면 다양한 소스의 이벤트를 신속하게 분석하고 참조할 수 있습니다.
사전 요구 사항
- 컨트롤 노드 및 관리형 노드를 준비했습니다.
- 관리 노드에서 플레이북을 실행할 수 있는 사용자로 제어 노드에 로그인되어 있습니다.
-
관리 노드에 연결하는 데 사용하는 계정에는
sudo
권한이 있습니다. - 서버 또는 클라이언트 시스템의 SELinux 정책에 포트를 정의하고 해당 포트에 대한 방화벽을 엽니다. 기본 SELinux 정책에는 포트 601, 514, 6514, 10514, 20514가 포함됩니다. 다른 포트를 사용하려면 클라이언트 및 서버 시스템에서 SELinux 정책 수정을 참조하십시오.
절차
다음 콘텐츠를 사용하여 플레이북 파일(예:
~/playbook.yml
)을 생성합니다.--- - name: Deploy the logging solution hosts: managed-node-01.example.com tasks: - name: Configure the server to receive remote input ansible.builtin.include_role: name: rhel-system-roles.logging vars: logging_inputs: - name: remote_udp_input type: remote udp_ports: [ 601 ] - name: remote_tcp_input type: remote tcp_ports: [ 601 ] logging_outputs: - name: remote_files_output type: remote_files logging_flows: - name: flow_0 inputs: [remote_udp_input, remote_tcp_input] outputs: [remote_files_output] - name: Deploy the logging solution hosts: managed-node-02.example.com tasks: - name: Configure the server to output the logs to local files in directories named by remote host names ansible.builtin.include_role: name: rhel-system-roles.logging vars: logging_inputs: - name: basic_input type: basics logging_outputs: - name: forward_output0 type: forwards severity: info target: <host1.example.com> udp_port: 601 - name: forward_output1 type: forwards facility: mail target: <host1.example.com> tcp_port: 601 logging_flows: - name: flows0 inputs: [basic_input] outputs: [forward_output0, forward_output1] [basic_input] [forward_output0, forward_output1]
예제 플레이북의 첫 번째 플레이에 지정된 설정은 다음과 같습니다.
logging_inputs
-
로깅 입력 사전 목록을 정의합니다.
type: remote
옵션은 네트워크를 통해 다른 로깅 시스템의 원격 입력을 다룹니다.udp_ports: [ 601 ]
옵션은 모니터링할 UDP 포트 번호 목록을 정의합니다.tcp_ports: [ 601 ]
옵션은 모니터링할 TCP 포트 번호 목록을 정의합니다.udp_ports
및tcp_ports
가 모두 설정된 경우udp_ports
가 사용되고tcp_ports
가 삭제됩니다. logging_outputs
-
로깅 출력 사전 목록을 정의합니다.
type: remote_files
옵션은 원격 호스트별로 로컬 파일에 출력 저장소 로그를 만들고 프로그램 이름이 로그를 생성했습니다. logging_flows
-
logging_inputs
와logging_outputs
간의 관계를 지정하는 로깅 흐름 사전 목록을 정의합니다.입력: [remote_udp_input, remote_tcp_input]
옵션은 로그 처리가 시작되는 입력 목록을 지정합니다.outputs: [remote_files_output]
옵션은 로그를 전송할 출력 목록을 지정합니다.
예제 플레이북의 두 번째 플레이에 지정된 설정은 다음과 같습니다.
logging_inputs
-
로깅 입력 사전 목록을 정의합니다.
유형: 기본
옵션은systemd
저널 또는 Unix 소켓의 입력을 다룹니다. logging_outputs
-
로깅 출력 사전 목록을 정의합니다.
type: forward
옵션은 네트워크를 통해 원격 로깅 서버로 로그 전송을 지원합니다.severity: info
옵션은 정보 중요도의 로그 메시지를 나타냅니다.facility: mail
옵션은 로그 메시지를 생성하는 시스템 프로그램의 유형을 나타냅니다.target: < host1.example.com
> 옵션은 원격 로깅 서버의 호스트 이름을 지정합니다.udp_port: 601
/tcp_port: 601
옵션은 원격 로깅 서버가 수신 대기하는 UDP/TCP 포트를 정의합니다. logging_flows
-
logging_inputs
와logging_outputs
간의 관계를 지정하는 로깅 흐름 사전 목록을 정의합니다.inputs: [basic_input]
옵션은 로그 처리가 시작되는 입력 목록을 지정합니다.outputs: [forward_output0, forward_output1]
옵션은 로그가 전송되는 출력 목록을 지정합니다.
플레이북에 사용되는 모든 변수에 대한 자세한 내용은 제어 노드의
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
파일을 참조하십시오.플레이북 구문을 확인합니다.
$ ansible-playbook --syntax-check ~/playbook.yml
이 명령은 구문만 검증하고 잘못되었지만 유효한 구성으로부터 보호하지 않습니다.
플레이북을 실행합니다.
$ ansible-playbook ~/playbook.yml
검증
클라이언트 및 서버 시스템 모두에서
/etc/ECDHE.conf 파일의 구문을 테스트합니다.
# rsyslogd -N 1 rsyslogd: version 8.1911.0-6.el8, config validation run (level 1), master config /etc/rsyslog.conf rsyslogd: End of config validation run. Bye.
클라이언트 시스템이 서버에 메시지를 전송하는지 확인합니다.
클라이언트 시스템에서 테스트 메시지를 보냅니다.
# logger test
서버 시스템에서
/var/log/ <host2.example.com> /messages
로그를 확인합니다. 예를 들면 다음과 같습니다.# cat /var/log/<host2.example.com>/messages Aug 5 13:48:31 <host2.example.com> root[6778]: test
여기서
<host2.example.com
>은 클라이언트 시스템의 호스트 이름입니다. 로그에 logger 명령을 입력한 사용자의 사용자 이름이 포함되어 있습니다(이 경우root
).
추가 리소스
-
/usr/share/ansible/roles/rhel-system-roles.logging/README.md
파일 -
/usr/share/doc/rhel-system-roles/logging/
디렉터리 -
rsyslog.conf(5)
및syslog Cryostat
매뉴얼 페이지