2026 OpenClaw 관측 가능성 실전:
원격 Mac 게이트웨이에서 토큰 패널·모델 인증 상태를 E2E 스모크 실패 요약과 한 줄로 재현
대상: 원격 Mac에서 OpenClaw 게이트웨이 뒤에 Playwright 스모크를 돌릴 때 토큰 카운터는 움직이는데 모델 인증 상태가 멈춘 것처럼 보이는 팀을 위한 글입니다. 셸에서 바로 따라 할 재현 절차, 벤더 대시보드 로그인 없이 붙여 넣을 범용 Webhook 요약 JSON, 그리고 프론트 스모크 실패를 게이트 부하와 분리하는 관측 필드를 묶습니다. URL 예시: 2026-openclaw-token-auth-e2e-summary-remote-mac.html. 연관: /v1/models 스모크, 배포 훅·헤더 스모크, Trace·HAR 요약.
Trace는 DOM 회귀에는 강하지만 게이트웨이 백프레셔나 만료 직전의 베어러 스코프는 가립니다. 단계별 NDJSON에 auth_state·토큰 증분을 심으면 헬스 프로브 때문에 숫자만 오르는지, 인증 재시도에 갇혔는지 바로 갈라집니다.
대표 신호. 샤드는 초록인데 auth_state=degraded. 브라우저 기동 전에 프롬프트 토큰만 급등. 발급기와 러너 시계가 어긋나 JWT 만료가 앞당겨짐.
근거 소스 비교.
| 근거 | 잘 맞는 경우 | 맹점 |
|---|---|---|
| 클라우드 사용량 콘솔 | 월별 과금 분쟁. | 지연·배포 단위 OPENCLAW_RUN_ID 부재. |
| 게이트웨이 NDJSON + Webhook 요약 | 배포마다 멱등 요약으로 삼각 검증. | 호스트명·토큰 마스킹 규칙 필요. |
| Playwright report.json 단독 | 셀렉터 플레이크·trace 링크. | 모델 정책·인증 상태 신호 없음. |
재현 가능한 배선(다섯 단계).
OPENCLAW_RUN_ID·GIT_SHA·BASE_URL·스모크 프로필이 기대하는 모델 별칭을 동일 튜플로 export.- 게이트웨이를 호출하는 프로세스가 매 단계마다
.openclaw/reports/gateway.ndjson에phase·duration_ms·prompt_tokens·completion_tokens·auth_state·http_status를 append. - 원격 Mac에서
npx playwright test에 JSON 리포터를 켜report.json을 NDJSON 옆에 저장. - jq 또는 작은 Node 스크립트로 두 산출물을
smoke_summary/v1스키마로 병합하고 stdout에는 비밀을 찍지 않음. - 팀 Webhook으로 POST할 때
Idempotency-Key: ${GIT_SHA}:${OPENCLAW_RUN_ID}:smoke_summary로 중복 훅을 접기.
범용 요약 템플릿. 스키마 버전을 고정해 채널 파서가 깨지지 않게 합니다.
{
"schema": "smoke_summary/v1",
"openclaw_run_id": "run_…",
"git_sha": "abc123…",
"base_url": "https://staging.example",
"gateway": {
"auth_state": "ok|degraded|blocked",
"prompt_tokens": 0,
"completion_tokens": 0,
"last_http_status": 200,
"last_latency_ms": 0
},
"playwright": {
"status": "passed|failed|timedOut",
"failed_spec": "tests/smoke/checkout.spec.ts",
"shard": "webkit",
"exit_code": 1
},
"failed_phase": "gateway_preflight|playwright_smoke|summary_post"
}
01 게이트웨이 측 점검
클릭을 의심하기 전에 원격 Mac 셸에서 게이트를 고정합니다. 모델 목록 정렬은 모노레포 스모크 체크리스트와 같이 가되, 여기서는 필드를 로그로 남깁니다.
- 시계 오차. NTP 오프셋 ms를
auth_state옆에 한 줄로 기록. - 토큰 스코프. 러너가 쓰는 값과 동일한 경로로 헬스·모델 라우트를 먼저 두드림.
- 스티키.
x-request-id또는 업스트림 식별자로 버스트 구간을 묶음. - 별칭. 스모크와 동일 인그레스에서
/v1/models를 curl·jq로 고정. - degraded 의미. 읽기 전용 프로브만 허용하는지 문서화.
모든 게이트웨이 라인에 OPENCLAW_RUN_ID를 넣으면 NDJSON과 report.json을 한 번에 grep 할 수 있습니다.
prompt_tokens만 오르고 completion_tokens가 평평하면 프리플라이트 재시도 구간에서 브라우저 단언 이전에 막힌 겁니다.
채팅에는 stderr 4KB 상한만 두고 나머지는 아티팩트 링크로 보냅니다.
02 Playwright 리포트 필드와의 매핑
report.json의 안정 키를 요약으로 승격시키면 토큰이 움직이는데 UI만 실패할 때 분기가 쉬워집니다. 정규화 패턴은 빌드 메트릭 PR 요약 글과 동일하게 가져오면 됩니다.
| Playwright 소스 | 요약 필드 제안 | 게이트웨이 조사에 주는 이득 |
|---|---|---|
stats.expected 대비 stats.unexpected |
playwright.assertion_delta |
토큰은 흐르는데 인프라가 아닌 UI 플레이크인지 분리. |
workerIndex 등 샤드 메타 |
playwright.worker_index |
샤드별 게이트웨이 버스트와 시간축 정렬. |
errors[].message |
playwright.first_error |
사람이 읽는 한 줄 + trace 링크. |
timedOut이면 testTimeout과 gateway.last_latency_ms를 한 카드에 붙이세요. 지연은 낮은데 auth_state=blocked면 DOM 전에 자격 증명을 갱신합니다.
03 임계값 알림
서로 모순될 때만 페이지를 울리면 스테이징 피로가 줄어듭니다.
- 토큰 기울기. 프로필 중앙값 대비 5분 창에서 프롬프트 토큰 증가가 두 배인데
playwright.status가 passed인 불일치. - 인증 churn. 한
OPENCLAW_RUN_ID에서auth_state가 세 번 넘게 바뀌는데 회전 창이 없음. - 벽시계. 게이트웨이 지연은 평탄한데 Playwright 총 시간만 기준선 대비 반 이상 늘어남.
기준선 저장·운영 팁은 웹 운영 모니터링·트러블슈팅과 맞춰 두면 릴리즈 간 비교가 수월합니다.
04 FAQ
토큰 패널은 움직이는데 Playwright는 왜 실패하나요?
헬스·임베딩 재시도가 체크아웃 전에 토큰을 올립니다. 합계만 믿지 말고 NDJSON phase를 Playwright 프로젝트·샤드 이름과 조인하세요.
클라우드 콘솔을 아예 열지 않아도 되나요?
인그레스·게이트웨이·러너가 동일 필드를 stdout과 Webhook으로 내면 됩니다. 콘솔 전용 URL은 요약에 넣지 마세요.
요약 POST의 안전한 멱등 키는?
${GIT_SHA}:${OPENCLAW_RUN_ID}:${PROFILE}처럼 커밋·런·프로필을 묶으면 재배포 훅 중복을 접으면서도 두 번째 프로필 실행은 살릴 수 있습니다.
다음 읽을 거리: 콘솔 없이 Web·OpenClaw 파이프라인 이어가기
홈·요금·도움말은 로그인 없이 열람합니다. 이어서 배포 전 웹 스모크, E2E 로그 트리아지, 블로그 목록을 권합니다.