AI/Projects

[Elastic Search] 트위터 데이터 실시간으로 수집, 시각화하기

Cori 2021. 10. 31. 13:20

개요

ELK (Elastic Search, Logstash, Kibana)를 이용하여 트위터 데이터들을 실시간으로 수집하고, 동적으로 시각화해본다. 

 

설계

1. Twitter API key 발급

0) Twitter developer 가입

-> Twitter의 트윗를 수집하기 위해서는 Twitter API Key가 필요하다. 이에 다음 포스팅을 참고하여, Twitter API Key를 발급받았다.

 

트위터 API 사용을 위한 준비 (개발자 신청 및 Consumer Key, Access Token 발급) - 아무튼 워라밸

트위터 API를 사용하기 위해서는 개발자 신청, 등록을 하고 Consumer Key, Access Token을 받아야 한다. 최근에 절차가 좀 까다로워졌던데 이 기회에 다시 신청하면서 절차를 정리해봤다.

hleecaster.com

1) API Key 신청

위 대시보드에서 API Key, API Key Secret, Access Token, Access Token Secret 총 4개의 인증 값을 발급받아야 한다.

 

2. Windows에 Elastic Search, Kibana, Logstash 설치

->  Kibana는 버전 7이상부터 많은 시각화 기능을 제공해 주기 때문에, Elastic Search, Kibana, Logstash 모두 7.14버전을 다운받는다. 

 

* 다운로드 링크 첨부

 

Past Releases of Elastic Stack Software

Looking for a past release of Elasticsearch, Logstash, Kibana, es-hadoop, Shield, Marvel, or our language clients? You're in the right place.

www.elastic.co

3. logstash conf 파일 생성 - logstash-twitter.conf

settings Input type Required
consumer_key string  Yes
consumer_secret password Yes
follows  array No
full_tweet boolean No
ignore_retweets boolean No
keywords array No
languages array No
locations string No
oauth_token string Yes
oauth_token_secret password Yes
proxy_address string No
proxy_port number  No
rate_limit_reset_in number No
use_proxy boolean No
use_samples boolean No

* 참고 자료

 

Twitter input plugin | Logstash Reference [7.15] | Elastic

Variable substitution in the id field only supports environment variables and does not support the use of values from the secret store.

www.elastic.co

 

4. DB 연동 ..  (X)

-> 처음 생각한 DB 연동은 Elastic Search를 통해 수집한 실시간 트윗 데이터들을 필요한 형태로 전처리하고, 이를 DB에 저장(output)하는 형태를 생각하였는데, Elastic Search는 output으로 DB를 주는 것보다 input으로 DB를 설정해서 DB에서 데이터를 가져오는 것 같다.

 

[ MySQL + ELK ] Logstash과 MySQL DB 연동하기

[Filebeat+ELK] 첫번째 로그 모니터링 서버 구축기 03. MySQL DB와 연동하기 DB에 존재하는 파일들을 Logstash를 통해 전처리하여 엘라스틱서치에 전달하는 과정의 파이프라인을 진행, 또한 최종적으로 DB

soyoung-new-challenge.tistory.com

5. 참고자료

 

[ELK] ELK 스택으로 실시간 BTS(방탄소년단) 트윗 수집하기

BTS + Elasticsearch, Logstash, Kibana

medium.com


구현

0. logstash.yml 파일 수정

-> log의 내용을 파싱하는 것은 여러 번의 시행착오를 거칠 수 있으므로 conf 파일의 파이프라인 내용은 초기 작업에서 빈번하게 바뀔 수 있는데, 그때마다 파일 변경을 하고 logstash.bat을 다시 실행하는 방식은 매우 비효율적이다. 

 

따라서, ./config/logstash.yml 설정 파일에서 다음과 같이 설정을 변경하면 3초마다 파이프라인이 지정된 conf 파일이 바뀌면 자동으로 다시 로드되도록 설정할 수 있다. 

logstash.yml 파일

더보기

config.reload.automatic true 

config.reload.interval: 3s

 

1. logstash-twitter.conf 파일 수정

-> logstash에서 트윗 데이터를 실시간으로 수집하기 위해, 다음과 같이 logstash의 conf 파일을 수정해 주어야 한다. 

logstash-twitter.conf

· logstash 수집 demo

"netflix" Keyword에 대해 트윗에서 실시간으로 수집한다. (멈춰있는 것으로 보이지만, Kibana 대시보드에서 /cat/indices 쿼리를 날려보면 인덱스가 생성되었고, 제대로 수집되고 있는 것을 확인할 수 있다) 

 

* 수집중인 logstash 영상 추가

 

2. 수집한 실시간 트윗 데이터 분석

0) 수집 데이터 정보 조회

1) hashtags 키워드 분석

2) 트위터 메시지 조회

3) 트위터 사용자 언어(language) 분석

4) 트위터 사용자 지역(location) 분석

5) 트위터 사용자 지역, 언어 교차 분석 (langauge, location)

6) Dev Tool에서 Index 조회

* 기본적으로 설정된 트윗들을 사용하여 geo data를 수집하는 방법을 찾지 못해, 다른 방법을 시도해본다. 


3. 트위터 실시간 트윗에 대한 geo data 분석

0) method 1: logstash.conf 파일 수정

-> logstash를 통해 실시간 트윗들을 수집할 때 full_tweet = true / false로 설정해도 geodata가 수집되지 않아 conf 파일을 바꿔보았다. 해당 코드를 수행하려면 Kibana에서 Template를 만들어 주어야 하는데, 애를 먹고 있는 상황

1) method 2: re-indexing 수행

-> 다음 포스팅에 해당 과정을 정리해두었다.. 결론은 실패 ㅜㅡㅜ

 

[ELK] 트윗 실시간 데이터 수집, 분석 (위치 정보 사용)

[개요] Twitter Input Plugin을 통해 수집한 트윗들은 geo data를 포함하고 있지 않아, re-indexing을 통해 geo data를 가져오도록 설정하는 방법에 대해 다룬다. * 해당 포스팅은 다음 내용을 참고하여 작성하

cori.tistory.com