로봇 서버에서 실시간 위치 데이터를 수신하여 데이터베이스에 저장하고, 실시간 위치 조회 및 특정 시간대의 위치 범위 평균 조회와 같은 기능을 제공하는 서버를 요청받았습니다.
기존에는 MQTT-Golang-MongoDB 구조를 사용하여,
1초마다 입력받은 위치 데이터를 데이터베이스에 업데이트하는 방식으로 제작하였고, 이 방식이 효율적인지 의문이 들었습니다.
이에 위치 데이터(시계열 데이터)의 효율적인 처리를 위해 시계열 데이터베이스를 찾아보았습니다.
이 영상(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으로 설정
끝~,~
'Server' 카테고리의 다른 글
MQTT란 (1) | 2025.01.26 |
---|---|
Web Server & Web Application Server 그리고 Reverse Proxy (0) | 2024.08.24 |
RTMP server 만들고 HLS로 웹 상에 실시간 비디오 스트리밍 (0) | 2024.07.30 |