임대 원격 Mac에서 OpenClaw 다중 스킬은 용량·지출 공유 문제입니다. 게이트웨이 우선 예산, 테넌트·프로젝트 독립 카운터, 퓨즈·디그레이션 표, 감사 로그로 재현 가능하게 묶으세요. 전제: 배포·하드닝, Ollama 라우팅, 샌드박스·출구. 본문은 토큰·예산·장애 격리입니다.
① 예산 모델과 카운트 차원
모든 이벤트에 로그 귀속 차원을 붙입니다. 임대 공유에서는 정산·벤더 급증 대응의 기준이 됩니다.
- 테넌트 — tenant=… (CI·세션에서 고정 전달).
- 프로젝트·스킬 패키지 — project·pack별 카운터로 상호 도탈 방지.
- 업스트림 면 — 채팅·임베딩·도구·로컬 모델을 버킷 분리해 디그레이션 정밀도 확보.
- 시간 창 — 버스트(분/10초) + 일·시간 예산을 병행.
- 단위 — 요청·도구 호출·추정 USD·벤더 토큰 중 경로당 하나; 혼합 시 병렬 시리즈.
집행은 스킬 내부가 아니라 OpenClaw 앞 프록시·게이트웨이·사이드카. 스킬에는 단기·최소 권한 자격만. 멀티 워커는 Redis 등 공유 백엔드.
② 설정 파일·환경 변수 템플릿
compose·plist 옆에 템플릿 커밋, 비밀은 호스트 env만. 아래는 예시명—실제 게이트웨이에 매핑.
.env.budget.example(외부 공유 전 삭제):
# Counter backend
BUDGET_REDIS_URL=redis://127.0.0.1:6379/0
BUDGET_KEY_PREFIX=oc:gw:2026
# Defaults when a client does not supply a project header
BUDGET_DEFAULT_TENANT=shared-lab
BUDGET_DEFAULT_PROJECT=misc
# Per-tenant daily cap (USD estimate from provider headers or your tariff table)
BUDGET_TENANT_DAILY_USD_MAX=200
BUDGET_PROJECT_DAILY_USD_MAX=50
# Burst: requests per minute per (tenant, project)
BUDGET_RPM_BURST=60
# Fuse: error rate window
FUSE_WINDOW_SEC=60
FUSE_ERROR_RATIO_OPEN=0.5
FUSE_COOLDOWN_SEC=120
# Audit
BUDGET_LOG_SAMPLE_RATE=1.0
BUDGET_LOG_REDACT_HEADERS=Authorization,X-Api-Key
최소 권한: 테넌트·CI 저장소별 벤더 키 + 게이트웨이 메타 매핑. 게이트웨이 토큰(포트 18789)은 전송 인증만—벤더 키·청구 토큰과 분리 기록.
엣지 헤더 계약: X-Tenant-Id, X-Project-Id 필수(프로덕션 누띡 거절).
③ 퓨즈와 디그레이션 전략 표
퓨즈=비정상·비경제 구간 개방, 디그레이션=그동안의 동작. 표를 미리 고정합니다.
| 조건(퓨즈 트립) | 탐지 | 디그레이션 동작 | 감사 로그 필드 |
|---|---|---|---|
| 프로젝트 일일 USD > 상한 | 사용량 헤더 또는 요금표 기반 롤링 합 | HTTP 429 + Retry-After; 선택 비동기 재생 큐 | tenant, project, window, spent, cap |
| 버스트 RPM 초과 | 키별 슬라이딩 카운터 | 차단: 우선순위 낮은 경로 클래스부터(예: 선택 요약) | route_class, rpm, limit |
| 업스트림 5xx·타임아웃 연속 | FUSE_WINDOW_SEC 내 비율 | 퓨즈 개방: 캐시 답·로컬 모델·정적 “디그레이션 모드”로 단락 | error_ratio, upstream, fuse_state |
| 테넌트 전역 상한(다중 프로젝트) | 테넌트 ID 하위 프로젝트 합산 | 해당 테넌트만 하드 스톱, 다른 테넌트는 유지 | tenant_spend, projects_included |
| Mac 디스크·큐 압박 | 로컬 지표(스크래치 볼륨, launchd 잡 깊이) | 동시성 축소; 비-CI 트래픽 클래스 일시 정지 | host, metric, action |
닫힌 뒤 하프오픈 탐침으로 복구; 전환 로그는 사고 분석용. 재활용 임대 디스크는 장기 로컬 이력에 의존하지 말 것.
④ CI 호출 빈도와의 협조
CI는 매트릭·정각 크론으로 버스트를 동시에 깹니다.
- CI 전용 키 — tenant=ci·저장소 project; 필요 시 일일 USD를 대화형보다 타이트하게.
- 지터 — 정각 크론 지양, 오프셋·동시성 그룹.
- 멱등 — Idempotency-Key/SHA로 429 재시도 이중 과금 방지.
- 레인 분리 — 빌드 vs LLM 배치는 노드 또는 시간대 분리.
YAML concurrency·수동 디스패치로 게이트웨이 하드 상한 아래 목표를 유지.
⑤ 초과 한도 FAQ
Q: 카운터와 청구가 불일치?
A: 게이트웨이 우회(로컬 스크립트·다른 컨테이너·노트북 동일 조직 키) 점검 후 키 순환, 프로덕션은 집계 경로만.
Q: 한 프로젝트만 429?
A: 프로젝트 캡 설계대로일 수 있음. 상한 조정 또는 전용 키·별도 시리즈.
Q: 임베딩+채팅 한 버킷?
A: 경쟁을 원할 때만; 보통 분리 권장.
Q: 감사 로그 한 줄?
A: UTC, tenant/project, 도구·경로, allow|deny_budget|fuse_open, 비용·토큰 델타, 상관 ID, 정책 버전; 비밀 마스킹.
Q: Redis 장애?
A: fail-closed vs fail-open을 런북에 명시(임대 랩은 근무 시간 폐쇄+알림이 흔함).
Q: 스킬 안에 카운터?
A: 비권장—게이트웨이·프록시 집결이 감사·최소 권한에 유리.
Q: 한 테넌트가 공용 퓨즈만 연다?
A: 테넌트 하위 카운터·선택 전역 상한; 개방 시 기여도 로그.
Q: CI가 일일 쿼터를 빨리 소진?
A: CI 전용 키(분당↑·일일↓), 별도 노드, 동시성·429 백오프.