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

# 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.yml
    • prometheus, alertmanager, loki, grafana 4개 서비스를 동일 네트워크에서 실행
    • 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-metrics10.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.yml
    • severity="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
쿠버네티스에서 모니터링 및 문제 해결책 적용(Auto Action Module-AAM) 노드 역할을 하는 라즈베리파이입니다.
Readme 31 KiB