[ TIL ] 데이터 엔지니어링 (2)

제갈창민·2022년 6월 13일
1

learningbook

목록 보기
31/32
post-thumbnail

사내 M/L 개발자 '고강빈'님의 강의자료 입니다.

  • 데이터 수집 엔진
    • 점차 확대되어 파이프라인 툴로 자리잡고 있음
    • 다양한 소스에서 데이터를 수집하여 변환한 후 저장소로 전달
  • 플러그인을 통해 원하는 방식으로 parsing 가능
  • 데이터 수집 & 전달 (데이터 파이프라인 역할)
  • 경량 수집기로부터 전달받은 데이터를 aggregation 하는 역할

⇒ Server Cluster → Aggregator → Store


다양한 input, filter, output plugin 지원


1. AWS 서버 구축

아마존 웹서비스 (AWS)에서 EC2 우분투 서버를 구축하고 해당 서버 위에서 데이터 수집 및 전달을 실습해보자.


AWS → EC2 → 인스턴스 시작


Ubuntu 20.04 LTS → t2.large


새 키 페어 생성


EC2 인스턴스 연결


2. 데이터 수집 및 전달

로그스태시(logstash)와 비츠(beats - filebeat)를 이용하여 데이터를 수집하고 이를 서버에 전달해보자.


Download logstash & filebeat

# install java
sudo apt update
sudo apt install openjdk-11-jdk -y

# download & unzip logstash
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.16.2-linux-x86_64.tar.gz
tar -zxvf logstash-7.16.2-linux-x86_64.tar.gz

# download & unzip filebeat
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.16.2-linux-x86_64.tar.gz
tar -zxvf filebeat-7.16.2-linux-x86_64.tar.gz

실습용 파일 다운로드 & 단순 로그 생성 및 적재

# clone repository & copy files
git clone https://github.com/sangyun-han/aws-based-data-engineering
cp aws-based-data-engineering/week-1/logstash/logstash-config-* logstash-7.16.2/config/

# check logstash-config-generator.conf
cat logstash-7.16.2/config/logstash-config-generator.conf

# run it!
./logstash-7.16.2/bin/logstash -f logstash-7.16.2/config/logstash-config-generator.conf

⇒ 임의 데이터를 count만큼 반복 생산해주는 input plugin이 내용을 path의 파일로 작성


log 파일 읽어서 저장

# reset output file
rm logstash-output-*

# check logstash-config-file.conf
cat logstash-7.16.2/config/logstash-config-file.conf

# run it
./logstash-7.16.2/bin/logstash -f logstash-7.16.2/config/logstash-config-file.conf

⇒ input.file의 내용을 읽어서 path의 파일로 저장

# open new tab
# write data into input.file
echo "1" >> input.file
echo "blahblah" >> input.file

# check output
cat logstash-output-YY_MM_dd_HH.log
  • logstash가 꺼진 상태에서 input.file에 기록된 내용도 logstash 재실행시 업데이트 된다.

filter plugin 테스트

# reset input, output file
rm input.file
rm logstash-output-*

# check logstash-config-filter.conf
cat logstash-7.16.2/config/logstash-config-filter.conf

# check sample log
cat aws-based-data-engineering/week-1/apache-sample-log

# run it!
./logstash-7.16.2/bin/logstash -f logstash-7.16.2/config/logstash-config-filter.conf

Filter plugin

  • grok
  • prune
  • mutate

더 많은 플러그인이 알고 싶다면

# 다른 필터
vi logstash-7.16.2/config/logstash-config-filter.conf

filebeat → logstash 연동

# check logstash-config-filebeat.conf
cat logstash-7.16.2/config/logstash-config-filebeat.conf

# run logstash
cd logstash-7.16.2/config
~/logstash-7.16.2/bin/logstash -f logstash-config-filebeat.conf

⇒ port 5044번으로 logstash를 열었다. output path는 따로 지정하지 않았기에 저장되진 않는다.

# check filebeat.yml & copy
cat aws-based-data-engineering/week-1/filebeat/filebeat.yml
cp aws-based-data-engineering/week-1/filebeat/filebeat.yml filebeat-7.16.2-linux-x86_64
chmod go-w aws-based-data-engineering/week-1/filebeat/filebeat.yml

# run it
cd filebeat-7.16.2-linux-x86_64
./filebeat run -e filebeat.yml

⇒ home에 있는 input.file을 읽어서 logstash가 있는 localhost:5044로 output


지속적인 로그 수집 실습

⇒ 실제로 로그가 계속 찍히는 환경을 가정하기 위해, 무한루프문으로 문자열을 계속 input.file로 날려주자

for ((i=0; ;i+=1 )); do echo $i >> input.file;sleep 1; done


💡 **실습 종료 후엔 반드시 AWS 자원 정리할 것!**
profile
자기계발 중인 신입 개발자

0개의 댓글