cloudwatch의 로그 그룹에 로그 보내기

박건희·2022년 8월 11일
0
post-custom-banner

cloudwatch를 사용하여 인스턴스의 로그를 로그 그룹으로 가져와서
시각화 하려고 한다.

원래는 인스턴스에 cloudwatch agent를 설치하고 ssm과 파라미터 스토어에서 파라미터를 만들어서 할 생각이였는데,
더 간단한 방법이 있어서 해당 내용을
정리해 보았다.

먼저 인스턴스의 로그를 로그그룹으로 전송해야한다.

1. 인스턴스, iam 생성

테스트를 하기 위한 인스턴스를 생성한다.

그리고 iam을 생성하여 다음과 같은 test라는 이름의 iam 그룹을 생성한다.
CloudWatchAgentServerPolicy
AmazonSSMManagedInstanceCore
를 추가해주고 iam 정책을 추가해준다.

그리고 테스트할 인스턴스를 클릭하여
보안 -> iam 역할 수정을 클릭한다.

IAM역할에서 방금만든 test라는 이름의 iam을 선택한 다음 iam 역할 업데이트를 클릭한다.

이로써 서버가 CloudWatch 에이전트를 실행하는 데 필요한 IAM 역할을 생성되었고,
생성한 IAM이 테스트를 위한 인스턴스에 적용되었다.

2. 인스턴스에서 CloudWatch Logs 설치

우선 루트 계정으로 전환해 준다.

sudo su -

그리고 yum 업데이트를 해준다.

sudo yum update -y

CloudWatch Agent를 설치해준다.

sudo yum install -y awslogs

설치를 해 줬으면
테스트를 진행하기 위해 인스턴스에 httpd를 설치해준다.

sudo yum install -y httpd
systemctl enable --now httpd

3. awslogs.conf파일 수정

awslogs.conf의 내용을 수정해준다.

vi /etc/awslogs/awslogs.conf

awslogs.conf 로 들어가서
다음과 같은 내용들을 맨 밑으로 가서 추가해준다.

[/var/log/httpd/access_log]
datetime_format = %d/%b/%Y:%H:%M:%S %z
file = /var/log/httpd/access_log
buffer_duration = 60000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/httpd/access_log

[/var/log/httpd/error_log]
datetime_format = %d/%b/%Y:%H:%M:%S %z
file = /var/log/httpd/error_log
buffer_duration = 60000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/httpd/error_log

추가한 다음 awscli.conf로 들어가서
내용을 수정해준다.

vi /etc/awslogs/awscli.conf

그리고 리전을 바꿔준다.
나는 서울 리전을 사용할 것 이기 때문에

ap-northeast-2로 변경할 것 이다.

conf 파일의 설정이 끝났으면
다시 시작을 해준다음
enable을 적용시켜준다.

sudo systemctl start awslogsd
sudo systemctl enable awslogsd.service

로그가 제대로 들어왔는지

cd /var/log/httpd

를 입력하여 해당 경로에서 확인해본다.

4. 시간대 조정

만일 인스턴스를 바로 생성했다면,
시간대가 아마도 한국 시간대로 맞춰져 있지 않을것 이다.

시간대가 제대로 맞지 않으면 로그 그룹에
제대로 나오지 않는다.

date를 입력했을때 현재 시간대와 다른지 확인을 한다.

만약 다르다면 timedatectl 명령어로 변경해주어야한다.
다음 명령어를 입력하여 서울 시간대로
시간을 변경해준다.

timedatectl set-timezone
timedatectl set-timezone Asia/Seoul

입력 후 date를 했을때 제대로
한국 시간대가 나오는지 확인해본다.

그리고 시간대 조정이 완료되었으면
다시 awslogsd 파일을 재시작 해줘서
현재 시간대를 awslogsd 파일에 적용시켜준다.

sudo systemctl restart awslogsd

5. 로그그룹에서 로그 스트림 확인

cloudwatch로 가서 로그그룹을
클릭한다.

테스트를 위한 인스턴스의 퍼블릭 ip를
복사한 다음 새로고침을 마구마구 눌러준다.

로그그룹에서 access_log를 클릭해서
로그가 전송되는지 로그 스트림을 확인한다.

profile
hihihi
post-custom-banner

0개의 댓글