MQTT와 InfluxDB/Grafana로 시계열 파이프라인 구축
MQTT로 수집한 시계열 데이터를 InfluxDB에 저장하고 Grafana로 시각화하는 전체 흐름과 핵심 설정을 예제와 함께 정리한 기술 자료
목차
개요
사물인터넷 환경에서 발생하는 센서값은 대부분 시계열 데이터다. 이 글에서는 mqtt influxdb 연동을 중심으로 mqtt 시계열 수집 파이프라인을 구성하는 방법을 단계별로 설명한다. 목표는 간단한 토픽(pub/sub) 송수신에서부터 InfluxDB 저장, Grafana를 통한 grafana mqtt 데이터 시각화까지의 흐름을 이해하는 것이다.
아키텍처 개요
기본 아키텍처는 다음 네 부분으로 구성된다.
- 센서 또는 에지 디바이스: MQTT로 토픽에 데이터 발행
- MQTT 브로커: 메시지 중계(Mosquitto, EMQX 등)
- 데이터 수집기/수신기: Telegraf, Node-RED 또는 커스텀 구독기
- 시계열 DB와 시각화: InfluxDB + Grafana
데이터 흐름 단계
1. 센서에서 MQTT로 발행
센서는 JSON 또는 간단한 라인 포맷으로 토픽에 값을 보낸다. 예를 들어 온도 토픽에 발행하는 명령은 다음과 같다.
mosquitto_pub -h broker.example.com -t sensors/room1/temperature -m '{"temp":23.5, "unit":"C"}'
2. MQTT 브로커 설정
브로커는 단순 중계 역할을 주로 한다. 인증과 토픽 정책을 설정하면 보안과 데이터 관리에 도움이 된다. 작은 환경에서는 Mosquitto를 사용하고 대규모에서는 EMQX나 HiveMQ를 고려한다.
3. 수집기(Telegraf)로 MQTT 구독 후 InfluxDB에 저장
가장 쉬운 방법은 Telegraf의 mqtt_consumer 플러그인을 사용하는 것이다. Telegraf는 데이터를 받아 InfluxDB로 전송해 준다. 주요 설정 예시는 다음과 같다.
[[inputs.mqtt_consumer]]
servers = ["tcp://broker.example.com:1883"]
topics = ["sensors/+/temperature"]
data_format = "json"
[[outputs.influxdb_v2]]
urls = ["http://influxdb:8086"]
token = "YOUR_TOKEN"
organization = "org"
bucket = "sensors_bucket"
위 설정은 토픽 내 JSON 필드를 태그나 필드로 매핑하여 InfluxDB에 저장한다. 필드 타입과 태그화 여부를 적절히 결정하는 것이 쿼리 성능에 중요하다.
4. InfluxDB의 저장 포맷
InfluxDB는 라인 프로토콜을 사용한다. 수동으로 데이터를 보낼 때 예시는 다음과 같다.
measurement,location=room1 temperature=23.5 1617181723000000000
measurement는 센서 종류, 태그에는 고정 속성(위치 등), 필드에는 측정값을 넣는다. 타임스탬프는 나노초 단위를 사용한다.
5. Grafana에서 시각화
Grafana에서 InfluxDB를 데이터 소스로 추가하면 쿼리 빌더로 패널을 만들 수 있다. 시계열 그래프의 기본 쿼리는 measurement와 필드를 선택하는 방식이다. 패널 예시는 다음과 같다.
# InfluxQL 예시
SELECT mean("temperature") FROM "measurement" WHERE $timeFilter GROUP BY time($__interval) fill(null)
Grafana에서는 알람, 대시보드 공유, 반복 패널 템플릿 등을 활용해 운영 대시보드를 구성할 수 있다.
구현 시 고려사항
- 데이터 스키마 설계: 태그는 고유 분류값으로, 빈번한 측정값은 필드로 설정
- 메시지 직렬화: JSON 구조를 단순화하면 수집 성능 개선
- 보안: MQTT TLS와 인증, InfluxDB 토큰 사용
- 백필 및 유지보수: 장애 시 데이터 보전 정책과 롤오버 전략
간단한 예제 흐름
전체 흐름은 다음 단계로 요약된다.
- 센서가 sensors/room1/temperature로 JSON 발행
- Mosquitto가 메시지 중계
- Telegraf가 mqtt_consumer로 구독 후 InfluxDB에 전송
- Grafana에서 해당 버킷을 읽어 패널에 시계열 표시
운영 팁
- 샤딩이나 retention 정책으로 스토리지 제어
- 정기 인덱스와 태그 검토로 쿼리 성능 유지
- 시뮬레이터로 부하 테스트 수행
- 로그와 메트릭을 모니터링해 병목 요소를 탐지
마무리
mqtt influxdb 연동과 grafana mqtt 데이터 시각화는 비교적 단순한 구성으로도 빠르게 시작할 수 있다. 핵심은 메시지 포맷과 태그 설계, 그리고 저장 정책이다. 초기 구성 후에는 수집률과 쿼리 성능을 관찰하면서 인프라를 조정하면 안정적인 mqtt 시계열 수집 파이프라인 운영이 가능하다.