라즈베리 파이5 레시피 #7: 개발자를 위한 실시간 전력 모니터링 대시보드 구축기

2025. 5. 27. 14:58·Research/Raspberry Pi

안녕하세요! 지난 편에서 Shelly Plug S의 기본 설정과 로컬 API 확인까지 마쳤습니다. 이제 진짜 개발자다운 모니터링 시스템을 구축해보겠습니다!

클라우드의 1시간 단위 제약을 벗어나 실시간 데이터 수집과 전문적인 시각화를 구현해보죠.

🐳 시스템 아키텍처 설계

우리가 구축할 모니터링 스택:

Shelly Plug S (192.168.0.115)
    ↓ REST API (JSON)
json-exporter (Docker Container)
    ↓ Prometheus Metrics
Prometheus (Time Series DB)
    ↓ Data Source
Grafana (Professional Dashboard)

각 컴포넌트의 역할:

  • json-exporter: Shelly API를 Prometheus 메트릭으로 변환
  • Prometheus: 시계열 데이터 수집 및 저장
  • Grafana: 전문적인 대시보드 시각화

🔧 1단계: Docker 환경 준비

Docker Desktop 설치

Windows 환경에서 WSL2와 Docker Desktop을 활용합니다. 설치 후 정상 작동을 확인하세요.

Docker Desktop

json-exporter 컨테이너 실행

Prometheus 커뮤니티에서 제공하는 json-exporter를 사용합니다:

docker run -d --name shelly_json_exporter \
  -p 7979:7979 \
  -v /opt/json_exporter/modules.yml:/config.yml \
  quay.io/prometheuscommunity/json-exporter:latest \
  --config.file=/config.yml

 

⚙️ 2단계: json-exporter 설정

modules.yml 구성

가장 중요한 부분입니다! Grafana 대시보드와 호환되는 메트릭 이름을 사용해야 합니다:

modules:
  shelly_power:
    headers:
      User-Agent: "curl/7.81.0"
      Accept: "application/json"
    metrics:
      # 대시보드와 호환되는 정확한 메트릭 이름들
      - name: shellyplusplug_testPlusPlug_voltage
        path: '{.voltage}'
        type: value
        help: "AC voltage in volts"
        
      - name: shellyplusplug_testPlusPlug_temperature
        path: '{.temperature.tC}'
        type: value
        help: "Device temperature in Celsius"
        
      - name: shellyplusplug_testPlusPlug_relay_state
        path: '{.output}'
        type: value
        help: "Power output status (1=on, 0=off)"
        
      - name: shellyplusplug_testPlusPlug_current
        path: '{.current}'
        type: value
        help: "Current consumption in amperes"
        
      - name: shellyplusplug_testPlusPlug_currently_used_power
        path: '{.apower}'
        type: value
        help: "Real-time power consumption in watts"

데이터 수집 테스트

WSL 환경에서 curl 명령으로 메트릭이 정상 수집되는지 확인:

curl "http://localhost:7979/probe?target=http%3A%2F%2F192.168.0.115%2Frpc%2FSwitch.GetStatus%3Fid%3D0&module=shelly_power"

 

성공! 실시간 전력 데이터가 Prometheus 메트릭 형태로 변환되었습니다.

📊 3단계: Prometheus 연동

Prometheus 설정 추가

prometheus.yml 파일에 Shelly 모니터링 job을 추가합니다:

  - job_name: 'shelly_power'
    metrics_path: /probe
    params:
      module: [shelly_power]
    static_configs:
      - targets:
        - http://192.168.0.115/rpc/Switch.GetStatus?id=0
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: localhost:7979

Prometheus Targets 확인

설정 후 Prometheus 웹 인터페이스(http://localhost:9090)에서 타겟 상태를 확인합니다.

Prometheus 9090 target state

모든 타겟이 UP 상태! 데이터 수집이 정상적으로 진행되고 있습니다.

Prometheus Query 테스트

Graph 탭에서 실시간 전력 데이터를 쿼리해봅니다

Prometheus graph

완벽합니다! 실시간으로 전력 소비 패턴을 확인할 수 있네요.

📈 4단계: Grafana 대시보드 구축

대시보드 임포트

Grafana에서 Dashboard ID 20443을 임포트합니다. 이는 Shelly Plus Plug S 전용 대시보드입니다.

최종 결과

Grafana Dashboard

와! 전문적인 모니터링 대시보드가 완성되었습니다:

  • 실시간 전력 그래프: 와트 단위로 정확한 소비량 표시
  • 전압/전류 모니터링: 전기적 특성 실시간 추적
  • 온도 센서: 플러그 자체 발열 상태 확인
  • 릴레이 상태: 전원 on/off 상태 표시

🎯 수집되는 데이터 종류

우리 시스템이 수집하는 상세 메트릭

currently_used_power 실시간 전력 소비량 W ⭐⭐⭐⭐⭐
voltage 전압 V ⭐⭐⭐⭐
current 전류 A ⭐⭐⭐⭐
temperature 기기 온도 °C ⭐⭐⭐
relay_state 전원 상태 0/1 ⭐⭐⭐

🚀 이제 무엇이 가능해졌는가!

1. 실시간성

  • 5초 간격 데이터 수집 (vs 클라우드 1시간)
  • 순간적인 전력 변화도 포착 가능

2. 확장성

  • 추가 Shelly 디바이스 쉽게 연동 가능
  • 다른 IoT 센서와 통합 모니터링

3. 데이터 소유권

  • 로컬 저장으로 프라이버시 보장
  • 커스텀 분석 및 가공 자유로움

4. 비용 효율성

  • 클라우드 구독료 불필요
  • 오픈소스 기반 무료 솔루션

🎯 마무리

총 구축 시간: 약 4시간

총 비용: Shelly Plug S (2-3만원) + Wi-Fi 동글 (1-2만원)

결과: 실시간 전력 모니터링 시스템

단순한 스마트 플러그에서 시작해 Docker, Prometheus, Grafana를 활용한 완전한 모니터링 인프라를 구축했습니다.

이제 RPi5 클러스터의 정확한 전력 효율성을 측정하고, 데이터 기반의 최적화를 진행할 수 있게 되었네요!


💡 Pro Tip: 이 구조는 Shelly뿐만 아니라 REST API를 제공하는 모든 IoT 디바이스에 응용 가능합니다.

'Research > Raspberry Pi' 카테고리의 다른 글

라즈베리 파이5 레시피 #6: Shelly Plug S로 실시간 전력 모니터링 시작하기  (0) 2025.05.26
라즈베리 파이5 레시피 #5: 포트포워딩 없이 외부에서 원격 접속하는 법! (feat. Tailscale)  (0) 2025.04.30
라즈베리 파이5 레시피 #4: 클러스터 확장 - RPi 추가 시 SSH 설정 가이드  (1) 2025.04.29
라즈베리 파이5 레시피 #3: SSH 키 인증과 ProxyJump 설정으로 클러스터 관리 효율화하기  (1) 2025.04.29
라즈베리 파이5 레시피 #2 : PCIe & SSD 초고속 튜닝  (0) 2025.03.21
'Research/Raspberry Pi' 카테고리의 다른 글
  • 라즈베리 파이5 레시피 #6: Shelly Plug S로 실시간 전력 모니터링 시작하기
  • 라즈베리 파이5 레시피 #5: 포트포워딩 없이 외부에서 원격 접속하는 법! (feat. Tailscale)
  • 라즈베리 파이5 레시피 #4: 클러스터 확장 - RPi 추가 시 SSH 설정 가이드
  • 라즈베리 파이5 레시피 #3: SSH 키 인증과 ProxyJump 설정으로 클러스터 관리 효율화하기
Ctrl_engineer
Ctrl_engineer
Ctrl 키는 혼자일 때보다 다른 키와 함께할 때 진짜 힘을 발휘합니다. 데이터도, 사람도 마찬가지입니다. 연결되고 흐를 때, 세상은 더 나은 방향으로 움직입니다. 저는 데이터의 흐름을 설계하고, 신뢰를 심는 엔지니어가 되고자 합니다. 이곳은, 그 여정의 작은 흔적들을 기록하는 공간입니다.
  • Ctrl_engineer
    Ctrl the flow
    Ctrl_engineer
  • 전체
    오늘
    어제
    • 분류 전체보기 (60)
      • Research (8)
        • Raspberry Pi (8)
      • Data Enginnering (24)
        • Cloud (3)
        • Elastic (6)
        • Database (9)
        • Pipeline (3)
      • CS STUDY (0)
        • Computer Science (0)
        • DataStructure & Algorithm (0)
      • Programming (13)
        • Python (13)
      • Mathematics and Statistics (10)
      • Data Science (3)
        • Data Insight (2)
        • Learning (0)
        • ML & DL (0)
      • DIARY (0)
      • TIL (Today I Learned) (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    오블완
    spark
    heap size
    climb-mates
    py4e
    라즈베리파이 네트워크 설정
    3blue1brown
    elasticSearch
    티스토리챌린지
    SQL
    ssh 비밀번호 없이 접속
    부스트코스
    라즈베리파이5
    Statistics and Probability
    Khan
    linear algebra
    indexing
    Khan Academy
    proxyjump 설정
    점프투파이썬
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Ctrl_engineer
라즈베리 파이5 레시피 #7: 개발자를 위한 실시간 전력 모니터링 대시보드 구축기
상단으로

티스토리툴바