- 기본 로그는 구조화된 JSON(
event: "http_request")으로 남깁니다. trace_id를 기준으로 요청, 에러, 장애 대응을 상호 연결합니다.- 토큰 응답/비밀번호/비밀키를 절대로 로그에 출력하지 않습니다.
- 최근 15분 로그에서
route=/exchange의status_code >= 500빈도를 확인 - GitHub API 상태(외부 장애) 또는 OIDC JWKS 장애 판단
ERR_GITHUB_INSTALLATION이면details.field확인:token은 빈 token 응답,expires_at은 만료시각 파싱 실패wrangler tail --format json또는 Cloudflare 로그로 동일trace_id집계- 복구 실패 시
/health정상 여부 확인 후 즉시 고객 공지
error_code중ERR_AUTH_INVALID,ERR_TOKEN_MALFORMED비율을 확인- 중앙 워크플로
workflow_ref변경/권한 오정렬 여부 확인 ALLOWED_WORKFLOW_REF_PREFIX,ALLOWED_AUDIENCE값 재점검ERR_OIDC_VERIFICATION이 signingkid변경 시점과 맞물리면 JWKS refresh 이후 재시도 여부 확인- 필요 시 임시적으로 허용 prefix를 협의 후 원복
ERR_VALIDATION_INPUT중details.field=target_repository비율을 확인- 고객 workflow가
target_repository를 문자열owner/repository로 전달하는지 확인 - Method 오류가 반복되면 호출자가
/exchange에POST를 사용하고 405의Allow: POST를 반영하는지 확인
p95 latency_ms를 대시보드로 확인- GitHub API 호출 실패 반복 여부 확인
- 네트워크/Cloudflare 전송량 변화와 연결
- 필요시 캐싱 정책과 배포 지역 분산 검토
details.client_hash기준으로 동일 클라이언트 반복 호출 여부 확인- 고객 워크플로 재시도 설정이
Retry-After헤더를 존중하는지 확인 - 정상 트래픽이면
NOEMA_RATE_LIMIT_PER_MINUTE상향 또는 Cloudflare WAF allowlist를 검토 - 비정상 트래픽이면 고객/소스 IP 단위 차단 정책을 적용
- 장애 발생 시 즉시 직전 버전으로 롤백 (
wrangler rollback또는 CI 배포 정지) - Secret 회수 필요 시 기존 PEM을 폐기하고 새 App key로 교체
- 새 키는 1회성 채널로 전달 후, 이전 키는 24시간 내 폐기
- 24시간 내 복구 리포트와 대응원인/재발 방지 액션 기록