원래는 Prometheus를 기반으로 모니터링 시스템을 구성할 계획이었으나 여러 이유로 influxDB를 기반으로 하는 모니터링 시스템을 구성하게 됐다. 구성 과정을 기록으로 남긴다.
운영 중인 www.joinc.co.kr를 모니터링 한다. www.joinc.co.kr 서버는 AWS에 위치하고 있으므로 이론상 CloudWatch 만으로 모니터링 시스템 구성이 가능하다. 지금은 InfluxDB를 기반으로 모니터링 환경을 만들 계획이다. CloudWatch와 InfluxDB(혹은 Prometheus)와의 비교문서는 따로 정리하도록 하겠다.
Telegraf
Telegraf는 데이터를 수집하고 전송하는 소프트웨어다. MongoDB, MySQL, Redis, Ngix와 같은 애플리케이션을 비롯해서, cpu, memory, disk, 네트워크와 같은 시스템 정보, 컨테이너와 오케스트레이션 툴의 정보들을 포함한다. Telegraf는 플러그인 아키텍처를 지원하기 때문에 (이론적으로) 모든 종류의 데이터들을 수집 할 수 있다. Telegraf은 200개 이상의 프러그인을 통해서 다양한 메트릭을 수집 할 수 있다. 수집한 데이터는 InfluxDB Line Protocol, JSON, Graphite, Value, Nagios, Collectd로 전송 할 수 있다.
Telegraf는 GoLang으로 개발했다. npm, pip, gem과 같은 패키지관리 도구가 필요 없이 "하나의 파일(one file)"로 설치가 가능하다.
Influxdb
InfluxDB는 오픈소스 기반의 TSDB(Time series database)다. "시계열 데이터베이스"라고 부르기도 한다. 시간이 주요 축인 데이터를 저장하고 꺼내는데 특화된 데이터베이스다. IoT 센서 정보들 시스템 모니터링 정보들(CPU, Disk IO, 네트워크 트래픽, 위치정보)같이 일정 시간주기로 쌓이는 정보를 효과적으로 처리 할 수 있다.
Go언어로 개발됐기 때문에 외부의존성이 없다. 8086 포트를 통해서 데이터를 수신하며, 내장된 시간관리 함수를 이용해서 데이터를 저장하고 측정한다. 질의어가 SQL과 매우 유사하기 때문에 사용도 쉬운 편이다.
Grafana
Grafana는 저장된 데이터의 종류와 위치에 상관 없이, 질의를 하고 그 결과를 화면으로 보여주고(visualize), 알람을 전송하는 소프트웨어다.
Telegraf & InfluxDB & Grafana 아키텍처
모니터링 시스템은 "1. 메트릭 수집/전송, 2. 메트릭의 저장, 3. 저장된 메트릭의 분석&시각화" 의 3개 요소를 기본으로 한다. Telegraf가 메트릭 수집/전송을 InfluxDB는 메트릭의 저장, Grafana는 분석&시각화를 각각 담당한다. 이들 아키텍처는 아래와 같이 묘사 할 수 있다.
Grafana 서버를 실행한다.
# systemctl start grafana-server
Grafana의 기본 서비스 포트번호는 3000이다. 브라우저로 연결해보자.
관리자 아이디 패스워드는 "admin/admin"이다. 로그인 후 패스워드를 변경하자.
설정
Grafana 설정을 해보자. 먼저 "측정 데이터가 저장된 데이터 소스를 설정해야 한다."
Add data source를 클릭하자.
Prometheus에서 부터 MySQL, PostgreSQL같은 RDBMS, Azure Monitor, CloudWatch 까지 다양한 소스로 부터 데이터를 읽을 수 있다. 오늘의 목표인 InfluxDB를 선택하자.
InfluxDB 설정이 나온다.
URL : InfluxDB 접근 URL이다. 같은 호스트에 설치돼 있으니 http://localhost:8086으로 설정한다.
Auth : 인증 관련된 설정은 전부 건너뛴다.
Database : joinc-monitoring
user/Password : 건너뛴다.
save and test를 하면 데이터 소스 설정이 끝난다.
대시보드 만들기
Grafana는 굉장히 다양한 기능을 가지고 있다. 여기에서 전부를 설명하지는 않을 것이다.
Create > Dashboard로 대시보드 작성 화면으로 갈 수 있다. 여기에서 쿼리와 그래프등을 설정해서 대시보드를 만들 수 있다.
CPU의 usage_system과 usage_user를 출력했다. Add Query를 이용해서 여러 개의 쿼리를 만들 수 있다. 쿼리를 구성하는 필드들 FROM, WHERE, SELECT, GROUP BY 등을 보면 알겠지만 그냥 SQL 문을 쉽게 작성 할 수 있도록 표현 한 것일 뿐이다.
FROM : cpu 측정 값을 가져온다.
WHERE : 지금은 호스트가 하나이지만, 호스트가 여러 개일 경우 WHERE 조건 절에 host 이름을 설정해서 각 호스트에 대한 그래프를 그릴 수 있다.
SELECT : 가져올 필드를 설정한다. 필드에 대한 펑션도 설정할 수 있다. 나는 mean(평균)을 적용했다.
대시보드는 딱 이정도에서 마무리 한다.
정리
대략 개념은 잡았으니 Prometheus로 넘어간다.
Grafana의 대시보드 알람은 그냥 몇 번 시행착오 거치면 설정 할 수 있다.
알람은 따로 다룰 생각이다. Grafana와 Opsgenie 조합이면 어떨까 싶다.
AWS의 CloudWatch와 조합해서 사용 할 필요가 있을까 ? 시각적으로 확실히 도움이 되기는 한데, 굳이 그럴 필요는 없어 보인다. 확실히 grafana에 비해서 예쁘지는 않지만 대시보드/알람 관리/람다/NoOps/SNS 등으로 충분해 보이기 때문이다.
Contents
소개
Telegraf
Influxdb
Grafana
Telegraf & InfluxDB & Grafana 아키텍처
구성도
InfluxDB 설치
Telegraf 설치
Influxdb 확인
Grafana
Grafana 설치
설정
대시보드 만들기
정리
Recent Posts
Archive Posts
Tags