본문으로 바로가기



이번 개발 주제가 IoT 모니터링이었습니다. 모니터링은 굉장히 많은 데이터를 실시간으로 저장하고 조회하는 것이 중요한데 데이터베이스로 InfluxDB의 저장 및 조회 성능, 유연한 확장성 등을 보면 아주 적절하였고, 그것을 시각화하는 데는 Grafana라는 툴이 이쁘게 잘 그려준다는 것을 알았습니다. 하지만, Grafana는 InfluxDB에 적재된 데이터를 이쁘게 그려주는 툴일 뿐입니다.

데이터를 담고 이쁘게 그려주는 것들은 준비가 되어있지만, 데이터를 수집해주고 InfluxDB에 저장해주는 것이 없었습니다.
그러던 중 데이터를 수집하고 InfluxDB에 저장해주는 Telegraf라는 것을 알게 되었습니다.
Telegraf에서 많은 오픈소스를 제공하여 최근에는 Telegraf & InfluxDB & Grafana를 연동하여 자주 사용한다고 합니다.

따라서, 이번 글에서는 Telegraf & InfluxDB & Grafana 연동하여 Memory와 CPU 지표를 Grafana에 시각화하는 예제를 통해
Telegraf & InfluxDB & Grafana에 대하여 알아보도록 하겠습니다.

만들어 볼 CPU & 메모리 모니터링


1. 개념 숙지 및 세팅

Telegraf

원하는 지표들을 수집하여 지정한 곳으로 보내주는 에이전트를 말합니다. 즉, Telegraf에서 수집한 데이터를 InfluxDB 등에 보냅니다.
Telegraf는 최소한의 메모리 공간 점유를 목표로 개발되고 있는 오픈 소스 프로젝트이며 지표로 수집할 수 있는 시스템 또는 서비스가 181개입니다. (1.14 버전 기준)
Telegraf를 설치 안 받으신 분들은 아래 링크에서 설치해주시고 환경 세팅을 해주시기 바랍니다. (Windows 버전)
Telegraf 윈도우 버전 다운로드

InfluxDB

수집된 데이터를 시간 순서에 따라 저장하고 조회하는 기능을 제공하는 Time-series DB(TSDB)로 시계열 데이터베이스라고도 합니다. 시계열 DB는 실시간 입력과 조회, 고효율 압축 기술 등을 바탕으로 중단 없는 IoT 데이터 처리를 가능하게 합니다. 저장된 데이터를 손쉽게 분석하고, 활용할 수 있다는 장점도 가지고 있습니다.

시계열 DB를 이용하면 일정 시간의 흐름에 따른 추세를 보거나 시스템에 일어나는 상황을 역동적으로 확인할 수 있습니다. 저장된 데이터를 조회하거나 시각화해도 운영 중인 DB의 성능에 영향을 주지 않기 때문에 RDB로 하기에는 어려운 IoT 모니터링하는데 최적화된 데이터베이스입니다.

InfluxDB는 기존의 SQL문과 유사하지만 명칭에 있어서 아래처럼 살짝 다른 부분이 있습니다.

RDB InfluxDB
Table Measurement
PK 혹은 Indexed Column Tag key
일반 Column Field Key


InfluxDB를 설치 안 받으신 분들은 아래 링크에서 설치해주시기 바랍니다. (Windows 버전)
InfluxDB 윈도우 버전 다운로드

Grafana

간단하게, 시계열 데이터를 시각화하는데 가장 최적화된 대시보드입니다.
Telegraf에서 수집한 데이터를 InfluxDB에 적재 후 Grafana에서 시각화하는 것입니다.

Grafana를 설치 안 받으신 분들은 아래 링크에서 설치해주시기 바랍니다. (Windows 버전)
Grafana 윈도우 버전 다운로드


2. Telegraf plugins에서 메모리와 CPU 지표 수집하기 위한 conf 파일 INPUTS 설정


Telegraf가 설치된 폴더에서 telegraf.conf 클릭해서 아래와 같이 추가해줍니다.


빨간 박스

# https://github.com/influxdata/telegraf/tree/release-1.14/plugins/inputs/cpu # https://github.com/influxdata/telegraf/blob/release-1.14/plugins/inputs


노란 박스

# Read metrics about memory usage [[inputs.mem]] # no configuration [[inputs.cpu]] ## Whether to report per-cpu stats or not percpu = true ## Whether to report total system cpu stats or not totalcpu = true ## If true, collect raw CPU time metrics. collect_cpu_time = false ## If true, compute and report the sum of all non-idle CPU states. report_active = false


위의 처럼 기입하시고 저장을 누르시고 influxdb, telegraf 모두 종료시켰다가 다시 실행해주시면 적용이 됩니다.
혹시라도, telegraf.exe파일을 실행하자마자 바로 종료되는 분은 설정을 잘못하신 거니 다시 한번 확인해주세요.


추가로, Telegraf plugins에 대한 간단한 설명입니다.

plugin 종류 설명
Input plugins 데이터 수집
Processor plugins 수집한 데이터를 변형 혹은 필터링
Aggregator plugins 최솟값, 최댓값 혹은 평균값으로 조합 가능
Output plugins 데이터를 적재하거나 혹은 저장, 데이터 포맷(InfluxDB, JSON, Graphite)

Telegraf plugins 공식 웹사이트

Telegraf plugins | Telegraf 1.14 Documentation

Telegraf pluginsTelegraf is a plugin-driven agent that collects, processes, aggregates, and writes metrics. Telegraf supports four categories of plugins including input, output, aggregator, and processor.Telegraf plugins support parsers (input data formats

docs.influxdata.com


3. telegraf.conf 파일의 OUTPUTS 설정

저는 빨간색 박스 부분을 아래와 같이 세팅하였습니다.
localhost:8086은 inluxDB 호스트입니다.


4. influxDB에 적재된 데이터 확인

1) Influx.exe를 실행하여 [ show databases ] 명령어를 입력합니다.
입력하면, telegraf 데이터베이스가 보이실 겁니다.



2) [ use telegraf ] 명령어를 입력하여 telegraf database를 사용합니다.



3) [ show meausrements ] 명령어를 입력하여 telegraf database에 존재는 measurement를 확인합니다.
아까 telegraf plugins로 설정한 cpu와 mem이 inpluxDB에 저장되어 있는 것을 확인하실 수 있습니다.


4) [ select * from cpu ] 명령어를 입력하여 시시각각으로 담긴 cpu 데이터를 확인하실 수 있습니다.
마찬가지로, from 절에 mem을 입력하시면 시간별로 담긴 mem 데이터를 확인할 수 있습니다.



이어서는 InfluxDB까지 적재한 CPU 지표와 Memory 데이터를 Grafana에 시각화하는 방법을 포스팅하겠습니다.
Telegraf, InfluxDB, Grafana 예제 및 총정리 2탄

References
Telegraf plugins
Telegraf inputs - CPU
Telegraf inputs - MEM