아두이노 온습도 센서에서 수집된 데이터로 대시보드를 구성하는 과정을 살펴보겠습니다
총 7개의 포스트로 이루어지며 아래 글목록을 보시면 확인이 가능합니다.
- 시스템 개요
- [Mosquitto] MQTT 프로토콜로 데이터를 발행 및 구독하기 위한 MQTT broker 를 구성합니다.
- [Arduino] 아두이노 보드에 온습도 센서를 연결해서 MQTT 프로토콜로 발행하는 코드를 작성합니다.
- (Docker-compose) [Influxdb+Telegraf+Grafana] 대시보드 구성을 위한 시스템은 도커 컴포즈로 일괄 관리합니다.
- [Influxdb] 온습도 데이터를 저장할 데이터베이스를 구성합니다.
- [Telegraf] MQTT broker 의 데이터를 수신해서 Influx DB 에 저장할 Agent 를 구성합니다.
- [Grafana] 데이터베이스에 저장된 데이터를 사용해서 대시보드를 구성합니다.
개요
IOT 프로젝트 구현 사례들을 검색하다가 오픈 소스 이면서 도커 컨테이너에 올려서 사용할 수 있는 서비스만 고르다 보니 Influxdb + Telegraf + Grafana 의 구성으로 진행하게 되었습니다.
네이버에서 국내 사례를 검색해 봐도 이미 다양한 사례들이 있습니다.
IOT 프로젝트도 처음 해보는 상황이고 시계열 데이터베이스도 실제로 사용해 본적은 없습니다.
그래서 구성해보고 마음에 들지 않는 경우 쉽게 다른 서비스로 전환을 편하게 하기 위해 도커 컴포즈로 컨테이너 그룹을 생성합니다.
서비스 구성 및 참조 사이트
- Influxdb : InfluxDB Time Series Data Platform | InfluxData
시계열 데이터베이스이며 시간 단위로 측정된 온습도 데이터를 저장합니다.- Docker hub : hub.docker.com/_/influxdb
- Telegraf : Telegraf | InfluxData
공식 사이트 설명을 보면 총 4단계(Input -> Process -> Aggregate -> Output)로 구성되어 있습니다.
Input 으로 받은 데이터를 Process, Aggregate 과정을 거쳐 Output 으로 전송하며 Input, Output 의 경우 다양한 서비스와 연동이 가능합니다.
여기서 Input 은 Mqtt Topic 이며, Output 은 Influxdb 에 해당합니다.- Docker hub : telegraf – Official Image | Docker Hub
- Grafana : Grafana: The open observability platform | Grafana Labs
Influxdb 서비스 만으로도 대시보드를 구성할 수 있지만 좀 더 다양하고 전문적인 대시보드를 구성할 수 있습니다.- Docker hub : grafana/grafana – Docker Image | Docker Hub
- Docket setup : Run Grafana Docker image | Grafana documentation
Influxdb vs Grafana 대시보드 비교
아래 이미지를 보면 Influxdb 와 Grafana 대시보드를 비교해 볼 수 있습니다.
Influxdb 대시보드가 나쁘다기 보다는 좀 더 전문적인 대시보드도 경험해 보는 게 좋을 것 같습니다.
컨테이너 그룹 디렉토리 생성
먼저 세가지 서비스를 구성할 디렉토리 구조를 만들어 보겠습니다.
도커 폴더로 이동한 다음 컨테이너 그룹 폴더(MqttUI) 를 생성하고 그 하위에 각 서비스별 디렉토리를 생성합니다.
# 도커 폴더 이동
cd /volume1/docker
# 디렉토리 만들기
mkdir MqttUI
cd MqttUI
mkdir influxdb
mkdir influxdb/config
mkdir influxdb/data
mkdir grafana
mkdir grafana/etc_grafana
mkdir grafana/var_lib_grafana
mkdir telegraf
설정 파일 생성
Telegraf config 샘플 파일
# telgraf config 파일 생성
docker run --rm telegraf:1.31.3 telegraf config > /volume1/docker/MqttUI/telegraf/telegraf.conf
Grafana 설정 파일
# grafana 설정 파일 생성
docker run --rm --entrypoint /bin/sh grafana/grafana:11.1.3 -c "cat /etc/grafana/grafana.ini" > /volume1/docker/MqttUI/grafana/etc_grafana/grafana.ini
Grafana 폴더 권한 수정
# grafana 폴더 권한 수정
sudo chown -R 472:472 grafana
컨테이너 그룹 실행
컨테이너 그룹 폴더에 docker-compose.yaml 파일을 아래와 같이 작성해서 저장합니다.
2024년 8월 14일 기준 3가지 서비스의 최신 도커 이미지를 사용합니다.
# 2024-08-14 기준 최신버전
# grafana:11.1.3
# influxdb:2.7.9
# telegraf:1.31.3
version: '3.6'
services:
influxdb:
image: influxdb:2.7.9-alpine
container_name: influxdb
ports:
- 48086:8086
volumes:
- type: bind
source: /volume1/docker/MqttUI/influxdb/data
target: /var/lib/influxdb2
- type: bind
source: /volume1/docker/MqttUI/influxdb/config
target: /etc/influxdb2
restart: always
telegraf:
image: telegraf:1.31.3
container_name: telegraf
volumes:
- /volume1/docker/MqttUI/telegraf/telegraf.conf:/etc/telegraf/telegraf.conf
restart: always
grafana:
image: grafana/grafana:11.1.3
container_name: grafana
user: '472:472'
ports:
- 43000:3000
environment:
- GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
volumes:
- /volume1/docker/MqttUI/grafana/var_lib_grafana:/var/lib/grafana
- /volume1/docker/MqttUI/grafana/etc_grafana/grafana.ini:/etc/grafana/grafana.ini
restart: always
다음 스크립트를 실행해서 컨테이너 그룹을 실행합니다.
# 컨테이너 그룹 실행
docker-compose up -d
컨테이너 그룹을 위한 기본 구성은 완료되었습니다.
각 서비스별 컨테이너 구성에 대한 상세 정보는 이후 포스트를 참조하시면 됩니다.
0 Comments