본문 바로가기
server

fluentd와 함께하는 검색 데이터 수집

by Younji! 2019. 6. 26.

원글 : https://dailyhotel.io/fluentd%EC%99%80-%ED%95%A8%EA%BB%98%ED%95%98%EB%8A%94-%EA%B2%80%EC%83%89-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%88%98%EC%A7%91-b76932a8dc2a

 

fluentd와 함께하는 검색 데이터 수집

안녕하세요. 주니어 개발자 Anny입니다.

dailyhotel.io

검색 데이터를 Fluentd로 수집하여 이를 시각화하고 분석을 진행하고 있는 과정 및 중간 작업 결과를 포스팅합니다.

현재 데일리는 여러 채널을 통해 데이터가 수집하고 있습니다. 검색 관련 데이터는 GA를 통해서 분석하고 있습니다. 그를 위해선 매번 엄청난 쿼리를 생성해서 실행하는데 언뜻보기에도 복잡하고 반복되는 작업임을 눈으로 확인했습니다.

그리하여..

 

이미 Kafka와 ES로 fluentd Plugin으로 이벤트 / 로그 수집을 하고 있는데 fluentd 에 대한 안정성에 대해 보장이 되어 있기에 무리없이 다시 활용하게 되었습니다. (시행착오에 관한 팁도 들을 수 있었습니다. 🙏)

포스팅되어있는 느린 쿼리 분석하기 에서 읽어보실 수 있습니다.

아래와 같은 작업을 진행 중입니다.

  • Restful API 서버에서 이벤트 방식의 데이터 퍼블리싱
  • Kafka -> MySQL 로 수집(Superset 으로 통계 분석)
  • Kafka -> ElasticSearch 로의 수집(스마트 리포트로 정기적으로 noti)

위에서 언급한 것처럼 MySQL과 ES로 데이터를 보내기 위해서 서버에서 Kafka로 필요한 데이터를 send할 이벤트 정의 후에 두 가지 플러그인을 docker 에 올려 수집했습니다.

 

uken/fluent-plugin-elasticsearch

Contribute to uken/fluent-plugin-elasticsearch development by creating an account on GitHub.

github.com

위의 설정 파일을 보면 fluentd 의 대략적인 이벤트 흐름이 보이실 겁니다.

설정 파일을 보면 fluentd 의 대략적인 이벤트 흐름이 보이실 겁니다.

https://docs.fluentd.org/v0.12/articles/buffer-plugin-overview

Input 데이터를 정의해서 받은 데이터를 사용자가 작성한 규칙에 의해서 필터링하여 Output 으로 이벤트 데이터를 라우팅해줍니다.

fluentd 에선 데이터를 buffer 에 담아서 처리하는데 buffer 를 구성하는게 chunk라는 단위입니다. Output 할 bottom chunk가 실행되면 새로운 chunk가 큐에 쓰여집니다. 실패하면 새로운 chunk가 버퍼 안에 푸시되지 못합니다.

실제로 데이터를 받다가 Output할 데이터를 처리하다 오류가 발생을 하였는데 retry 를 일정 시간동안 반복하게 되는데 default 시간이 이틀이었나.. 한번 잘못된 데이터가 들어오면 파리지옥처럼 헤어나오질 못해 buffer 태그에 이벤트들을 수정하는 작업을 필요로 했습니다. 물론, 로깅이 필요하다면 에러로그를 stdout으로 확인하거나 파일을 생성하여 확인할 수 있습니다.

 

Superset

 

데이터를 수집해서 일정부분 정제하는 과정까지는 비교적 간단합니다. 당연하지만 실제 프로덕트에서 새로운 서비스를 도출하거나 서비스를 보다 쉽게 운영하는데 있어 효과적인 접근 방법을 찾을 수 있는 데이터로 분석하는 과정이 중요하다고 생각합니다.

댓글