macOS에서 OpenClaw 게이트웨이는 잘 돌아갈 때 눈에 잘 띄지 않습니다. LaunchAgent가 포트에 장기 프로세스를 올리고, 에이전트는 루프백으로 호출하며 로그는 조용합니다. 클라우드 재부팅, TLS 순환, CLI 부분 업그레이드 뒤에는 데몬이 소리 없이 멈추고 고객 트래픽이 끊길 때까지 알아채지 못하는 경우가 많습니다. 이 글은 임대한 클라우드 Mac mini에 맞춰 헬스 모니터링을 설계하는 법을 정리합니다: 합성 프로브, 지연 예산, openclaw doctor와의 정합, 복구 런북 연결입니다. 먼저 OpenClaw doctor 게이트웨이 진단을 읽어 사람의 트리아지와 같은 불변 조건을 프로브에 실으세요. 게이트웨이 재시작과 LaunchAgent 복구도 함께 열어두고, 알림은 즉흥 셸 히스토리가 아니라 그 문서로 끝나야 합니다.
장애 징후
건강한 게이트웨이는 가벼운 HTTP/WebSocket 핸드셰이크에 안정적으로 응답하고, 구조화 로그에 스파이크가 없으며 CPU도 유휴와 버스트 사이에서 예측 가능합니다. 비정상일 때는 완전 실패 전에 p95 지연이 치솟거나, 인증서 변경 뒤 TLS 오류가 반복되거나, macOS가 캐시했던 TCC를 거부해 프로세스가 종료되기도 합니다.
openclaw doctor 출력을 계약으로 보세요. doctor는 통과인데 프로브가 실패하면 바이너리 밖 경로·포트 포워딩을 의심합니다. 프로브는 성공인데 doctor가 버전 경고를 내면 호환성 붕괴가 코앞입니다. 두 신호를 같은 인시던트 타임라인에 남기세요.
공유 mini를 쓰는 소규모 팀 텔레메트리에서는 주간 알림의 약 5–8%가 스냅샷, 호스트 네트워크 등 양호한 유지보수 창에서 옵니다. 임계값은 페이저 피로와 몇 분 내 진짜 회귀 탐지 사이에서 조정하세요.
파일 디스크립터와 로그 로테이션을 함께 봅니다. 상한 없는 로그는 헬스 엔드포인트와 같은 프로세스를 압박합니다. 멀티테넌트면 사용자·포트·로그 디렉터리를 분리해 이웃이 FD를 고갈시키지 않게 합니다.
doctor 출력을 버전 관리하세요. 릴리스 간 diff에 새 검사가 자주 포함되며, 프로브도 같은 스프린트에 맞춰 따라가야 합니다.
합성 프로브 설계
좋은 프로브는 최소 성공 상호작용을 모방합니다. 필요 시 인증, 헬스 라우트나 소켓, 버전 헤더, 타임아웃 시 비영 종료. 세 관점: localhost(바인드/데몬), 바스티온·VPN(라우팅), 의도적으로 노출하지 않는 한 외부는 피합니다.
launchd로 스로틀을 걸어 멈춘 게이트웨이가 수백 개의 curl을 동시에 만들지 않게 합니다. 지터와 지수 백오프로 사고 중 자기 DOS를 막습니다.
보안: syslog에 남는 명령에 장수명 토큰을 넣지 마세요. 짧은 자격 증명, 엄격한 env 파일, 프로덕션을 반영한 전용 프로브 사용자의 키체인 접근을 선호합니다.
스테이징에 네거티브 테스트(잘못된 토큰)를 추가해 기대되는 401/403과 예기치 않은 5xx를 구분합니다.
예제 스크립트
예시 셸입니다. 포트와 헤더를 맞추세요.
#!/bin/bash
set -euo pipefail
URL="http://127.0.0.1:18789/health"
START=$(python3 - <<'PY'
import time; print(int(time.time()*1000))
PY
)
code=$(curl -sS -o /tmp/ocgw_probe.json -w "%{http_code}" "$URL" || true)
END=$(python3 - <<'PY'
import time; print(int(time.time()*1000))
PY
)
lat=$((END-START))
echo "openclaw_probe http=$code latency_ms=$lat"
[[ "$code" == "200" ]] || exit 1
구조화된 한 줄을 로그 싱커나 메트릭 익스포터로 보냅니다. 성공 시 1초 이내를 목표로 하세요.
SLO 표
서비스 리뷰에 사용하고 제품 약속에 맞게 조정하세요.
| 지표 | 목표 | 메모 |
|---|---|---|
| 월간 가용성 | 99.5%+ | 계획된 창은 별도 공지. |
| localhost p95 지연 | < 300 ms | 스파이크는 소켓 고갈 전조. |
| 실패 프로브 | < 5–8% / 주 | 단발이 아니라 패턴을 봅니다. |
| doctor 드리프트 | 경고 0 | 버전 어긋남은 고객보다 먼저 페이지. |
정량 SLO는 정성 점검과 짝을 이룹니다. 스프린트마다 doctor를 수동 실행하고 ~/Library/Logs 타임스탬프를 확인하세요.
주간 클라우드 Mac 운영
임대 mini는 마이그레이션이나 커널 패치로 재부팅됩니다. 재부팅 뒤 LaunchAgent 순서, 시크릿 읽기, doctor 재실행을 확인한 뒤 녹색을 선언하세요.
주당 30–45분을 예방 유지보수에: 대시보드, 짧은 자격 증명 순환, 위험한 업그레이드 전 스냅샷. 예비 장비가 없으면 바쁜 주에 SSH/VNC 있는 Apple Silicon Mac mini를 약 $16.9/일에 빌릴 수 있어 긴급 노트북 배송보다 저렴하고 빠른 경우가 많습니다.
알림 경로를 문서화: Slack, PagerDuty, 재프로비저닝 스크립트. 멀티테넌트는 테넌트별 프로브 사용자를 분리합니다.
루프를 닫습니다: 알림 → doctor → 통제된 launchctl 재시작 → plist/경로/버전 드리프트가 입증될 때만 바이너리 재설치.
상관관계가 빨강/초록보다 중요합니다. HTTP 200인데 지연이 오르면 이벤트 루프 정체, 큰 JSON, 동기 디스크 I/O, 신규 로그에 대한 백신 스캔을 의심하고 sample/spindump를 티켓에 붙입니다. 다중 게이트웨이는 사용자·포트·로그를 분리합니다.
모니터링 코드를 제품 코드처럼: 리뷰, 버전, 인터프리터 고정, 체크섬 감시.
경영용 타일: 가용률, 중앙값 지연, 미해결 인시던트. 셋이 동시에 악화되면 인프라 문제이지 프롬프트 문제가 아닙니다.
링크된 두 문서로 온콜 훈련: doctor는 증거, 재시작 글은 레버입니다.
FAQ
헬스 체크는 root와 게이트웨이 사용자 중 무엇으로?
LaunchAgent 사용자와 맞추세요. root는 권한 문제를 숨기고, 잘못된 UID는 키체인·소켓 경로를 놓칩니다.
합성 프로브는 얼마나 자주?
가용성은 최소 1분에 한 번. 더 촘촘한 카나리아는 백오프가 있어야 합니다. SLO 오류 예산에 맞추세요.
멈춘 게이트웨이를 가장 빨리 복구하려면?
doctor → LaunchAgent 재시작 → 드리프트가 증명되면 재설치. 순서를 문서화하세요.
Mac mini(Apple Silicon)는 지속 권한과 예측 가능한 launchd가 필요한 OpenClaw 게이트웨이에 실용적인 기반입니다. MacHTML은 SSH/VNC가 있는 베어메탈 클라우드 mini를 제공해 프로브를 연결하고, 장애를 리허설하며, 새 CapEx 없이 환경을 해체할 수 있게 합니다.
클라우드 Mac mini에서 OpenClaw 모니터링 운영
게이트웨이 프로브를 올리고 doctor 출력과 합성 메트릭을 대조하며 LaunchAgent 복구를 리허설하기 위해 Apple Silicon Mac mini 시간을 빌리세요.