개인프로젝트/twitter 실시간 데이터 프로젝트(ELK stack)

실시간 데이터 프로젝트 회고

장경훈 2022. 11. 10. 17:33

*github repo 주소

https://github.com/kyounghunJang/twitter_streaming_project

 

처음으로 개인 프로젝트를 완성시켜서 너무 뿌듯한 느낌이 들었다. 아직 많이 부족하지만 그래도 조금은 이런 프로젝트들의 흐름이라고 해야 할까? 어떤 방식으로 구성해야 하는지 큰 그림을 구성하는 게 다음 프로젝트 때는 조금 더 수월할 것 같다. 이번 프로젝트를 하면서 내가 힘들었던 부분, 성공적으로 한 부분을 한번 KPT회고로 작성해보려 한다.

*KEEP

  • logstash에서 중복관리를 위해 fingerprint 옵션을 사용했는데 매우 간편하고 중복 관리가 잘 돼서 좋았다.
  • ELK stack을 사용해서 구축하다 보니 파이프라인을 구축하는데에 큰 어려움이 없고 확실히 이런 프로젝트에서는 접근성이 뛰어난 것 같아서 다음에도 이런 비슷한 프로젝트를 한다면 ELK stack을 고려해볼 것 같다 
  • docker를 사용해서 인프라를 구축하니 설정에서 문제가 생긴 부분을 즉각적으로 수정할 수 있고 각각의 컨테이너에서 실행되다 보니 어떤 부분이 문제인지 직관적으로 볼 수 있어서 좋았다.

*Problem

  1. ELK stack 을 처음에는 7.10 버전으로 구축했으나 7.10 버전은 pytorch를 이용한 머신러닝 모델을 불러올 수 없는 문제가 발생했다.
  2. docker-compose를 구성할때 처음에는 ip를 단순히 bridge로 설정했었는데 ip가 고정되지 않고 변경되는 현상이 발생하여 ELK stack 간의 통신이 안 되는 경우가 발생
  3. twitter api가 v2로 변경되면서 logstash로 바로 input받을 수 없는 에러 발생 
  4. python으로 streaming 데이터를 받아서 저장시켜서 전송하는 형태로 만들었는데 twitter streaming 데이터 자체가 중복 데이터가 많이 존재함. 이 모든 것을 data로 저장하다 보니 용량을 많이 사용하게 되는 문제 
  5. word cloud를 시각화 할때 불용어가 같이 집계되어 정확도가 많이 떨어지는 현상 발생

*Try

  1. ELK stack을 8.4.2(가장최신버전)으로 docker 환경에서 새로 구축하여 머신러닝 모델을 불러오게 했다.
  2. docker-compose에서 network를 직접 생성하여 각각의 컨테이너에 고정 ip를 적용시켜 ip변동으로 인한 통신에러가 발생하는 현상을 막았다.
  3. 처음에는 twitter api v1.1으로 생성하여 logstash로 받는 방법을 시도해봤으나 어떤 이유에서인지 정상적으로 작동하지 않았다. 결국 많은 구글링을 통해서 얻은 결론은 python으로 데이터를 저장시켜 ELK stack으로 전송시키는 방법이 프로젝트를 완성시킬 수 있는 방법이라고 생각되었고 이 방법을 사용했다.
  4. 4번째 문제는 어떤 방식으로 해결해야 할지 아직도 의문이다.. 이미 elasticsearch에 중복을 제외하고 저장되어 있으니 특정 기간에 한 번씩 data 파일을 삭제하는 게 맞는 것인지. 하지만 만약에 삭제하게 된다면 혹시나 elasticsearch에서 문제가 생겨 데이터가 날아가게 된다면 문제가 발생한다고 생각한다. 현업자들은 이런 경우에 어떻게 효율적으로 관리하는지 궁금하다. 
  5. nori tokenizer plugin을 다운받아 형태소 분석을 하여 필요 없는 불용어를 제거하는 template를 만들어 날짜별로 생성되는 인덱스에 적용시켰다. 또한 이 경우에 기존 data 필드에 적용시키면 시각화한 data table이 단어로 끊어지는 문제가 생겨 새로운 필드인 token_data필드를 만들어 적용시켰다.

 

 

*마무리

처음으로 개인 프로젝트를 진행하다보니 내가 처음에 생각했던 구현 방향이 많이 부족했고 또 구현하는 과정에서도 여러 가지 오류들을 만나고 이런 오류들을 해결하기 위해서 많은 시간이 필요했다. 그래도 이번에 많은 시간을 투자하면서 해결했던 문제들은 다음번에 또 만난다면 쉽게 해결할 수 있겠다는 자신감이 생긴 것 같다. 사실 이 프로젝트도 처음 시작할 때는 그냥 단순하게 ELK stack으로 데이터만 시각화하려 했으나 뭔가 욕심이 생겨서 머신러닝도 넣어보고 했는데 시간은 더 걸렸지만 이렇게 프로젝트를 하니까 확실히 더 뿌듯한 느낌이 드는 것 같다. 일단 처음 목표했던 docker로 구축한 프로젝트는 나름 성공적으로 끝냈고 추후에 kubernetes를 공부해서 이 프로젝트의 인프라를 새로 구축해서 한번 구동해봐야겠다!