안녕하세요! 지난 편에서 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을 활용합니다. 설치 후 정상 작동을 확인하세요.
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)에서 타겟 상태를 확인합니다.
모든 타겟이 UP 상태! 데이터 수집이 정상적으로 진행되고 있습니다.
Prometheus Query 테스트
Graph 탭에서 실시간 전력 데이터를 쿼리해봅니다
완벽합니다! 실시간으로 전력 소비 패턴을 확인할 수 있네요.
📈 4단계: Grafana 대시보드 구축
대시보드 임포트
Grafana에서 Dashboard ID 20443을 임포트합니다. 이는 Shelly Plus Plug S 전용 대시보드입니다.
최종 결과
와! 전문적인 모니터링 대시보드가 완성되었습니다:
- 실시간 전력 그래프: 와트 단위로 정확한 소비량 표시
- 전압/전류 모니터링: 전기적 특성 실시간 추적
- 온도 센서: 플러그 자체 발열 상태 확인
- 릴레이 상태: 전원 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 |