본문 바로가기

혼자하는 프로젝트/KinesisDataStreams_Firehose

AWS KinesisDataStreams와 AWS KinesisFirehose를 이용한 아파치 로그 데이터 수집 저장 (2)

# AWS KinesisDataStreams와 AWS KinesisFirehose를 이용한 아파치 로그 데이터 수집/저장 구현

- Kinesis Agent를 활용하여 데이터를 수집 및 저장하는 방법을 구현한다.

- Kinesis Agent 사용에 대한 설명은 아래의 링크에서 확인 가능

https://docs.aws.amazon.com/ko_kr/streams/latest/dev/writing-with-agents.html

 

Kinesis Data Streams를 사용하여 Amazon Kinesis Data Streams 쓰기 - Amazon Kinesis Data Streams

다음 흐름 구성은 첫 줄이 "[SEQUENCE="로 시작하는 여러 줄 레코드를 구문 분석합니다. 먼저 각각의 레코드가 한 줄 레코드로 변환됩니다. 그런 다음 탭 구분 기호를 기반으로 레코드에서 값이 추

docs.aws.amazon.com

1. Kinesis Data Streams 구성

- 데이터 스트림을 구성한다. 
- AWS 서비스에서 Kinesis를 검색 > Kinesis Data Streams를 선택 후 > 데이터 스트림 생성을 클릭하여 새로운 스트림을 생성한다.

- 데이터 스트림의 이름을 입력하고 프로비저닝을 선택 후 샤드의 용량을 정한 뒤 데이터 스트림을 생성한다.

- 데이터 스트림이 생성되고 상태가 활성화 된것을 확인한다.

- 여기까지 구성이 된다면 Kinesis Data Streams구성은 끝난것이다. 다음 Firehose 구성을 진행한다.

2. Kinesis Data Firehose 구성

- 서비스에서 Kinesis Data Firehose서비스를 선택 후 Create delivery stream을 클릭하여 새로운 스트림을 생성한다.

- 새로운 스트림을 생성하는 화면에서
① 대상이 되는 소스를 선택한다.
② 대상 소스에서 받을 파일을 저장할 저장소를 선택한다.
③ Kinesis data stream에서 생성한 데이터 소스를 선택한다.
④ Delivery stream name을 지정한다. 여기서는 Apache-Event-Log-Analystics 이라는 이름으로 지정 하였다.
⑤ Kinesis data stream을 통해 전달될 데이터를 저장하는 S3 버킷 저장소를 선택한다.
⑥ Create delivery stream을 클릭하여 데이터 스트림을 생성한다.
ⓘ 보안적인 이유로 Kinesis Data Firehose를 통해 수신하는 데이터를 변환가능, Lambda을 사용하여 소스 레코드 변환 가능 하다.
ⓘ JSON 형식을 Apache Parquet 또는 Apache ORC로 변환 가능하다.
ⓘ GZIP, Snappy, Zip 형태로 압축하여 저장할 수 있다. 저장 시, 암호화하는 기능도 제공한다.

- 위의 스트림 생성에서 설명 하지 않은 옵션 아래의 "더보기" 클릭

더보기

1. S3 Prefix
S3 Prefix는 S3 폴더명(경로)이다. 기본적으로 'YYYY/MM/DD/HH' UTC 시간 형식으로 자동적으로 적용된다. (예를 들어, 2022/01/10/00/에 저장되게 된다.)
이러한 시간 기본값 대신 사용자가 원하는 내용의 Prefix를 지정할 수 있다. 만약 전송 오류 발생 시, S3에 데이터를 전송할 때 Prefix도 사용자가 임의로 정하여 지정할 수 있다.

2. Buffer hints, compression and encryption
Kinesis Data Firehose는 S3로 데이터를 전송하기 전에 버퍼링 하는 단계를 거친다. 
버퍼 크기(1–128MB) 또는 버퍼 간격(60–900초)을 선택할 수 있다.
데이터 변환을 수행하게 되면, Kinesis Data Firehose가 변환된 데이터를 수신하고 S3로 데이터가 전송할 때까지 버퍼 간격이 적용된다. S3로 데이터가 전송되는 속도가 데이터 변환 속도보다 느린 경우, Kinesis Data Firehose가 속도를 조절하기 위함이다. 버퍼 크기는 동적으로 확장된다.

3. Advanced settings
- 아마존 클라우드 와치에 해당 서비스에 대한 로그를 남길 수 있는 옵션이다.

- 퍼미션 설정으로 해당 서비스에 대한 IAM 권한을 설정 할 수 있다.

- 스트림이 생성되면 아래와 같이 생성된 스트림 리스트를 확인 할 수있다.

3. Kinesis Agent 구성하기

- 아마존 리눅스 AMI를 이용해 OS 생성

2021.06.13 - [AWS/Kinesis Data Stream] - Kinesis Data Streams - EC2 생성

 

Kinesis Data Streams - EC2 생성

1. EC2를 생성합니다. 우리는 아마존 AMI 리눅스 버전을 사용하도록 하겠습니다. 2. EC2 인스턴스의 유형을 선택 후 다음을 클릭합니다. 우리는 테스트 버전이니 테스트 용도로 프리티어가 적용되는

may9noy.tistory.com

- Putty를 활용한 SSH 접속 (MobaXterm 이나 CMD를 통해서도 접근이 가능하다... 블로그 검색하면 접근 방법 나옵니다.)

2021.08.11 - [리눅스/SSH 접속도구 & SSH] - putty를 활용한 SSH 접속하기

 

putty를 활용한 SSH 접속하기

1. putty를 실행한다 > 호스트네임과 포트정보 그리고 저장할 세션의 이름을 설정한다. 2. 카테고리 > SSH > Auth > Private key file for autentication 에서 ppk파일을 선택한다. 3. 여기에서 ppk 파일의 생성..

may9noy.tistory.com

- 아래 명령어를 활용하여 Kinesis Agent를 설치한다.

sudo yum install –y aws-kinesis-agent

- 설치 화면 총 122MB의 관련 파일을 설치한다.
- 설치가 완료되면 하단에 Complete! 라는 메세지가 출력된다.

- sudo vim /etc/sysconfig/aws-kinesis-agent 을 입력하여 사용자 계정의 액세스 키와 리전을 입력한다.

sudo vim /etc/sysconfig/aws-kinesis-agent

- 계정의 엑세스 키를 아래와 같이 입력 후 저장 합니다.

AWS_ACCESS_KEY_ID=[사용자 키 아이디]
AWS_SECRET_ACCESS_KEY=[사용자 시크릭 키]
AWS_DEFAULT_REGION=ap-northeast-2

- /etc/aws-kinesis/agent.json 에서 다음과 같이 구성 정보를 입력한다. 
본문의 내용은 Apache 로그를 S3로 보내고자 한다.

sudo vim /etc/aws-kinesis/agent.json

- 본문의 내용

{
  "cloudwatch.emitMetrics": true,
  "kinesis.endpoint": "https://kinesis.ap-northeast-2.amazonaws.com",
  "firehose.endpoint": "https://firehose.ap-northeast-2.amazonaws.com",

  "flows": [
    {
      "filePattern": "/var/log/httpd/access_log",
      "kinesisStream": "apache-log-streams-test" #생성된 Kinesis Data Streams와 동일하게 맞추어야 한다.
    }
  ]
}

- 아파치 웹서버 설치하기

2021.08.29 - [Applications/Apache & Tomcat] - EC2 인스턴스에 Apache 웹서버를 띄워보자

 

EC2 인스턴스에 Apache 웹서버를 띄워보자

1. 해당 인스턴스에 아파치를 설치 후 Apache Main 화면을 띄워보자. - SSH 툴을 이용해서 내 서버(인스턴스)로 접속한다. - 우선 명령어 sudo apt-get update 를 날려 설치 가능한 리스트를 업데이트 한다. -

may9noy.tistory.com

- 만약 AWS Kinesis Data Streams를 거치지 않고 바로 Kinesis Data Firehose를 거친뒤 S3로 적재 시에는 아래와같이 설정해 주면된다.
- 여기서는 Kinesis Data Streams를 거쳐서 S3로 적재할 예정이기 때문에 아래의 방법은 참고만 하자.

{
   "flows": [
        {
            "filePattern": "/var/log/httpd/access_log",
            "deliveryStream": "test"
        }
   ]
}

- 접근할 로그 파일에 대한 권한 변경도 필요하다. 아래와 같이 접근 권한을 설정한다.

chmod 755 /var/log/httpd
chmod 644 /var/log/httpd/access_log

- Kinesis Agent 시작, 재실행, 정지 명령어 (만약 정보를 변경했다면, Agent를 재실행해야 변경된 정보가 반영된다.)

sudo service aws-kinesis-agent start
 
sudo chkconfig aws-kinesis-agent on
 
sudo service aws-kinesis-agent restart
 
sudo service aws-kinesis-agent stop

- Kinesis Agent의 실행로그 확인

cat /var/log/aws-kinesis-agent/aws-kinesis-agent.log

tail -f /var/log/aws-kinesis-agent/aws-kinesis-agent.log

4. 구현결과 확인

aws-kinesis-agent.log에서 실행 및 전송이 성공적으로 이루어지고 있는지 확인한다. 
정상 수행 로그 및 오류 발생 시 오류 로그 또한 이 로그에서 확인할 수 있다. (권한 부여 오류 등)

- tail -f 명령어를 기반으로 로그 데이터를 실시간으로 확인한다.

- S3 버킷에 데이터가 현재 어떻게 쌓이는지 확인해 보자.
- 설정한 S3 버킷에 데이터가 정상적으로 쌓이는것을 확인 할 수 있다.

- S3 버킷의 쌓인 데이터를 열어보자. 아래와 같은 접속 로그가 쌓인것을 확인 할 수 있다.

- 다음 챕터 에서는 S3에 쌓인 데이터를 AWS Athena를 기반으로 쿼리를 수행하고, 수행한 데이터를 QuickSight로 시각화 하는 작업에 대해서 진행하자.

- 끝 -