본문 바로가기

Server

MQTT - telegraf - InfluxDB

 

 

로봇 서버에서 실시간 위치 데이터를 수신하여 데이터베이스에 저장하고, 실시간 위치 조회 및 특정 시간대의 위치 범위 평균 조회와 같은 기능을 제공하는 서버를 요청받았습니다.

 

 

기존에는 MQTT-Golang-MongoDB 구조를 사용하여,

1초마다 입력받은 위치 데이터를 데이터베이스에 업데이트하는 방식으로 제작하였고, 이 방식이 효율적인지 의문이 들었습니다.

이에 위치 데이터(시계열 데이터)의 효율적인 처리를 위해 시계열 데이터베이스를 찾아보았습니다.

 

출처: https://www.youtube.com/watch?v=pCmzR6FiTMk&t=99s

 


이 영상(Using MQTT and InfluxDB for IoT)
을 참고하여 MQTT-Telegraf-InfluxDB 구조를 적용해보았습니다.

 

 


 

 

TSDB(Time Series Database)

: 시계열 데이터를 효율적으로 저장, 관리하기 위해 설계된 데이터베이스

 

 

chatGPT가 알려준 MongoDB vs InfluxDB


 

설치

brew install mosquitto
brew install influxdb
brew install influxdb-cli
brew install telegraf

MQTT Broker (mosquitto) 설정

brew services start mosquitto

 

 


InfluxDB 설정

 

setup(이름, 비밀번호 등등 설정)

influx setup

 

influxdb 실행

influxd

 

데이터베이스 생성

influx bucket create -n {bucket-name} -o {organization-name} -r 0

 


telegraf 설정

telegraf config 파일 생성

`--input-filter mqtt_consumer --output-filter influxdb` : MQTT -> InfluxDB

telegraf --input-filter mqtt_consumer --output-filter influxdb config > telegraf.conf

 


telegraf.conf 

# MQTT Input 설정
[[inputs.mqtt_consumer]]
  servers = ["tcp://localhost:1883"]
  topics = ["{topic-name}"]
  data_format = "json"

# InfluxDB Output 설정
[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  token = "{influx-token}"           
  organization = "{organization}"                   
  bucket = "{bucker-name}"

 

token 값은 `influx auth list`를 통해 확인할 수 있습니다.

 

 

telegraf 실행

telegraf --config telegraf.conf

 


실행

 

mqtt 메세지 전송

mosquitto_pub -h localhost -t "{topic-name}" -m '{"id": 1, "latitude": 35, "longitude": 127}'

 

 

influxDB에서 확인하기

influx query '
from(bucket: "{bucket-name}")
  |> range(start: 0)
'

`range(start: 0)`: 모든 시간대의 데이터를 조회하기 위해 start:0으로 설정

 

 

끝~,~