rpi-worker-monitor-node
작성: AI / 수정: nkey
라즈베리파이 모니터링 워커 노드에서 Prometheus/Alertmanager/Loki/Grafana를 Docker Compose로 구동하기 위한 레포입니다.
monitoring/docker-compose.yml: 모니터링 스택 컨테이너 실행monitoring/prometheus/*: Prometheus 설정/알람 룰monitoring/alertmanager/*: Alertmanager 라우팅/웹훅monitoring/loki/*: Loki 스토리지/인덱싱 설정
docker compose로 배포하던 방식을 k3s로 배포하는 방식으로 수정하면서 master node에서 한번에 배포 진행합니다. (참고: rpi-master-node/k3s-monitoring)
아래 내용들은 docker compose로 하던 방식에 대한 설명이니 참고만 부탁드립니다.
Quickstart
Recommended
# clone
git clone https://nkeystudy.site/gitea/2025-capstone/rpi-worker-monitor-node.git
cd rpi-worker-monitor-node/monitoring
# run
docker compose up -d
# verify
docker compose ps
curl -s http://localhost:9090/-/ready
curl -s http://localhost:9093/-/ready
curl -s http://localhost:3100/ready
Requirements
- Runtime/Language: Docker Engine + Docker Compose
- Dependencies: 없음(스택은 모두 컨테이너로 구동)
- Tools:
docker,docker compose
Configuration
Environment Variables
| Key | Description | Default | Required |
|---|---|---|---|
| TZ | 컨테이너 타임존 | Asia/Seoul |
|
| GF_SECURITY_ADMIN_USER | Grafana 관리자 계정 | admin |
|
| GF_SECURITY_ADMIN_PASSWORD | Grafana 관리자 비밀번호 | admin1234 |
Ports
| Service | Port | Description |
|---|---|---|
| Prometheus | 9090 | Prometheus UI/API |
| Alertmanager | 9093 | Alertmanager UI/API |
| Loki | 3100 | Loki API |
| Grafana | 3000 | Grafana UI |
| Node-Exporter | 9100 | Prometheus scraping |
| Promtail | 9080 | Prometheus scraping |
Usage (minimal)
- 실행/중지
cd monitoring
docker compose up -d
docker compose down
- Prometheus 설정 변경 후 reload
# docker-compose.yml 에서 --web.enable-lifecycle 활성화되어 있음
curl -X POST http://localhost:9090/-/reload
(All nodes) node-exporter, promtail 설치 (수동)
설정 파일 설명 (이 레포에 포함된 것만)
Docker Compose
monitoring/docker-compose.ymlprometheus,alertmanager,loki,grafana4개 서비스를 동일 네트워크에서 실행- Prometheus:
./prometheus/prometheus.yml,./prometheus/alert.rules.yml을 컨테이너에 마운트- 데이터는
prometheus-data볼륨에 저장 --web.enable-lifecycle로/-/reload지원
- Alertmanager:
./alertmanager/alertmanager.yml마운트- 데이터는
alertmanager-data볼륨에 저장
- Loki:
./loki/loki-config.yml마운트- 데이터는
loki-data볼륨에 저장
- Grafana:
- 데이터는
grafana-data볼륨에 저장 - 관리자 계정/비번을 env로 주입
- 데이터는
Prometheus
monitoring/prometheus/prometheus.yml- 스크레이프 타겟:
node-exporter를 노드별:9100으로 수집(rpi-master:9100,rpi-worker-monitor:9100,rpi-worker-service:9100)kube-state-metrics는10.43.217.216:8080로 설정(클러스터 환경에 맞게 조정 필요)
- Alertmanager 타겟:
alertmanager:9093 - 룰 파일:
/etc/prometheus/alert.rules.yml
- 스크레이프 타겟:
monitoring/prometheus/alert.rules.yml- 노드 상태/리소스 알람:
NodeDown,HighCpuLoad,HighMemoryUsage,DiskAlmostFull(>0.85),HighSystemLoad
- K8s 워크로드 알람:
KubeNodeNotReady,PodCrashLooping,PodNotReady,DeploymentReplicasMismatch
- 노드 상태/리소스 알람:
Alertmanager
monitoring/alertmanager/alertmanager.ymlseverity="critical"알람을n8n-webhook으로 라우팅- Webhook URL:
http://<IP>/n8n/webhook/alert send_resolved: true로 해제 이벤트도 전송
Loki
monitoring/loki/loki-config.yml- 단일 인스턴스 Loki 설정(filesystem 기반)
chunks_directory,active_index_directory등을/loki/*하위로 사용auth_enabled: false(내부 데모 용도)
License
(Not specified in repo)
Description