Cloud/Amazon Cloud

[AWS] CloudWatch Logs Agent를 이용하여 서버 로그 정리하기

__Evening 2024. 12. 20. 17:43
반응형

안녕하세요.

 

이번 시간에는 CloudWatch Logs Agent를 이용하여 서버 로그를 깔끔하게 저장하는 방법에 대해 소개하고자 합니다.

 

1. 개요

사전 보안성 검토 간 Bastion Host에 대한 시스템 로그, 액세스 로그, 세션 로그 등을 보관해야 한다는 지침이 있어서 따로 HIWARE를 쓰지 않는 경우라면 CloudTrail이나 CloudWatch Logs Agent를 이용하여 서버 로그를 정리할 수 있습니다.

수집하고자 하는 로그
/var/log/message
일반적인 시스템 로그
/var/log/secure
SSH 세션 로그
/var/log/command-history
명령어 로그 (추가 필요)

수집하고자 하는 로그는 다음과 같이 3가지 로그입니다. 보존 기간은 장기 보존 정책에 따라 로그 그룹으로 수집하여 S3 Glaciar에 보관할 예정입니다.

 

2. CloudWatch Logs Agent 사용하기

1. CloudWatch Logs Agent 설치하기

sudo yum install -y awslogs
sudo systemctl start awslogsd
sudo systemctl enable awslogsd

다음과 같이 awslogs를 통해 로그 그룹과 로그 스트림을 생성할 예정입니다.

1-1. CloudWatch Logs Agent 기본 설정 변경하기

sudo vi /etc/awslogs/awscli.conf

[default]
region = ap-northeast-2 (default: us-east-1)

# 변경

awslogs의 기본 awscli 설정 값이 us-east-1이기 때문에 필요한 리전에 맞게 끔 변경합니다.

2. AWS CLI 프로파일 설정하기

aws configure
<AWS Access Key>
<AWS Secret Key>
<AWS Region>

용도 별 키 관리를 위해 CloudWatch Log 관련 권한을 가지고 있고 Console 비활성화인 사용자를 생성한 후 API Key를 입력합니다.

 

3. Command History 설정하기

export PROMPT_COMMAND='history -a >(logger -p local6.info -t bash[$$])'

~/.bashrc 파일 수정합니다.

 

# rsyslog.conf 파일을 수정합니다.
sudo vi /etc/rsyslog.conf

# 다음과 같이 command-history log 파일을 생성하도록 설정합니다.
local6.*    /var/log/command-history

# 파일 저장
:wq

# rsyslog를 재시작합니다.
sudo systemctl restart rsyslog.service

 

rsyslog를 재시작하면 다음과 같이 command-history 파일이 /var/log 경로에 생기는 것을 확인할 수 있습니다.

 

4. awslogsd.conf 파일 설정하기

sudo vi /etc/awslogs/awslogs.conf
[/var/log/messages]
datetime_format = %d/%b/%Y:%H:%M:%S %z
file = /var/log/messages
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = <로그 그룹 이름 지정>

[/var/log/secure]
datetime_format = %d/%b/%Y:%H:%M:%S %z
file = /var/log/secure
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = <로그 그룹 이름 지정>

[/var/log/command-history]
datetime_format = %d/%b/%Y:%H:%M:%S %z
file = /var/log/command-history
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = <로그 그룹 이름 지정>

다음과 같이 awslogs 설정 파일에 시스템 로그, SSH 세션 로그, 명령어 로그를 로그 그룹으로 생성하는 설정을 진행합니다.

 

sudo systemctl restart awslogsd

다음과 같이 awslogsd 서비스를 재시작하면 로그 그룹이 생기는 것을 확인할 수 있습니다.

 

IAM 사용자에 CloudWatch Log에 대한 권한이 없으면 로그 그룹이 생성되지 않습니다.

 

그러면 다음과 같이 로그 그룹이 생성되는데 로그 쌓이는 내용도 한 번 확인해보겠습니다.

 

[command-history]

다음은 명령어 로그입니다. 잘 기록되는 것을 확인할 수 있습니다.

 

[message]

일반적인 시스템 로그입니다. 잘 기록되는 것을 확인할 수 있습니다.

 

[secure]

SSH 세션 로그입니다.

 

이번 시간에는 CloudWatch Logs Agent를 통해 간단하게 로그 그룹을 용도 별로 생성하여 로그를 관리하는 실습을 진행했습니다.

로그 그룹의 리텐션은 짧게 가져가야 비용이 많이 나오지 않습니다.

 

이렇게 보관한 로그들은 S3로 넘긴 후 라이프사이클 생성을 통해 S3 Glaciar로 장기 보존 정책을 가져가는 게 일반적입니다.

 

감사합니다.

반응형