Nginx, GeoIP, Telegraf, Influxdb, Grafana 연동!
- 꼬반
- 2017. 8. 3. 09:56
회사에서 사용하고 있는 웹 서비스의 구성은 간단하게 다음과 같다.
Nginx (리버스 프록시 서버) --- WAS (각 어플리케이션 서버) --- 백엔드 (DB, 스토리지 등)
여기서 유저는 가장 상단의 Nginx 서버에만 접근이 가능하다. 이러한 구성은
기본적으로 보안이나 관리 등에 용이하다.
그리고 각 서버들의 상태 모니터링 및 로그 수집을 위해 2가지 시스템을 혼용하여 사용하는데
ELK 와 TICK 이 바로 그것이다.
ELK는 Elasticsearch, Logstash, Kibana 를 지칭하는데 과거 버전에서 5.x 버전으로
업그레이드를 하면서 이 로그 수집방식이 Logstash-forward 대신에 beat 로 대체 되었다.
그래서 각 단말에 beat가 서버의 로그를 수집하여 Elasticsearch 로 보내고 저장되며 Kibana를 통해
모니터링 및 대시보드를 통한 Visualize 가 가능하다.
Elasticsearch 와 Kibana 는 Docker와 Docker-composer 를 통해 관리된다.
TICK 은 Telegraf, Influxdb, Chronograf, Kapacitor를 의미하며 각각 수집, 시계열DB, 모니터링 및 관리, 알람
의 기능을 가지고 있다.
그리고 이 데이터들은 Grafana 라는 Visualize platform 에서 활용이 가능하다.
이번에 한 작업은 다음의 목적을 가지고 진행되었다.
1. 특정 사이트의 접속 로그에 대한 모니터링이 필요
2. 접속 지역에 대한 확인이 가능할 것.
3. Nginx access log 에는 기본 apache log + agent, response time 이 붙은 custom log 이며 접속자의 IP가
확인이 된다. 이 IP를 IP조회 사이트에서 조회하여 지역이 확인이 가능하나 불편하다.
4. Dashboard 를 통해 바로 확인할 방법이 필요.
그래서 위의 목적을 달성하기 위해 다음과 같은 작업을 진행 하였다.
1. 기존 리버스 프록시 서버인 Nginx 서버에 GeoIP Module 연동
1.1. nginx-module-geoip 를 설치
1.2. 설정 파일에 load module 후 테스트 -> 로드 X (버전 문제 nginx geoip version 1013003
instead of 1013000, 즉 현재 nginx 는 1.13.0 버전 이고 모듈은 1.13.3 버전
1.2. 기존 사용하던 1.13.0 버전을 1.13.3 버전으로 재컴파일 (rpm, yum 버전 등 build 버전은 사용하지 않음
http2 지원등을 위해 직접 소스 컴파일, 라이브 서버에 적용 전 VM에 테스트 후 진행)
1.3. 1.13.3 버전 설치 후 모듈 연동 테스트 -> 성공
1.4. access log 형식에 geoip_city, geoip_region, geoip_country_code, geoip_country_code2 추가 후 확인 완료
2. Telegraf 수집 형식 변경
2.1. 기존 logparse 에 grok matching 을 위해 필드 추가 적용 (country_code 는 2개 추가한 이유가 하나는 tag로
지정하기 위함.)
2.2. influxdb 에서 수집된 field, tag 에 반영 확인
3. Grafana 연동
3.1. Grafana World Map Plugin 설치
3.2. https://github.com/grafana/worldmap-panel / https://github.com/grafana/worldmap-panel/issues/30
참고하여 설정 진행
3.3. World-Map 연동 확인
총평. 진행된 내용만 간략히 적었지만 사실 각 작업간에 많은 시행착오가 있었다. 물논 그런 시행착오가 없을 순
없다. 각 작업 내용은 다시 한번 정리해서 추후 포스팅 해야겠다.