비구조화된 데이터 분석

Joshua_s·2021년 12월 4일
0
post-thumbnail

로그데이터 분석, 하둡 활용

AWS에서 제공하는 서비스를 활용하면 온프레미스에서 다루기 어려웠던 분산 처리 기술인 하둡도 손쉽게 사용할 수 있다. 하둡은 대량의 자료를 처리할 수 있는 큰 컴퓨터 클러스터에서 동작하는 분산 응용 프로그램을 지원하는 프리웨어 자바 소프트웨어 프레임워크이다.

구조화되지 않은 데이터 다루기

레드시프트에 넣을 수 있는 것은 구조화된 데이터뿐이다. 그러므로 로그 파일을 레드시프트에 적합한 데이터 형식으로 변환해야 한다. 하지만 불필요한 데이터가 로그 파일에 포함된 점도 문제이다. 불필요한 데이터는 앱의 기동이나 정지, 검색 엔진의 크롤링 로그등이 있다. 이러한 데이터를 제외하지 않으면 분석 작업에 지장을 초래할 수 있다.

웹 액세스와 앱 로그의 정제 및 변환에 Amazon EMR(Elastic MapReduce)이 있다. EMR은 분산 처리 기술인 하둡을 기반으로 한 관리형 서비스이다. 비정형 데이터를 최소한의 스키마 정의로 처리 가능하다. 반 구조화된 데이터를 그대로 취급할 수 있어서 데이터 변환 시스템을 별도 구축할 때보다 비용이 적다. 또한 변환할때만 사용하므로 운영 비용도 절감할 수 있다.

로그 파일은 오픈소스 로그 수집 소프트웨어 플루언트디(Fluentd)를 사용하고 각 서버에서 정기적으로 스토리지 서비스인 아마존 S3에 복사하여 집계한다. EMR은 S3에 저장된 로그 파일을 읽어 정제와 변환을 실시하고 가공후 데이터를 S3에 저장한다. 레드 시프트에 저장하고 분석할 수 있는 구조화된 데이터로 가공한 것이다.

EMR에서 가공된 로그 데이터를 레드시프르에서 가져와 태블로 데스크톱에서 간이 분석을 한다.

인프라 설계의 핵심
1.AWS 환경 내 로그 편집
2.로그의 효율적인 정제와 변환
3.전사적인 BI 이용

플루언트디를 사용한 로그수집

로그 형식은 사용하는 웹서버 소프트웨어와 앱에 따라 달라지며 분석 시스템이 처리할 데이터 형식도 시스템마다 다르다. 로그 수집 방식을 셸 스크립트 등으로 개별적으로 구현하고, 로그 수집 대상이 되는 서버 및 분석 시스템 조합의 수만큼 데이터 연계 프로그램도 만들어햐 한다. 이런식이면 구축뿐 아니라 운용에도 부담이된다. 플루언트디는 이러한 요구를 충족시켜 신생 기업과 기존 기업의 신규 사업을 중심으로 이용이 홛대되는 도구이다.

플루언트디는 로그 수집, 변환, 출력을 위한 오픈 소스 소프트웨어로 입출력 플러그인을 결합하여 다양한 형식의 로그를 다양한 대상으로 출력할 수 있다. 시스템 구성이 복잡하더라도 유연하게 로그 데이터를 연계시킬 수 있다.

사용방법

먼저 입력 플러그인을 선택한다. 입력플러그인에는 여러 종류가 있는데 아파치 액세스로그, 앱로그등은 in_tail을 이용한다. in_tail은 지정된 패스에 출력되는 로그를 지속적으로 읽어들이는 플러그 인이다.

그다음은. 로그 파일의 형식을 선택한다. in_tail 플러그인은 아파치, CSV형식을 지원한다. 아파치 액세스로그를 통합하려면 Apache2를 앱로그를 캡쳐하려면 csv를 각각 플러그인의 설정파일로 지정한다

이후 S3에 출력해야한다. 그런데 플루언트디 기본 패키지는 S3 출력 기능을 제공하지 않는다 별도로 Fluent-plugin-s3를 설치하고 대상으로 설정한다. 플루언트디는 로그 수집 대상 서버에 설치하며 설정 파일에서 플러그인 포멧과 대상 S3 버킷 정보등을 설정하면 로그 수집을 시작할 수 있다.

위와같이 설계하는 이유
1. 로그 수집 도구를 이용하여 단기간 구현
2. S3에 로그데이터 수집후 향후 데이터 분석 시스템이 바뀌더라도 수집장소 변경X

EMR로 로그데이터 정형

플루언트디로 수집한 로그는 JSON형식으로 S3에 출력된다. 이단계의 로그 파일에는 필요 없는 데이터나 변경이 필요한 데이터가 아직도 들어 있다. 이러한 로그 파일을 정혀하는데 아마존 EMR을 사용한다. 아마존 EMR은 하둡 클러스터의 관리형 서비스이다. 하둡은 대용량 로그 데이터 가공에 적합한 시스템이지만 구축과 운영이 번거롭다. 하지만 EMR은 노드 수 등을 설정하는 것만으로 사용할 수 있고 운용에 드는 수고도 덜 수 있다. 클러스터는 자동으로 관리된다.

운용 방법
우선 S3에 집약시킨 로그 파일을 읽기위해 아마존 EMR에 파일의 데이터 구조를 정의한 테이블을 만든다. 만들어진 테이블을 통해 데이터에 엑세스한다. EMR로 데이터 질의/분석 처리환경인 아파치 하이브(Hive)를 사용할 수 있다.

하이브는 하이브QL이라는 SQL과 유사한 데이터 조작 언어로 데이터르 처리한다. 하이브는 스크립트로도 작성할 수 있기 때문에 복잡한 데이터 조작과 정형에도 대응가능하다. 데이터 정형이 완료되면 S3에 결과를 출력한다. 이또한 하이브 명령어를 이용한다.

EMR을 사용한 대량의 로그 데이터 가공과 결과 출력을 할 수 있다. 하둡은 어렵다는 선입견이 있지만 어려운 것은 클러스터 구축과 운영 부분이다. 잘 이용한다면 어렵지 않다.

스텝 기능을 이용해 부팅시 스크립트 자동실행

아마존 EMR에서 하이브 스크립트를 개발하는 방법이다.작업용 EC2 인스턴스를 준비하고 아마존 ERM의 두 모드를 사용하여 스크립트를 개발한다.

아마존 ERM모드는 하이브 QL과 하이브 명령어의 실행 방법을 말한다. 인터랙티브와 배치 모드가 있으며 인터랙티브는 콘솔에서 대화형으로 실행하고 배치는 배치 단위로 실행한다.

방법
1. 작업용 EC2인스턴스로 부터 SSH로 콘솔에 접속해 하이브 QL이나 하이브 명령어를 입력하여 스크립트를 작성한다.
2. 스크립트가 완성되면 스크립트 파일을 S3에 업로드 한다. 이는 EMR의 스텝기능 즉 클러스터 시작시에 프로그램을 자동으로 실행하는 기능을 이용하기 위해서 이다.
3. 정기적으로 로그를 가공하려면 EC2 인스턴스 작업 스케줄러(cron 등)을 사용하여 EMR을 시작하는 CLI 명령어를 실행하게 해둔다.
4. 자동 종료를 실행하게 해둬 배치를 연속적으로 수행하는 경우가 아니라면 종료되도록 설정해 EMR관리의 수고를 줄인다.

끝으로

로그가 늘어나면 작업 노드의 수를 적절하게 늘려서 처리능력을 향상하자. 노드의 추가가 가장 기본적이고 쉽게 수행할 수 있는 방법이다.

profile
devops engineer가 되기 위해

0개의 댓글