influxDB와 Grafana를 사용한 시계열 데이터 시각화

dyeon-dev·2023년 11월 15일
0
post-thumbnail

"Pico W 기반 IoT 플랫폼 모니터링 시스템 구축"

Raspberry Pi Pico를 이용하여 수집한 시계열 데이터 시각화 프로젝트를 진행했다.

개발환경 구성도이다.
 회로 - Bread Board, Raspberry Pi Pico W, DHT11
 시스템 개발 – MicroPython, Python, Thonny
 DBMS – InfluxDB
 웹 애플리케이션 - Grafana

진행과정은 다음과 같다.

1. MQTT 통신

https://micropython.org/download/RPI_PICO_W/
위의 링크에서 v1.21.0 (2023-10-05) .uf2를 설치해주고 uf2 파일을 나타나는 USB 대용량 저장 장치에 복사해준다.

pip install paho-mqtt

Thonny IDE로 Raspberry Pi를 설정해주고 DHT 센서 데이터를 MQTT 브로커에 게시해준다.

온습도 값 출력 성공

2. MQTT-InfluxDB로 데이터 전송

pip install influxdb-client

MQTT 클라이언트를 생성하고, 지정된 브로커에 연결 후, topic인 temperature 및 humidity를 구독한다.
topic에 대한 메시지가 수신되면 on_message콜백이 트리거되고, 수신된 데이터는 해당 값과 함께 측정값으로 InfluxDB에 기록된다.

InfluxDB란?

InfluxDB는 분산된 시계열 데이터를 저장하고 조회하는 데 사용되는 오픈 소스 데이터베이스이다. 성능과 확장성이 뛰어나며, IoT 및 모니터링 애플리케이션에서 특히 널리 사용된다. InfluxDB는 간단하고 효율적인 쿼리 언어를 제공하여 시계열 데이터를 쉽게 다룰 수 있다.
시계열 데이터는 일련의 시간에 따라 발생한 이벤트나 측정값을 나타낸다. InfluxDB는 이러한 데이터를 저장하고 쿼리하기에 최적화된 구조를 가지고 있어, 센서 데이터, 서버 로그, 성능 메트릭 등 다양한 시계열 데이터를 효과적으로 처리할 수 있습니다. 실시간으로 데이터를 모니터링하고 분석한다.
또한 InfluxDB는 Telegraf, Grafana와 같은 도구들과 통합되어 데이터 수집, 저장 및 시각화를 통합적으로 제공한다.

3. InfluxDB에서 데이터 불러오기

Temperature와 Humidity value 값을 체크하고 submit을 해주면 해당 시계열 데이터의 그래프가 나타난다.

Script Editor를 보면 쿼리문이 자동으로 생성된 것을 볼 수 있다. 이렇게 간편할수가...!

이 쿼리문을 가지고 Grafana Dashboard 환경으로 가서 붙여넣기만 해주면 시계열 데이터 시각화가 가능하다.

4. Grafana 데이터 시각화


dashboard에서 new project를 선택하면 influxDB 불러오는 창이 뜨고

해당 쿼리를 입력해주면 자동으로 그래프가 나타난다.

5. 대시보드 결과 화면

장치 4개 값들의 온도 측정 대시보드이다.
온/습도 비교 대시보드이다.


Grafana는 시계열 매트릭 데이터 수집에 강한 모습을 보이는 만큼, 활용하는 부분도 서버 리소스의 매트릭 정보나 로그 같은 데이터를 시각화는 데 많이 사용한다.

시각화한 그래프에서 특정 수치 이상으로 값이 치솟을 때(예를 들어 CPU 사용량 80% 이상) 알림을 전달받을 수 있는 기능도 제공한다. 이러한 기능은 인프라 운영 관점에서 굉장히 중요한 기능이라고 할 수 있다.

그리고 오픈소스 툴킷인 만큼, 커뮤니티도 많이 활성화 되어있는데, 일반 사용자들이 만들어놓은 대시보드를 import해서 사용할 수도 있고 import한 대시보드를 내 취향에 맞게 커스터마이징 할 수도 있다.

다양한 플러그인이 있어 Grafana 내부적으로 기능 확장도 쉽게 가능하고, 더 나아가 Node.js 플랫폼에서 개발할 때 InfluxDB를 사용하는 등 확장성의 범위가 넓기 때문에 여러 프로젝트에서 유용하게 사용할 수 있을 것 같다.

profile
https://dyeon-dev.vercel.app/ ⬅️ 블로그 이전

0개의 댓글