2026 OpenClaw 로깅: JSONL 진단, 로테이션, 상관—렌탈 ProxyMac Mac mini
홍콩·일본·한국·싱가포르·미국의 ProxyMac Mac mini 에서 OpenClaw 를 돌리는 팀은 관측 가능성보다 기능을 먼저보내고, Webhook 재생이 실패한 주말에 콘솔 잡음을 diff 하며 보내는 경우가 많습니다. 좋은 로그는 «텍스트를 더 쌓는 것»이 아니라 안정된 필드 이름의 구조화 JSON Lines, 인시던트 재생을 위한 최소 14일 보존, APFS 에서 500ms 미만 디스크 fsync 예산, HTTP 게이트웨이 요청을 데몬 결정에 꿰매는 상관 ID 입니다. 이 가이드는 자동화에 JSONL 이 예쁜 콘솔 모드보다 나은 이유, 세 가지 싱크 전략 표, M4 디스크 처리량에 맞춘 로테이션 수학, 수신 Webhook 에서 에이전트 추적으로 ID 를 흘리는 방법, stdout/stderr 경로·스로틀·크래시 전용 코어 덤프 비활성 등 6항목 LaunchAgent 체크리스트, 그리고 헬스 프로브·GitOps 설정·배포 트리아지 링크를 묶어 로그를 고고학이 아닌 증거로 만듭니다.
도움말 센터 온보딩에서 시작하고, 장애 시 장황한 프로바이더 추적을 켤 때 스토리지가 재무를 놀라게 하지 않도록 요금 티어로 크기를 잡으세요.
로깅은 제품 기능이지, 사후 디버그의 덧붙임이 아니다
감사인이 자율 에이전트가 고객 데이터에 어떻게 접근했는지 물을 때 Terminal.app 스크린샷은 증거가 되지 않습니다. trace_id·actor·tool·latency_ms 를 담은 내구 JSONL 이면 SIEM 이 이미 색인한 행과 조인할 수 있습니다. Apple Silicon 미니에서는 열 로깅도 중요합니다. 시간당 80MB 를 꾸준히 append 하면 SSD 컨트롤러가 바빠져 SQLite 기반 에이전트 메모리에서 IOPS 를 빼앗을 수 있어 로테이션은 장식이 아닙니다.
- 금융 API는 변경 불가 append 전용 증거를 요구합니다—JSONL 을 주간으로 객체 스토리지에 복사하는 «WORM 라이트»로 취급하세요.
- 모델 벤더 분쟁에는 어떤 API 키가 어떤 엔드포인트를 호출했는지 타임스탬프로 증명해야 하며 벤더 대시보드만으로는 부족합니다.
- 크로스 리전 페일오버 테스트는 요청마다 리전 태그가 로그에 있어야 의미가 있습니다—프로바이더 페일오버 가이드를 보세요.
JSONL 롤링 진단 vs 콘솔 vs 원격 SIEM
| 싱크 | 적합 용도 | 카디널리티 리스크 | 운영 비용 |
|---|---|---|---|
| APFS 롤링 JSONL | 에이전트 도구 추적, 재생 | 중—스키마 규율 필요 | 낮음—로컬 jq |
| Unified Logging 술어 | macOS 서브시스템 크래시 | 높음—프라이버시 편집 | 중간—Console 숙련 |
| 원격 syslog / HTTP 십퍼 | 중앙 SOC | 높음—네트워크 분단 | 높음—키와 TLS |
보안 설문을 통과하는 로테이션 수치
일일 로테이션과 로컬 압축 세대 14개 보존을 기본으로 하고, 컴플라이언스가 90일 소급을 요구하면 주간으로 불변 객체 스토리지에 밉니다. 가능하면 zstd 로 압축해 로테이션 구간의 M4 CPU 를 15% 미만으로 둡니다. 파일 수명 검사를 합성 프로브와 짝지어 디스크가 가득 차 launchd 가 쓰기를 거부하기 전에 빨간 메트릭이 되게 합니다.
#!/bin/bash
# 예: 에이전트 시작 전 용량 가드
MAX_GB=6
USED=$(du -sg ~/Library/Logs/OpenClaw | awk '{print $1}')
if [ "$USED" -ge "$MAX_GB" ]; then echo "log_quota_exceeded" >&2; exit 3; fi
Webhook 상관: 게이트웨이 로그를 에이전트 JSONL 에 꿰기
수신 Webhook 가이드대로 TLS 를 localhost 에서 종료한 뒤, 들어오는 X-Request-Id(또는 히트당 UUID4)를 OpenClaw 태스크 컨텍스트로 전파합니다. JSONL 라이터는 같은 ID 로 결정 한 줄을보내 지원이 nginx 급·게이트웨이·에이전트 파일을 한 문자열 grep 으로 따라갑니다. 재시도 시 루트 ID 를 바꾸지 말고 접미로 순번(-r2)을 붙입니다—청구 팀은 모호한 조인을 싫어합니다.
프로덕션을 «끝»이라 부르기 전 LaunchAgent 래퍼 체크리스트
- WorkingDirectory 는
~/.openclaw또는 문서화된 상태 디렉터리—Desktop 동기 폴더가 아님. - StandardOutPath 와 StandardErrorPath 는
~/Library/Logs/OpenClaw/아래, 퍼미션644. - ThrottleInterval 은 10초 이상으로 크래시 루프가 LaunchServices 를 두드리지 않게.
- EnvironmentVariables 에
TZ=UTC를 넣어 리전 간 로그 시각을 맞춤. - KeepAlive true 는 종료 코드를 신뢰한 뒤에. 아니면 오탐이 부팅 폭풍을 가림.
- ProcessType Interactive vs Background 는 권한 글에 문서화된 TCC 가정과 일치.
프로브·GitOps·트리아지로 연결—본문 복제는 아님
JSON 오류율이 치솟으면 먼저 설정 GitOps 에 기록된 마지막 승격을 diff 합니다. 로그 레벨 오타는 가장 싼 롤백입니다. 비결정적이면 배포 복구로 에스컬하고 첨부는 회전된 최신 3개 파일 tarball 만—디스크 전체는 유출하지 마세요. 동시성으로 로그가 뒤섞이면 병렬 에이전트 가드레일 로 돌아가 워커마다 파일 접두를 나눈 뒤 상류에서 병합합니다.
FAQ
JSONL 을 stdout 만으로 스트리밍해도 되나? 개발에선 예. 프로덕션은 항상 회전 파일과 짝지어 사용자 로그아웃 뒤에도 launchd 가 잡도록.
장황한 로깅이 모델 호출을 느리게 하나? 그럴 수 있음—전후 p95 지연을 재고, 때로 전체 DEBUG 보다 INFO 와 샘플링 DEBUG 가 낫습니다.
GDPR 삭제는? 개인 데이터 위치의 필드 수준 맵을 유지해 무관 테넌트 샤드를 지우지 않고 JSONL 을 날짜 범위로 삭제하세요.
OpenClaw 로그를 ProxyMac Mac mini 에 모을 이유
Apple Silicon M4 는 빠른 APFS 압축, 로그 십퍼 자격 증명의 네이티브 Keychain 통합, 에이전트와 로그 싱크를 HK / JP / KR / SG / US 한 대에 공존시키기에 충분한 지속 IOPS 를 줍니다. 렌탈은 컴플라이언스가 보존 기간을 하룻밤에 두 배로 해도 CapEx 논쟁이 필요 없고, 이 글을 리전별 요금과 함께 읽으면 재무와 같은 페이지에 설 수 있습니다. 권한 프롬프트는 VNC 로 사람을 끼우고, JSONL 을 코드 산출물처럼 아카이브하면 로그는 잡무가 아니라 경쟁 우위가 됩니다.