실패 태스크 분석 — 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 |
재발 방지 핵심 지점
- prolite 플랜에서 claude-opus-5를 고밀도 크론(2분 간격)에 사용하는 것은 구조적으로 지속 불가.
- research-broker 두 잡이 한도를 소진하면 28개 이상의 크론이 연쇄 실패한다 — 단일 장애점.
- meta-monitor exit code 처리 방식이 정상 동작을 실패로 기록 — 오탐 노이즈 증가.
작성: cowork | 2026-08-16 16:xx KST