2022년/Developement

logstash + aws + twitter 데이터 수집 # 1

위지원 2022. 3. 15. 16:51

http://slides.com/openstack/sktechx11th 를 보고 공부한 내용입니다 🙄

 

사전 작업: aws, twitter 가입 :)

 

1. 트위터 앱 생성하기

아래 링크로 이동하면 트위터 앱을 어렵지않게 만들 수 있다. acess token이 생성된다. 잘 메모해두자. 

잘 메모해두자!

 

Use Cases, Tutorials, & Documentation

Publish & analyze Tweets, optimize ads, & create unique customer experiences with the Twitter API, Twitter Ads API, & Twitter Embeds.

developer.twitter.com

 

2. AWS EC2에서 인스턴스 생성하기

인스턴스를 생성하고 나면 ssh-key를 다운로드할 수있다. 잘 저장해두자 

 

아마존 클라우드 서버 호스팅 | Amazon Web Services

Amazon Elastic Compute Cloud(Amazon EC2)는 500개가 넘는 인스턴스, 그리고 최신 프로세서, 스토리지, 네트워킹, 운영 체제 및 구매 모델의 옵션과 함께 워크로드의 요구 사항에 가장 잘 부합할 수 있도록

aws.amazon.com

 

*N.  ssh 접속 후 key 옮기기.. 

여기서부턴 나의 추가작업이다. 나는 윈도우 환경에서 ubuntu on window를 다운받아서 사용한다 :)

더보기

 

- ssh 서비스를 실행시켜준다.

$ service ssh start

* permission denied(publickey) 가 뜨는 경우 /etc/ssh/sshd_config 에서 PasswordAuthentication을 no에서 yes로 변경해준다. 

 

- filezila를 이용해서 ubuntu on window로 twitter에서 받은 ssh-key.pem을 옮겨준다. 

 

3. AWS EC2에 접속하기

AWS EC2에 가서 인스턴스 하나를 누르면 public 주소가있다.  아까 다운 받은 ssh key와 이 주소를 이용해 쉘에서 접속한다. 

$ ssh -i ssh-key.pem ubuntu@xx.xxx.xx.xxx

 

3-1. JDK 설치하기

$ sudo apt-get update
$ sudo apt-get upgrdae
$ sudo apt-get install openjdk-11-jdk

 

5. 본 사이트를 기반으로 logstash 설치

(시기에 따라 아래 내용이 구버전일 수 있기에 본 사이트 접속해서 하는것이 따봉👍)

$ wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
$ sudo apt-get install apt-transport-https
$ echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
$ sudo apt-get update && sudo apt-get install logstash

 

6. 데이터 생성

이 블로그 에서 설명한 바에 의해 conf 파일이 바뀌면 자동으로 다시 로드할 수 있도록 변경

/etc/logstash에 가면 logstash-sample.conf가 존재한다. 이를 copy해서 수정한다! 

이름은 twitter등을 붙여 변경해도된다.  /etc/logstash/pipeline.yml에 보면  conf 아래 .conf 확장자는 모두 실행되도록 되어있는 것을 확인하면 이해할 수 있다 :) 

 

사용할 키는 아래 두가지다 이를 아래 input key로 넣어주면 된다. 

input {
  twitter {
    consumer_key => "5Vwx위지원h"
    consumer_secret => "7k1gKYT의 블로그H1veK34Ym0eMq5TCPfZcnYc4v"
    oauth_token => "14999541943208맨날Lm"
    oauth_token_secret => "bnHCgK8bq삽질만 하지용jI"
    keywords => ["russia"]
    full_tweet => true

  }
}

output {
  file {
    path => "/tmp/twitter-%{+YYYY-MM-dd}.json"
    codec => json_lines
  }
}

 

실행은 다음과같이 한다. (처음에 가이드문서에 sudo service logstash start를 하라고 하셨는데 오류나서 프로세스 터질뻔하..물론 내가 conf를 잘못짰다 ,,여담으로 어떻게 잘못짰냐면 input{ 이 부분에 i 앞에 띄어쓰기가 있었다 ㅡㅡ;;)

sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/logstash-twitter.conf

 

그럼 아래와같이 로그가 뜨고.. 

[INFO ] 2022-03-17 07:41:01.476 [[main]-pipeline-manager] javapipeline - Pipeline started {"pipeline.id"=>"main"}
[INFO ] 2022-03-17 07:41:01.531 [[main]<twitter] twitter - Starting twitter tracking {:track=>"russia"}
[INFO ] 2022-03-17 07:41:01.683 [Agent thread] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[INFO ] 2022-03-17 07:41:04.975 [[main]>worker0] file - Opening file {:path=>"/tmp/twitter_file.2022-03-17.json"}

 

해당 파일을 보니 데이터가 무지많이 쌓여있다. 

 

References

https://investechnews.com/2021/07/12/ssh-permission-denied-publickey-%EC%A0%91%EC%86%8D-%EC%98%A4%EB%A5%98-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0/