Hello World

[펌]ELKR (ElasticSearch + Logstash + Kibana + Redis) 를 이용한 로그분석 환경 구축하기 본문

Back-End/좋은글

[펌]ELKR (ElasticSearch + Logstash + Kibana + Redis) 를 이용한 로그분석 환경 구축하기

EnterKey 2016. 1. 10. 00:00
반응형

큰 서비스들을 운영하는 회사들은 자체적인 로그 수집, 정제, 분석 솔루션들을 가지고 있거나 대용량 ES Cluster, Hadoop Cluster 등을 운영한다.

하지만 초기 스타트업은 한치앞을 내다 볼 수 없기때문에 최소 비용으로 최대의 효과를 낼 수 있는 여러 오픈소스들을 조합하여 잘 사용해야한다.

초기에 크지 않은 비용으로 간단하게 로그분석 환경구축을 하고, 이후 서비스가 성장하면서 시스템이 커질 경우 비교적 용이하게 Scale Out 해 나갈 수 있는 ElasticSearch와 Redis를 이용해서 로그 분석 시스템을 구성해보자.

이글은 ElasticSearch와 RedisLogstashKibana등에 경험이 많지않은 개발자를 대상으로 설치, 및 설정, 실제 실무에서의 적용 방법등을 간략하게 소개 해보려 한다.

구성은 다음과 같다

elk

로그 데이터의 흐름은 다음과 같다.

  1. Nginx 는 각각의 물리적인 3대의 서버에서 구동된다고 가정하자.
  2. 각 서버에는Nginx의 로그를 수집하기 위한 Logstash가 동작한다.
  3. 다량의 로그가 빠르게 쌓일 경우를 대비해 Redis를 중간데이터 수집 Queue로 사용한다.
  4. Redis에 쌓인 로그들을 ElasticSearch에 적재하는 Indexer Logstash가 동작하면서 Redis로그를 ElasticSearch로 적재한다.
  5. 적재된 로그들은 Kibana와 SQL 플러그인 등으로 Visualization & 분석 할 수 있다.

 

자 이제 설치를 해보자. 나는 2015-12-10일 기준 최신 버전들로 설치했다.

  • ElasticSearch : 2.1.0
  • Logstash : 2.1.0
  • Kibana : 4.3.0
  • Redis 3.0.5

 

1. ElasticSearch 설치

Standalone 설치는 매우 간단하다.

정상적으로 실행 된 상황이라면 http://localhost:9200 으로 접속 했을 때 간단한 health 정보가 표시된다.

 

2.ElasticSearch 플러그인 설치

 

ES에는 아주 훌륭한 플러그인들이 많이 있는데, 나는 주로 2가지를 필수로 설치한다.

ElasticHQ : https://github.com/royrusso/elasticsearch-HQ

기존에 Head라는 플러그인을 썼는데 UI가 조금 마음에 들지 않아서 다른 것을 찾던중 깔끔한 UI에 Head보다 좀더 자세한 정보들을 보여주고 있는 HQ를 Head대신 최근에는 쓰고 있다.

Screen Shot 2015-12-10 at 11.52.13 PM

ElasticSQL : https://github.com/NLPchina/elasticsearch-sql

ES내에 있는 JSON Document를 SQL로 검색 할 수 있는 플러그인이다. SQL에 익숙한 개발자가 대부분이다보니 매우 쉽고 간편하게 SQL을 이용해 ES 데이터를 분석 할 수 있다.

Screen Shot 2015-12-11 at 12.00.08 AM

3.Kibana 설치

기본설정으로 Kibana를 실행하면 localhost:9200으로 ES에 접속된다.

http://localhost:5601로 Kibana에 접속해보자

Screen Shot 2015-12-11 at 12.30.14 AM

4.Redis 설치

CLI 상에서 info가 나오면 서버가 정상적으로 실행 된 것이다.

5.Nginx 로그 설정

이제 Nginx Log Format을 ElasticSearch에 적재하기 용이한 JSON Format으로 설정해보자.

nginx.conf를 vi 에디터 등으로 열고 다음과 같은 설정을 추가한다.

그리고, AccessLog를 설정하는 어딘가에, log를 찍도록 표시한다. 나는 다음과 같이 설정했다.

nginx를 재시작하고 로그가 JSON Format으로 쌓이는지 확인해보자.

Screen Shot 2015-12-11 at 2.01.53 AM

기대했던대로 JSON Format의 로그가 쌓이고 있다.

6. Collector Logstash 설치

이제 Nginx가 JSON 형태로 저장하는 로그를 Redis에 적재하는 Logstash를 설치해보자.

logstash가 로그를 수집, 적재 할 수 있도록 설정파일을 만들어준다.

Log 파일의 Input, Output에 대한 설정과 더불어 filter를 통해 ip정보를 기반으로 Geo Location 정보를 추출 할 수 있는 geoip 플러그인을 연결 했다.

Logstash를 실행하고, Redis에 로그가 적재되는지 확인해보자.

편의상 rdm을 통해 JSON을 한번 살펴보자

Screen Shot 2015-12-11 at 3.29.47 AM

Nginx가 남긴 로그와 함께 GeoIP 플러그인이 추가한 geoip 정보도 JSON으로 Redis 에 잘 저장이 되어 있다.

7. Indexer Logstash 설치

이제 Redis에 쌓인 로그들을 ElasticSearch로 Indexing 하는 Logstash를 설정해보자.

Indexer Logstash는 편의상 ElasticSearch가 설치된 서버에 함께 설치했고, 위와 같이 logstash.conf 파일을 생성했다.

실행 후 Redis에 있던 로그들이 ElasticSearch로 적재 되었는지 Kibana에 접속해서 확인해보자.

Screen Shot 2015-12-11 at 3.38.53 AM

잘 적재되었다. 이제 이 로그들을 통해 간단한 2개의 통계 정보를 만들어보자.

 

1) Nginx에 접속자들의 위치를 지도상에 표시 해보자

  • Visualize => Tile Map 선택 후 다음과 같은 검색 조건으로 설정

Screen Shot 2015-12-11 at 3.42.31 AM

현재 로그상에 있는 IP들이 모두 한국이다보니 한국쪽에 빨간점으로 표시가 되었다.

 

2) Browser Agent별로 접속 통계를 보자

  • Visualize => Vertical bar chart를 선택 후 다음과 같은 검색 조건으로 설정Screen Shot 2015-12-11 at 3.48.11 AM

8. 정리

클릭 몇번이면 Kibana에서 ES에 있는 데이터를 효율적으로 Visualization 할 수 있고, SQL Plugin을 사용해서 SQL 구문으로 통계 데이터를 추출 할 수도 있다.

따라서 초기 스타트업이라면 ELKR(ElasticSearch, Logstash, Kibana, Redis)를 사용해서 필요한 지표는 충분히 추출 가능 할 것으로 생각된다.

Logstash의 설정을 조금만 변경하면 Tomcat, Ruby 등의 WAS Log 또한 Logstash로 수집하여 에러가 발생하거나, 혹은 지표추적을 위해 남겨놓은 로그데이터들을 수집해서 장애알람 시스템이나, 지표추적 시스템으로도 사용 할 수 있다.

또 새롭게 서버를 늘려 나갈 때 마다 Nginx설치, Logstash설치 및 설정과 같은 반복적인 작업들은 Ansible과 같은 툴을 이용해 자동화 하면 서비스를 확장하는데 있어서 많은 비용과 시간을 줄일 수 있다.


추가 참고 슬라이드: http://www.slideshare.net/JeminHuh/spring-boot-backend

출처: http://brantiffy.axisj.com/archives/418

반응형
Comments