Logstash twtitter input plugin으로 트위터 데이터 수집

스르륵·2022년 8월 18일
0

데이터파이프라인

목록 보기
9/10
# logstash_twitter.conf

input {
  twitter {
    consumer_key => "<API KEY>"
    consumer_secret => "<API SECRET>"
    oauth_token => "<ACCESS TOKEN>"
    oauth_token_secret => "<ACCESS TOKEN SECRET>"
    keywords => ["코로나19"]
    languages => ["ko"]
  }
}

filter {
  mutate {
    gsub => [
      "message", "@[^ ]+", "@*****"
    ]
  }
}

output {
  elasticsearch {
    hosts => ["https://172.19.0.2:9200"]
    index => "twitter_ko"
    user => "elastic"
    password => "password"
    ssl => true
    cacert => "/usr/share/logstash/http_ca.crt"
  }
}

로그스태시의 트위터 플러그인을 사용해 직접 트위터 데이터를 수집할 수 있었다.
먼저 트위터 개발자 페이지에서 필요한 ACCESS_TOKEN과 API_KEY 등을 발급받고 입력하면 준비 끝.
그리고 수집하고자 하는 키워드와 언어를 선택해서 넣어주면 자동으로 수집해준다.


필터 부분에서는 멘션된 아이디를 마스킹하는 부분을 추가했다.

마지막 output에서는 수집한 데이터를 엘라스틱서치로 저장하도록 했다.

엘라스틱서치로 데이터를 저장할 때 몇 가지 에러 때문에 헤맨 부분이 있다.

  • SSL 설정
  • 도커 컨테이터 사용으로 인한 hostname 설정

SSL 설정

이전에는 7.9 사용할 때는 ssl 설정을 따로 하지 않으면 켜지지 않았고, user/password만 넣어주면 잘 연결되고 데이터를 저장할 수 있었다.
하지만 8.1 버전 이후로 ssl 설정이 기본적으로 설정되어 cacert 설정을 위한 crt파일이 필요했다. 그리고 자잘한 부분이었지만 ssl 설정을 켰기 때문에 host 주소 역시 https를 사용해야 했다.

Docker 관련 이슈

마지막으로 도커 컨테이너를 사용해서 ELK를 설치했기 때문에 hostname을 단순히 localhost로 넣으면 연결이 불가능했다. 컨테이너의 ip주소를 넣어서 연결할 수 있었다.

한글 형태소 분석기 설치

# 엘라스틱서치 컨테이너 접속 후...
./bin/elasticsearch-plugin install analysis-nori


코로나19를 형태소 분석기를 통해 코로나와 19로 토큰화 할 수 있게 됐다. 이전에는 코로나로 검색하는 것과 코로나19로 검색하는 것에서 차이가 있었지만 이제 같은 결과를 얻을 수 있을 것이다.
하지만 기본적으로 영어 기반의 형태소 분석기가 적용되기 때문에 우리가 설치한 노리 분석기를 사용하려면 인덱스 매핑을 새로 해야하지만 그것을 불가능하다. 따라서 새로운 인덱스로 다시 인덱싱하는 reindex API를 사용한다.

korean analyzer를 nori_tokenizer로 설정하여 새 인덱스의 매핑을 만들었다. 그리고 리인덱싱을 실행하여 총 143개의 도큐먼트가 리인덱싱 되었음을 확인할 수 있다. 키바나에서 새 인덱스를 사용하기 위해 data veiw를 만들어준다. (인덱스 패턴이 데이터 뷰로 이름이 바뀜)

코로나로 검색해도 코로나19가 들어간 트윗이 다 나오는 것을 볼 수 있다.
(트윗이 다 같은 이유는 많은 사람들이 리트윗을 한 것 같다..)

실시간 데이터 시각화

트위터에서 발생하는 임의의 데이터를 수집하고 시각화 해볼 것이다.

트위터 플러그인에서 use_samples를 통해 임의의 트윗을 수집하도록 했다. 한국어만 가능할까 싶어 languages를 넣어봤지만 적용되지 않는 것 같다.

시각화 중 Tag Cloud를 사용해봤다. word cloud라고 많이 봤었는데 키바나에서는 Tag cloud라고 하나보다.

오른쪽에 보이는 설정대로 해주면 해시태그를 카운트하여 상위 20개의 해시태그를 보여주게 된다.

profile
기록하는 블로그

0개의 댓글