virtual-insanity
← 리포트 목록

실패 패턴 분석 — 2026-08-16

2026-08-16 failure [ops, failure-analysis, cron, model-cooldown]

실패 태스크 분석 — 2026-08-16

분석 기준: ~/.hermes-next/cron/executions.db executions 테이블


요약

전체 failed 레코드: 101건 (job 기준 6개 고유 job_id)

유형별 집계: - 모델 쿨다운 (HTTP 429 usage_limit_reached): 98건 (97%) - 코드오류 (타임아웃): 1건 - 데이터소스 (스크래핑 실패): 1건 - 집계 리포트 (정상 차단): 1건


유형 1: 모델 쿨다운 (98건, 구조적 반복 실패)

해당 job: - research-broker-port-monitor-0500 — 60건 (새벽 5~6시, 2분 간격) - research-broker-retry-0600 — 36건 (새벽 6~8시, 5분 간격) - 3a99cd25f740 (주간 판단 복기) — 1건 - a406662969a7 (주간 판단 복기 duplicate) — 1건

오류 패턴:

RuntimeError: HTTP 429: {"error":{"type":"usage_limit_reached",
"plan_type":"prolite","resets_at":1787196898}}

쿨다운 리셋 시각: 2026-08-20 12:34 KST (분석 시점 기준 약 4일 후)

구조적 원인: research-broker 계열 두 크론이 새벽 5~8시 동안 총 60+36=96회 실행되며 claude-opus-5를 반복 호출한다. prolite 플랜 일일 한도를 단독으로 소진하는 구조. 이 두 잡이 running 상태에서 다른 모든 opus-5 의존 크론(28개 확인)이 연쇄 실패한다.

재발 조건: research-broker 크론이 현재 스케줄/모델 조합을 유지하는 한 매일 새벽 동일 패턴 반복.

권고 조치: 1. research-broker 두 크론 실행 간격 확대 (현재 2분/5분 → 15분 이상) 2. claude-opus-5 → claude-sonnet-4 계열 모델 교체 (한도 소비 절감) 3. 또는 두 크론을 통합하여 한 번만 실행 (중복 재시도 구조 재설계)


유형 2: 코드오류 — 타임아웃 (1건)

job: geopolitical-monitor-daily 발생 시각: 2026-08-16 06:15 KST 스케줄: 06:15, 21:15 매일

오류 위치:

geopolitical_monitor.py line 1353 — time.sleep(8)  # GDELT rate limit
→ TimeoutError: Operation timed out after 480 seconds

원인: 9개 지역 순차 수집 × 지역당 GDELT rate limit 8초 sleep → 480초 초과. TARGET_TIMEOUT_SECS=480이 현재 수집 볼륨 대비 부족.

재시도 가능: 예 (코드 수정 후) 수정 방법: TARGET_TIMEOUT_SECS=900 또는 지역 3개씩 분할 크론 3개로 분리.


유형 3: 데이터소스 — 스크래핑 실패 (1건)

job: ocTC-twitter-collector 발생 시각: 2026-08-16 06:23 KST 스케줄: 매일 06:20

오류 패턴:

[WARN] Following sync using scrapling fallback (twikit disabled)
Total followings fetched via scrapling: 0
[WARN] twikit ClientTransaction fallback enabled: Couldn't get KEY_BYTE indices
@dair_ai: error

원인: twikit이 비활성화된 상태에서 scrapling fallback이 @BooamRip 팔로잉 리스트를 0명 반환. ClientTransaction KEY_BYTE 인덱스 파싱 실패로 개별 계정 수집도 오류. 146개 계정 수집 시도 자체는 진행됐으나 데이터 품질 불명.

재시도 가능: 예 (twikit 인증 갱신 또는 scrapling 파싱 로직 수정 후)


유형 4: 집계 리포트 정상 차단 (1건)

job: meta-monitor-daily 발생 시각: 2026-08-16 09:07 KST

내용: exit code 1이지만 실질 동작은 정상. 등급 게이트(level=info)에 의해 텔레그램 발송 차단. 28개 job 오류 현황(대부분 429) 집계 보고 자체는 완료. "failed" 기록은 발송 차단 → exit 1 처리 방식에서 기인.

구조적 이슈: 발송 차단을 실패로 기록하는 방식이 오탐을 유발. exit code 0으로 정상 종료하는 방향 검토 필요.


ops_todos 등록 결과

# 제목 우선순위 상태
1 research-broker 스케줄/모델 구조개선 high todo
2 geopolitical-monitor 타임아웃 증가 normal todo
3 twitter-collector twikit 복구 normal todo
4 주간 판단 복기 쿨다운 후 재실행 normal todo

재발 방지 핵심 지점

  1. prolite 플랜에서 claude-opus-5를 고밀도 크론(2분 간격)에 사용하는 것은 구조적으로 지속 불가.
  2. research-broker 두 잡이 한도를 소진하면 28개 이상의 크론이 연쇄 실패한다 — 단일 장애점.
  3. meta-monitor exit code 처리 방식이 정상 동작을 실패로 기록 — 오탐 노이즈 증가.

작성: cowork | 2026-08-16 16:xx KST