성능 모니터링(Grafana+InfluxDB) 대시보드 개발기 – 1편

서비스 장애를 최소화 하기 위해서는 서버나 네트워크 혹은 Application 등의 성능을 365일 지속적으로 모니터링해야합니다. 모니터링은 솔루션은 시중에 다양한 벤더에서 출시된 제품들이 판매되고 있습니다. 하지만, 가격이 많많치 않고 우리 서비스에 딱 맞는 적합한 솔루션을 구축하는데는 어려움이 있을수 있습니다.

 

이와 같은 상용 모니터링 솔루션외 몇개의 오픈 소스를 연동하여 모니터링을 구성하는 방안에 대하여 알아보도록 하겠습니다. 실제 저의 회사에서는 이와 같은 오픈소스로 모든 서비스에 대해서 모니터링을 하고 있으며 글을 쓰는 이 순간까지도 아무런 문제없이 잘 운용중에 있습니다.

 

오픈소스로 구성된 모니터링 구축 이유

 

  • 전체 인프라 모니터링 페이지 통합 필요, 한눈에 볼수 있는 모니터링 대시보드 필요
  • 다양한 DATA(Metric)에 대해서 그래프로 시각화 할수 있는 방안 필요 (수많은 오픈소스 모니터링이 있지만 운영자가 원하는 특정 지표에 대해 그래프로
    시각화 할때 많은 애로 사항이 있음 (예: 플러그인 미지원, 가끔 소스를 뜯어 고쳐야함 등등)
  • 오픈소스로 모니터링 개발시 운영, 향후 지원 정책, 문제 발생시 트러블 슈팅 용이 및 커스터마이징이 유연해야함
  • 완전 공짜 라이선스 정책 선택 (비용 지불해서 개발 해본 결과 만족스럽지 못함) (보통 노드수나 일부 기능 미지원등 제한이 있는 오픈소스가 대다수)
  • 노드수(모니터링 대상) 증가에 따른 모니터링 시스템 부하 처리 방안이 용이 해야함
  • 직관적이고 보기 편한 GUI 지원 (예전 RRD 방식은 구림 -> 대세는 자바스크립트 기반)
  • 실시간 문제 발생(장애)에 대한 다양한 방식의 Notification , Alert 기능 필요

 

오픈소스 Influx DATA 설명

 

Influx data 모니터링 구성 사례

 

모니터링 통합 대시보드를 구성함에 있어 몇가지 오픈소스가 필요합니다. 저희가 현재 구축하는데 사용한 오픈소스에 대하여 어떤 기능을하는지 간략하게 소개해 드리겠습니다. 동일한 기능의 다른 오픈소스를 사용해도 상관은 없습니다.

 

Telegraf

influxDB 에 metric(data)을 저장하기 위해 OS(Linux,Windows)에 설치되는 Agent
influxDB 로 저장 싶은 플러그인 선택 및 추가 삭제 가능 (예:CPU,netstat,Nginx,Mysql 상태 등)
Metric 수집 최소 1초 단위 까지 가능 (실시간 가능)

 

Influx DB

 

구글에서 GO 언어로 개발된 분산 시계열 (Time Series Data) DB / schema less
클러스터링 , 샤딩, 스냅샷 가능 (고가용성, 확장성, 백업)
기본적으로 저장 data를 compression 함 (TSM Tree 엔진 사용)
REST API 지원 (http 메소드 사용하여 data 핸들링)

 

Chronograf

 

influxDB 에 저장된 data 를 그래프로 표현하기 위한 툴
향후 라이선스 정책이 돈 받을지도 모른다고함
현재 버전은 Grafana 보다 허접하여 사용안함 (플러그인이 없음 예 : pie chart, table chart 등등)

 

Kapacitor

모니터링 담당 데몬 / TICK 스크립트 사용 (Query 덩어리이며 틱이 있는것은 아님)
influxDB 에 저장되는 data(metric)를 실시간(stream 방식) 감시 하여 특정 임계치부합 -> alert 통보(
Alert 방식은 여러 가지가 있음 (email, logfile, slack, alerta, talk 연동 등등 다양함)

 

오픈소스 조합으로 구성시 고려해야할 사항

 

influxDB 서버 사이징을 잘해야함 (현재 CPU 8Core, Memory 16G) / 홈페이지 가면 가이드라인 있습니다. 또한, DISK 사이즈는 일별 data 쌓이는 용량 대비 잘 계산 해야함 (현재 1주일에 3-4G 정도 사용중, 앞으로 10개월 정도 예상) 향후 샤딩이나 클러스터링 예정. 더 간단한 방법은 용량 부족시 그냥 VM OS 볼륨 확장 하면됩니다.

Data 저장 영역(스토리지) 선택을 잘해야함 (SAS 사용시 디스크 I/O 때문에 스토리지 부하 발생 -> 현재 SSD 스토리지로 이전), 특정 시간간격(설정파일) 내부 압축 알고리즘으로 TSM(타임 스트럭처 머지) 할때 “SAS 스토리지 일때 CPU” 부하 발생 우려가 있습니다.

 

시각화 부분 오픈소스 기능 설명

 

elasticsearch grafana 모니터링 구성 사례

 

Grafana

 

다양한 데이터 소스(DB)에 연결하여 실시간 그래프로 시각화해 주는 오픈 소스 대시 보드
다양한 플러그인 지원 (예: table,pie,text zabbix,cacti 지원)
그래프 표현 방식이 쉬움 (SQL 어느 정도 알면 1시간이면 됨)

 

Elasticsearch

 

확장이 용이한 아파치 루신을 활용한 JAVA 기반 분산 검색 엔진
LogStash 등을 통해 수신된 데이터를 저장하는 역할
JSON 형식 REST API제공
INDEX(DB), TYPE(Table), DOCUMENT(ROW), FIELD(Column) 형식으로 저장됨

 

Logstash

모든 종류의 시스템 로그를 수집 분석 하여 원하는 곳으로(elastic search)로 보내주는 오픈소스 툴.
비정형 데이터를 input->filter->output 형태로 효율적으로 처리할수 있게 해줌.

 

Kibana

Elastic Search를 DB로 사용하는그래프 시각화 도구
HTML + Javascript 엔진

 

운영시 고려해야할 사항

 

  • Elastic Search : JSON에 능숙하면 운영시 장점이 많습니다. 리소스 사이징 중요 / 특히 Memory 사이즈 중요함 (java Heap 사이징 매우 중요).
  • Replica 고려하여 저장소 사이징 필요.
  • 대용량 data 수집시 인덱싱 성능을 고려해야함 (SSD, 인덱스 버퍼크기 조정등 튜닝필요).
  • 공짜 플러그인도 많지만 정말 필요한 플러그인은 유료가 상당수.

 

오픈소스 모니터링 구성 사례

위와 같은 다양한 오픈소슬 연동하여 현재 저희 회사에서 운영중인 모니터링 구성 화면입니다. 정리하자면, 시중에는 다양한 벤더의 상용 모니터링 솔루션도 많지만 본문 내용과 같이 무료 오픈소스를 연동하여 모니터링을 구축해도 상용 솔루션에 전혀 뒤치지 않는 성능으로 원하는 효과를 낼수 있다는것입니다. 모니터링 솔루션이 현재 필요하시다면 적극적으로 본문 내용에서 설명드린 오픈소스들을 활용해 보시기 바랍니다.