본문 바로가기

개발/docker

aws cloudwatch log 사용하기

최근 클라우드 서버를 aws로 변경하면서 이것저것 작업을 하고잇다.

 

지난번에는 가비아에 등록된 도메인을 aws 로 이전하는 작업을 하였고 

 

또 이전한 도메인에 ssl 인증을 하여 front-end/back-end 에 추가하였다 

 

( 원래 front-end에만 진행하려고하였지만 frontend에 ssl을 설정할 경우 backend에도 반드시 해줘야함 )

 

이번에는 filebeat + logstash + elasticsearch + kibana 를 사용하던 구조를  aws cloudwatch로 통합하는 과정을 진행해보려고한다.

 

 

기본 설정은 docker container를 4개 사용중입니다

4개의 container는 volume 설정으로 /var/lib/docker/volumes/_data 밑에 저장됩니다.

 

* 추가로 ec2 OS는 ubunutu 18.04 입니다

 

순서는 아래와같다

1. aws IAM 정책 생성

2. aws IAM 사용자생성 및 정책 연결

3. ec2 에 python3.5 설치 ( python2.7~3.5 가 있어야함 )

4. ec2 에 awslogs-agent-setup 다운로드및 설치

5. ec2 에 awslogs-agent-setup config 설정

6. ec2에서 로그 확인

7. cloud watch에서 확인 

 

 

 

시작 

 

1. aws IAM 정책 생성

IAM -> 엑세스 관리 -> 정책 -> 정책 생성 

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents",
        "logs:DescribeLogStreams"
    ],
      "Resource": [
        "*"
    ]
  }
 ]
}

 

*****************태그는 패스 ****************************

 

 

 

 

 

 

2. aws IAM 사용자 생성 및 정책 연결

IAM -> 엑세스 관리 - 사용자 -> 사용자 추가 

 

 

 

*****************태그는 패스 ****************************

 

 

 

 

******* 엑시스키 ID 와 비밀 엑세스 키 는 복사해서 따로 관리해주세요. ec2 에이전트 설치시 사용됩니다 !

 

 

 

 

3.  로그가 저장되어있는 EC2 에 python3.5 설치

기본적으로 ubuntu18.04 버전에는 python3.6 이 설치되어있습니다. 하지만 3.6으로는 wslogs-agent-setup 을 설치할수가없습니다 ( python2.7~3.5 사이만 가능 )

현재 OS 

# lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.6 LTS
Release:        18.04
Codename:       bionic

 

 

python3.6이 설치되어있는 관계로 3.5 설치 

 

apt-get install python3.5

==> Note, selecting 'libpython3.4-minimal' for regex 'python3.5' 에러 발생

sudo add-apt-repository ppa:deadsnakes/ppa

이후 

sudo apt-get update
sudo apt-get install python3.5

 

파이썬 설치 경로 확인

# which python3.5
/usr/bin/python3.5

 

 

 

 

 

4. ec2 에 awslogs-agent-setup 다운로드및 설치

첫번째 파일은 설치 파일이고 , 두번째 파일을 설치파일이 참조할 파일들이 담겨있습니다

네번쨰 명령어에서 region 지역은 본인에 맞게 설정해주세요.

그리고 나서는 해당 양식에 맞게  값을 넣어주시면됩니다.

curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/awslogs-agent-setup.py -O
curl https://s3.amazonaws.com/aws-cloudwatch/downloads/latest/AgentDependencies.tar.gz -O
tar xvf AgentDependencies.tar.gz -C /tmp/
sudo python3.5 ./awslogs-agent-setup.py --region ap-northeast-2 --dependency-path /tmp/AgentDependencies
Step 1 of 5: Installing pip ...libyaml-dev does not exist in system DONE
Step 2 of 5: Downloading the latest CloudWatch Logs agent bits ... DONE
Step 3 of 5: Configuring AWS CLI ...
AWS Access Key ID [아까 저장한 엑세스 키 ID]
AWS Secret Access Key [아까 저장한 시크릭 엑세스 키]
Default region name [위에서 지정한 지역 ]
Default output format [비워놓고 엔터 ]
Step 4 of 5: Configuring the CloudWatch Logs Agent ...
Path of log file to upload [ 자신의 log 파일 ex) /var/lib/docker/volumes/_data/*/*]
Destination Log Group name [ 로그 그룹에서 보여질 이름 ex) /testLog ] 
Choose Log Stream name:
  1. Use EC2 instance id.
  2. Use hostname.
  3. Custom.
Enter choice [1]: 1
Choose Log Event timestamp format:
  1. %b %d %H:%M:%S    (Dec 31 23:59:59)
  2. %d/%b/%Y:%H:%M:%S (10/Oct/2000:13:55:36)
  3. %Y-%m-%d %H:%M:%S (2008-09-08 11:52:54)
  4. Custom
Enter choice [1]: 3
Choose initial position of upload:
  1. From start of file.
  2. From end of file.
Enter choice [1]: 1
More log files to configure? [Y]: N
Step 5 of 5: Setting up agent as a daemon ...DONE

 

 

5. ec2에서 로그 확인

설정을 마친후 서비스를 재시작해주세요

sudo service awslogs restart

 

정상적으로 연결이 됫다면 ec2에서 해당 로그를 확인할수있습니다.

tail -f /var/log/awslogs.log
2022-06-22 04:51:01,869 - cwlogs.push.reader - WARNING - 15674 - Thread-317 - Fall back to current time: {'timestamp': 1655873461869, 'start_position': 284253, 'end_position': 284392}, reason: timestamp could not be parsed from message.
2022-06-22 04:51:02,396 - cwlogs.push.publisher - WARNING - 15674 - Thread-3 - Caught exception: An error occurred (DataAlreadyAcceptedException) when calling the PutLogEvents operation: The given batch of log events has already been accepted. The next batch can be sent with sequenceToken: 49610851848349024106813268164875228759629645270136914146
2022-06-22 04:51:07,491 - cwlogs.push.publisher - INFO - 15674 - Thread-3 - Log group: test, log stream: i-0a34e4eb030c99f33, queue size: 0, Publish batch: {'num_of_events': 2, 'source_id': '5dff089c3e389f4eebe68302aac98e16', 'first_event': {'timestamp': 1655873461869, 'start_position': 284113, 'end_position': 284253}, 'fallback_events_count': 2, 'last_event': {'timestamp': 1655873461869, 'start_position': 284253, 'end_position': 284392}, 'batch_size_in_bytes': 329, 'skipped_events_count': 0}
2022-06-22 04:51:16,871 - cwlogs.push.stream - INFO - 15674 - Thread-1 - Detected file rotation, notifying reader
2022-06-22 04:51:16,871 - cwlogs.push.stream - INFO - 15674 - Thread-1 - Reader is still alive.
2022-06-22 04:51:16,872 - cwlogs.push.reader - INFO - 15674 - Thread-317 - No data is left. Reader is leaving.
2022-06-22 04:51:21,871 - cwlogs.push.stream - INFO - 15674 - Thread-1 - Removing dead reader [5dff089c3e389f4eebe68302aac98e16, /var/lib/docker/volumes/docker-compose_log_volume/_data/log_A/2022-06-22.log]
2022-06-22 04:51:21,872 - cwlogs.push.stream - INFO - 15674 - Thread-1 - Starting reader for [84c69f6073a0e577ef220e6628b1b0ea, /var/lib/docker/volumes/docker-compose_log_volume/_data/log_B/2022-06-22.log]
2022-06-22 04:51:21,873 - cwlogs.push.reader - INFO - 15674 - Thread-318 - Replay events end at 209342.
2022-06-22 04:51:21,873 - cwlogs.push.reader - INFO - 15674 - Thread-318 - Start reading file from 205750.

 

 

 

6. aws cloud watch에서 확인

 

 

 

 

 

 

저는 아래 aws 공홈 doc 보면서 진행했습니다. 참고하시면됩니다 

https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/QuickStartEC2Instance.html

 

빠른 시작: 실행 중인 EC2 Linux 인스턴스에 CloudWatch Logs 에이전트를 설치 및 구성 - Amazon CloudWatch Log

CentOS 6.x, Red Hat 6.x, 또는 Ubuntu 12.04를 사용 중인 경우 독립 실행형 설치 관리자의 다운로드 및 실행 단계를 사용합니다. 이들 시스템에서는 CloudWatch Logs 에이전트를 인터넷에서 직접 설치하는 것

docs.aws.amazon.com