Skip to content

English {#english}

Store per-node CPU, memory, disk, and tenant count in D1 server_metrics for AI placement (decidePlacement). Path: node agent/cron → Control Plane POST /internal/server-metrics → D1. Ref: intelligent-automation-implementation-plan §3.4, tenant-provisioning-flow §B.1. Full details: see Korean section below.


한국어 {#korean}

서버 메트릭 수집 (server_metrics → D1)

목적: 노드별 CPU·메모리·디스크·테넌트 수를 D1 server_metrics에 저장하여 AI 배치(decidePlacement)에서 사용.
참조: intelligent-automation-implementation-plan §3.4, tenant-provisioning-flow §B.1.


수집 경로

  • 노드 에이전트/Cron → Control Plane POST /internal/server-metrics → D1 server_metrics
  • 주기: 1~5분 권장.

엔드포인트

POST /internal/server-metrics

  • 인증: Authorization: Bearer <INTERNAL_API_KEY> (Control Plane과 동일)

  • Body (JSON):

    필드필수타입설명
    node_idstringD1 nodes.node_id (노드 식별자)
    cpu_pct아니오numberCPU 사용률 0~100
    memory_pct아니오number메모리 사용률 0~100
    disk_pct아니오number디스크 사용률 0~100
    tenant_count아니오number해당 노드의 테넌트 수 (기본 0)
  • 응답: 200 + { "ok": true }


노드에서 푸시하는 방법

각 노드(또는 중앙 수집기)에서 주기적으로 메트릭을 수집한 뒤 Control Plane에 POST.

예: cron + curl (Linux 노드)

Terminal window
# /etc/cron.d/prego-metrics (매 5분)
*/5 * * * * root /usr/local/bin/prego-push-metrics.sh

/usr/local/bin/prego-push-metrics.sh 예시:

#!/bin/bash
NODE_ID="node-01" # nodes.node_id와 일치
CONTROL_PLANE_URL="https://prego-control-plane.workers.dev"
INTERNAL_API_KEY="..."
# CPU, memory, disk (Linux)
CPU=$(top -bn1 | sed -n '3p' | awk '{print $2}' | tr -d '%')
MEM=$(free | awk '/Mem:/{printf "%.1f", $3/$2*100}')
DISK=$(df / | awk 'NR==2{printf "%.1f", $3/$2*100}')
TENANT_COUNT=0 # 실제로는 Frappe/DB에서 사이트 수 조회
curl -sS -X POST "${CONTROL_PLANE_URL}/internal/server-metrics" \
-H "Authorization: Bearer ${INTERNAL_API_KEY}" \
-H "Content-Type: application/json" \
-d "{\"node_id\":\"${NODE_ID}\",\"cpu_pct\":${CPU},\"memory_pct\":${MEM},\"disk_pct\":${DISK},\"tenant_count\":${TENANT_COUNT}}"
  • NODE_ID는 D1 nodes 테이블에 등록된 node_id와 동일해야 함.
  • INTERNAL_API_KEY는 Control Plane Worker에 설정한 값과 동일하게 보관(시크릿).

대안: Hetzner API

Hetzner Cloud API로 서버 메트릭을 가져와 같은 엔드포인트로 푸시하는 스크립트나 별도 Worker를 둘 수 있음. 이 경우 nodes 테이블에 Hetzner server id 매핑이 있으면 노드별로 요청 후 D1에 쓰거나, 동일한 POST /internal/server-metrics를 호출하면 됨.

Help