최근 클라우드 서버를 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