2026 OpenClaw 프로덕션 관측성 최소 구성: 명령 사다리, JSONL, Gateway 프로브, Token 일일 점검 (Mac 클라우드 24/7)
첫 배포와 포트 18789는 끝났지만 프로덕션은 여전히 안개 속입니다. 운영·풀스택 엔지니어가 겪는 전형적 상황은 다음과 같습니다: UI가 녹색이어도 RPC 프로브가 건강하다는 뜻은 아닙니다, ERROR가 없다고 채널 전달이 성공한 것은 아닙니다, Token·spawn 사용량은 청구·대시보드가 튀기 전까지 조용히 나빠집니다. 이 글은 공식 트러블슈팅 명령 사다리에 맞추고, 2026 빌드에 맞는 JSONL 추적 순서, auth/bind·remote/local을 포함한 업그레이드 후 15분 검수, Prometheus 없이도 운영 가능한 사람 기준 일일 임계값을 정리합니다. 구조는 아래 목차 순이며, 무응답·heartbeat·sessions_spawn 글과 역할을 나눠 읽으면 「일회성 삽질」과 「재현 가능한 관측성」이 분리됩니다.
목차
1. 세 가지 고통: 에러가 없다고 충분하지 않은 이유
OpenClaw는 CLI 설정, 게이트웨이 프로세스, WebSocket/RPC, 채널 플러그인, 모델 프로바이더, sessions_spawn 같은 자식 세션까지 한 줄로 이어집니다. Mac 클라우드나 Linux VPS에서 흔한 멈춤 지점은 「프로세스 떠 있음 + 대시보드 열림」입니다. 이때는 층별 건강 증명이 없어 채널 이슈를 모델 품질 탓으로 돌리거나, gateway.mode=remote에서 URL만 바뀌었을 때 「OpenClaw 전체 붕괴」로 오인하고, Docker 볼륨 권한이 반쯤일 때를 무작위 플레이크로 치부합니다. 업그레이드 직후(OPENCLAW_*·SecretRef)에는 「겉으론 멀쩡한데 설정이 반쯤」인 회색 구간이 거의 필수적으로 생깁니다.
- 프로브 vs UI:
Runtime: running은RPC probe: ok를 대체하지 않습니다. remote 모드에서는 CLI가 엉뚱한 업스트림을 보고 로컬 게이트웨이는 놀고 있는 구성이 흔하며, 이때는 ERROR 대신 타임아웃만 길게 이어질 수 있습니다. - JSONL 규율: 구조화 로그는 고정된 읽기 순서가 있을 때 효과가 납니다. INFO heartbeat만 쫓다 보면 한 줄짜리
rate_limit·spawn_rejected를 놓칩니다. 먼저 레벨과 시간창으로 거른 뒤, 요청 ID로 묶으세요. - 비용·spawn 침묵: 토큰과 서브에이전트 호출은 UX상 「조금 느려진 정도」로만 느껴질 수 있습니다. 이 축은 sessions_spawn에서 다루는 샌드박스 권한 문제와 다릅니다. 여기서는 기준선과 단순 임계값이 필요합니다.
Docker를 쓰면 컨테이너 안팎에서 각각 openclaw doctor를 돌려 보세요. 결과가 갈리면 설정 이원화(split-brain)를 의심합니다. 절차는 Docker·doctor 가이드와 맞춥니다.
2. 신호 분류: 소음과 반드시 손봐야 할 것
아래 표를 온콜 문서 옆에 두고, P0는 배포 중지·원인 분리부터 시작합니다. P1은 채널/스폰 축으로, P2는 시간 동기화 등 환경 축으로 넘깁니다.
| 신호 | 우선순위 | 조치 | 하지 말 것 |
|---|---|---|---|
bind/auth 변경 직후 RPC probe: failed | P0 | 배포 중지; gateway.mode·bind·token diff | 먼저 npm 전역 재설치 |
프로바이더 429 연속 | P0 | 동시성 감소; long-context 토글; 지수 백오프 | 눈 가리고 재시도만 반복 |
| 채널 프로브 실패, 게이트웨이는 실행 중 | P1 | channels status --probe; 봇 스코프·웹훅 URL | temperature만 만지기 |
| spawn 수락됐으나 자식 산출물 없음(알려진 패턴) | P1 | 릴리스 노트 대조; 재시작 주기; spawn 심화 글 | 「모델이 게으르다」로 종결 |
| 단일 INFO heartbeat 누락 | P2 | NTP·시간 스큐 확인 | 야간 전면 리라이트 |
토큰 로테이션 시각과 프로브 실패 시각을 맞추려면 게이트웨이 토큰 하드닝 표와 함께 보관하세요.
3. 다섯 단계 이상: 사다리·업그레이드·일일 점검
- 명령 사다리(매일 또는 릴리스 전):
openclaw status→openclaw gateway status(Runtime + RPC probe) →openclaw doctor→openclaw channels status --probe. 순서를 바꾸지 마세요. remote 게이트웨이는gateway.remote.url이 CLI 목표·launchd(또는 systemd) 환경과 일치하는지 확인합니다. - JSONL 추적:
openclaw logs --follow(또는 지원되는 RPC tail)로warn/error, 키워드429·unauthorized·spawn을 우선 봅니다. 사용자에게는 조용한 실패가 많으므로 heartbeat·Cron 체크리스트를 병행합니다. - 업그레이드 후 15분: 버전이 릴리스 노트와 일치; 문서대로 서비스 재시작; doctor 무경고; 채널에 프로브 메시지; 최소 spawn 또는 cron 한 줄이 로그에 남음; auth/bind/SecretRef diff. 한 단계라도 실패하면 먼저 롤백(업그레이드 개요).
- Token 임계값: 팀이 합의한 규칙을 두 개 이상 둡니다. 예: 일일 토큰이 7일 중앙값 대비 +80% 이상이면 스탠드업에서 공유, 또는 1시간 내 spawn 실패율 >5%면 담당자 호출. 전체 메트릭 스택 없이도 실행 가능해야 합니다.
- Mac 클라우드 24/7: plist의
StandardOutPath·StandardErrorPath가 게이트웨이 로그 디렉터리와 맞는지 확인합니다. SSH로는 되는데 재부팅 후 깨지는 패턴은 launchd 환경 이슈와 같은 부류입니다. - Docker(선택): 사다리 1단계를 호스트와 컨테이너 양쪽에서 실행하고, 마운트된 설정을 단일 소스로 둡니다.
jq가 없으면 grep -E 'warn|error|429|unauthorized|spawn' 패턴을 Runbook에 박아 인수인계 시 흔들리지 않게 하세요.4. 감사·인수인계용 기술 메모
문서에 다음을 남기면 EEAT(경험·전문성·권위·신뢰) 측면에서도 유리하고, 장애 후 복기가 쉬워집니다.
- RPC 프로브 정의: 벤더 문서 기준으로 「성공」이 무엇인지 한 단락으로 고정합니다.
- JSONL 스키마: 업그레이드마다 추가·폐기된 필드를 릴리스 노트와 함께 버전 표기합니다.
- 429 백오프: 재시도 횟수 상한과 지연 곡선을 숫자로 적습니다(공통 오류 참고).
- spawn: 허용 병렬도 상한과 「실패율 집계 창」(예: 슬라이딩 1시간)을 명시합니다.
- 토큰: 게이트웨이 토큰 로테이션 주기와 최소 권한 표의 역할을 대응시킵니다.
- NTP: WebSocket·JWT류 인증 창과 맞물리는 허용 시계 오차(예: 수 초 단위)를 적습니다.
5. stdout만 쓰다가 Mac 클라우드 에이전트 베이스로
임시 데스크톱·노트북이나 범용 Linux 박스에 OpenClaw를 올리고 로그를 수동으로 모으는 방식은 단기 PoC에는 통하지만, 장기적으로는 환경 드리프트(패키지·경로·로케일), 무인 실행 시 로그 경로 불안정, 멀티 인스턴스 업그레이드 시 재현 어려움 세 가지 세금이 붙습니다. 화려한 대시보드만 사고 사다리·JSONL 필드 계약이 없으면 사고는 여전히 「감으로」 남습니다.
프로덕션 게이트웨이를 SSH·launchd가 일급인 탄력적 Mac 클라우드에 두면 사다리, JSONL 필드, plist 로그 목적지를 하나의 Runbook에 담고, 5분 배포 스캐폴딩과 자연스럽게 이어집니다. 감사 가능하고 복구 절차가 명확한 24/7 에이전트를 목표로 한다면, 단기 워크스테이션 믹스보다 VPSMAC M4 Mac 클라우드 임대가 상태 공간을 줄이고 운영 예측 가능성을 높이는 경우가 많습니다. 관측성은 화면 수가 아니라 알 수 없는 상태의 개수를 줄이는 일입니다.
6. FAQ
JSONL·jq 없이도 시작할 수 있나요?
가능합니다. 먼저 grep 키워드 집합과 네 단계 사다리를 팀 전체가 동일하게 쓰도록 고정하고, 이후 jq·필드 스키마를 얹으면 됩니다.
remote와 로컬 모니터링 차이는?
remote는 CLI URL·토큰·서비스 환경변수가 한 세트로 맞아야 합니다. 장애를 연결성·인증·「다른 인스턴스를 보고 있음」으로 쪼개세요.
sessions_spawn 글과 어떻게 나누나요?
그 글은 샌드박스·권한에 초점을 둡니다. 이 글은 일상 건강·업그레이드·비용 임계값입니다. 인시던트에서는 둘 다 열어두는 것이 안전합니다.