아마존 CloudFront 로그를 아마존 Elastic MapReduce로 분석
다루는 내용
· 콘솔에서 아마존 EMR 클러스터 생성
· EMR 마스터 노드에서 HIVE CLI로 CloudFront 로그 분석
· EMR Step에서 HIVE 스크립트로 CloudFront 로그 분석
· Ganglia로 EMR 상태 모니터링
실습
아마존 S3 버킷 생성
1. 콘솔에서 S3 클릭
2. Create Bucket 클릭
3. Create a Bucket – Select a Bucket Name and Region 창에서
∙ Bucket Name : cloudfront-log-analyze-emr-arang
∙ Region : Oregon
∙ Create 클릭
4. cloudfront-log-analyze-emr-arang 버킷명 클릭
5. Create Folder 클릭
∙ logs, output 두개의 버킷 생성
logs에는 EMR 실행 결과 로그가 저장되며, output에는 로그 분석 결과가 저장된다.
아마존 EMR 클러스터 생성
1. 콘솔에서 EMR 클릭
2. Create cluster 클릭
3. Cluster Configuration 섹션
∙ Cluster name : log analyzer cluster
∙ Log folder S3 location : s3://cloudfront-log-analyze-emr-arang/logs/
4. Tags 섹션
∙ Key : Name
∙ Value : EMR Node
5. Software Configuration 섹션
∙ AMI version : 3.4.0 선택 (최신 버전)
∙ Additional applications : Ganglia 선택
∙ Configure and add 클릭
6. Hardware Configuration 섹션
∙ Master : m1.medium (1)
∙ Core : m1.large (2)
7. Security and Access 섹션
∙ EC2 key pair : ec2_keypair
∙ IAM user access : No other IAM users
8. Steps 섹션
∙ Auto-termicate : No
9. Create cluster 클릭
HIVE CLI로 CloudFront 로그 분석
1. 콘솔에서 EMR 클릭
2. 생성한 클러스터(log analyzer cluster)명 클릭
Running 상태가 될 때까지 기다린다.
3. 마스터 노드 SSH 접속
∙ Master public DNS : ec2-52-10-65-169.us-west-2.compute.amazonaws.com
SSH 로그인시의 USER ID는 hadoop 이다. (최신 버전의 경우 ec2-user로도 접속 가능하나 HIVE등 분석 툴을 사용할 수 없다.)
4. CloudFront 로그 샘플
∙ s3://us-west-2.elasticmapreduce.samples/cloudfront/data/
5. HIVE 실행
∙ hive 입력
프롬프트가 hive>로 변경되며 CLI 상태가 된다.
6. HIVE로 데이터 입력
7. HIVE 퀴리로 데이터 분석
8. 결과 확인
Agent 별 요청수를 확인할 수 있다.
HIVE 스크립트로 CloudFront 로그 분석
1. HIVE 테이블 삭제
현재 cloudfront_logs라는 HIVE 테이블이 생성되어 있는 상태이므로 동일한 테이블을 생성하려 할 경우 에러가 발생한다. 다음 실습을 위해 삭제해준다.
2. 콘솔에서 EMR 클릭
3. 생성한 클러스터(log analyzer cluster)명 클릭
4. Add step 클릭
5. Add Step 창에서
∙ Step type : Hive program 선택
∙ Script S3 location :
s3://us-west-2.elasticmapreduce.samples/cloudfront/code/Hive_CloudFront.q
(us-west-2는 자신의 리전으로 수정한다.)
위 파일을 다운받아서 열어 보면 아래와 같다. CLI에서 사용했던 것과 동일하며, 결과를 S3에 저장하도록 하는 설정만 추가되어 있다.
∙ Input S3 location : s3://us-west-2.elasticmapreduce.samples (us-west-2는 자신의 리전으로 수정한다.)
스크립트에서 LOCATION의 ${INPUT} 변수가 치환된다.
∙ Output S3 location : s3://cloudfront-log-analyze-emr-arang/output/
∙ Add 클릭
6. 모니터링
∙ 화면 하단의 Steps 클릭
∙ 작업이 완료되면 Status가 Completed 된다.
7. 결과 확인
∙ 콘솔에서 S3 클릭
∙ cloudfront-log-analyze-emr-arang/output/os_requests 디렉토리에 결과 파일이 생성되어 있다.
Ganglia로 EMR 상태 모니터링
EMR 클러스터를 만들 때 Ganglia 툴을 추가 설치하였다.
1. 콘솔에서 EC2 클릭
2. Instances 클릭
3. Name이 EMR Node인 인스턴스 중 인스턴스 타입이 m1.medium인 인스턴스 클릭
4. Description 탭에서
∙ Public DNS : ec2-52-10-65-169.us-west-2.compute.amazonaws.com 복사
∙ Security groups의 보안그룹 클릭 (예. ElasticMapReduce-master)
5. Inbound 탭 클릭
6. Edit 클릭
7. Add Rule 클릭
∙ HTTP 추가
∙ Save 클릭
8. 브라우져 접속
∙ http://ec2-52-10-65-169.us-west-2.compute.amazonaws.com/ganglia
참고
위 샘플 로그가 아닌 실제 서비스 중인 CloudFront 로그로 테스트를 하면 오류가 발생한다.
이는 정규표현식으로 구분한 항목을 테이블 컬럼에 입력할 때 맞지 않아서 발생하는 문제이므로 수정하면 된다. 추가적으로 EMR은 압축된 로그 파일도 확장자를 보고 알아서 분석해주므로 신경 쓰지 않아도 된다.
최신 댓글