본문 바로가기

Big Data/Elastic stack

geoip 데이터 지도에 표시하기


elasticsearch의 데이터 타입중 geoip가 있다. 이 데이터는 kibana에서 지도에서 표시가 가능하다.

apache-access로그의 client IP를 통해 지도에 데이터를 표시하는 예제를 만들어 보자



121.160.132.126 - - [30/Jan/2017:14:24:02 +0530] "GET /index HTTP/1.1" 200 200


common 패턴의 apache access 로그이다. 여기에있는 client IP를 통해 geo_point 데이터를 추출해 Kibana를 통해 지도에 표시해보자


apache access 로그 설정은 아래 글을 참조하면 된다.

http://gyrfalcon.tistory.com/entry/Apache-Tomcat-access-log-%EC%84%A4%EC%A0%95


1. Logstash

logstash의 config파일을 다음과 같이 작성한다. input은 간단히 stdin으로 입력을 받자

그리고 grok을 통해 binding한다. clientip 로 ip가 들어온다. 이 데이터를 geoip를 통해 매핑할 수 있다.

output은 localhost로 미리 세팅해 놓았다.

이제 logstash를 실행하자.


sudo bin/logstash -f logstash-geoip.conf


아래 elasticsearch 설정을 하고 log 데이터를 입력해보자


2. Elasticsearch Mapping


index template를 등록해 내가 geoip.location의 type을 geo_point로 매핑하자.

위 template에 대한 설명은 생략한다. 나도 지금공부단계라 자세히는 모른다.

다른 예제에는 CURL로 되어있는데 난 참 불편하다. 그래서 insomnia 라는 앱을 사용했다. 참 편하다

localhost:9200/_template/access 로 template를 등록한다. access-* 로 index 패턴을 등록했기 때문에 위에서 설정한 access-YYYY.MM.DD 인덱스가 만들어졌을 때 자동으로 매핑된다.




3. 데이터 입력


위에서 실행한 logstash에 아래 로그를 입력하자


121.160.132.126 - - [30/Jan/2017:14:24:02 +0530] "GET /index HTTP/1.1" 200 200



4. Kibana를 통해 지도에 표시


index patterns에 logstash에서 설정한 index대로 access-*를 설정하자.



geoip 데이터가 잘 들어왓는지 discover 페이지를 통해 확인해보자



이제 지도에 표시해보자.

vosualize 페이지에 Tile Map을 선택한다. index pattern을 access-*를 선택하고 geo_point 컬럼을 지정한다.

elasticsearch template에 설정한대로 geoip.location을 지정한다.

그림 아래 같이 지도에 잘 표시가 된다.