brunch

You can make anything
by writing

C.S.Lewis

by 핑크곰 Apr 28. 2020

Logstash에서 REST API 연동하기

Logstash에서 REST API를 연동하여 데이터를 수집하는 방법을 정리한다.            



Logstash에서 REST API를 연동하기 위해서는 http_poller 플러그인을 사용한다.


라고 되어있지만... 막상 사용해 보면 생각보다 제약조건이 많기 때문에 제대로 된 REST API 데이터 수집이 불가하다. 이는 input 플러그인에서 특정 정보를 동적으로 변경하는 것이 어렵기 때문이다.(불가한 건 아니지만 배보다 배꼽이 더 크다;;)


가령, 일자별로 미세먼지 정보를 제공하는 API가 있다고 가정하자. http_poller에서 해당 API를 사용하기 위해서는 파라미터로 일자 정보를 설정해줘야 한다. 고정된 날짜 정보를 설정해주는 건 가능하지만 오늘 날짜를 가져와서 파라미터로 설정하는 건 현재 버전의 logstash에서는 불가능하다.


input에서 OS 환경변수 값을 가져올 수 있기 때문에 이를 활용하는 방법을 엘라스틱 커뮤니티에서 안내하기도 하는데, 주기적으로 호출이 일어나는 상황에서는 이마저도 쉽지 않다.


고민 끝에 필자가 적용한 방법은,
더미 http_poller를 사용하여 주기적 호출을 수행하고 실제 REST API의 호출은 필터에서 http 플러그인을 사용하는 방식이다.           


무의미한 호출이 한번 일어나기 때문에, 이는 비용의 낭비로 볼 수 있다. 하지만 현재로서는 이 방법이 가장 명확해 보인다.


ruby 플러그인을 사용해서 변수(yesterday)에 값(어제 날짜)을 설정했고, 이를 http 플러그인에서 동적 파라미터로 활용했다. 다양한 파라미터를 이렇게 설정하여 호출할 수 있다. 그밖에, 반환된 JSON 데이터를 분리하기 위해 split 플러그인을 사용했고, kibana에서 사용하기 위해 totalcount의 타입을 숫자로 변경했다.

이때, mutate 플러그인을 두 개로 나눠서 사용한 이유는 필터 내부의 순서를 보장할 수 없기 때문에 타입 전환이 정상적으로 일어나지 않기 때문이다.      




ps. REST API 호출 결과를 DB에 저장해서 jdbc 플러그인으로 가져올 수도 있겠지만, 본 글에서는 HTTP 호출을 통한 직접 수집을 목표로 했다. 독자분들께서 더 좋은 방법을 알고 계시다면, 댓글로 소통 부탁드린다.


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari