콘텐츠로 이동

트러블슈팅

수집 실패 (scrape_failed)

증상

로그에 collect_failed 또는 DB에 status=FAILED 스냅샷이 기록됨.

원인별 대응

1. HTTP 요청 실패 (ConnectionError, Timeout)

collect_failed  error=ConnectionError(...)
- 원인: 대상 사이트 일시 장애 또는 네트워크 문제 - 대응: 1~2시간 후 자동 재수집됨. 지속 실패 시 사이트 접속 가능 여부 확인
curl -I https://m.daum.net/

2. HTML 구조 변경 (파싱 결과 0건)

scrape_done  keyword_count=0
- 원인: 대상 사이트가 HTML 구조를 변경함 - 대응: 1. RustFS Bronze에서 최근 raw.html을 다운로드하여 구조 확인 2. scraper/daum.py의 CSS 선택자(a[href*="DA=RT1"]) 수정 3. tests/test_daum_scraper.py에 새 HTML 구조 테스트 추가 4. 이미지 재빌드 후 배포

3. 새벽 시간 데이터 부족

  • 원인: 다음 트렌드는 01:00~06:00 사이 데이터가 제한적으로 제공됨
  • 대응: 정상 동작임. status=EMPTY 스냅샷이 기록될 수 있음

DB 연결 실패

증상

sqlalchemy.exc.OperationalError: Can't connect to MySQL server

대응

  1. MySQL 서버 상태 확인:
    mysql -h 192.168.56.104 -P 13306 -u haotoday -p -e "SELECT 1"
    
  2. trend_collector database 존재 여부 확인:
    mysql -h 192.168.56.104 -P 13306 -u haotoday -p -e "SHOW DATABASES"
    
  3. 네트워크 확인:
    telnet 192.168.56.104 13306
    

RustFS 저장 실패

증상

bronze_save_failed  error=...

대응

Bronze 저장 실패 시에도 DB 저장은 정상 진행되므로 데이터 유실은 없음.

  1. RustFS 접속 확인:
    curl http://192.168.56.104:9000/minio/health/live
    
  2. 인증 키 확인:
    docker exec trend-collector env | grep RUSTFS
    
  3. 버킷 존재 확인:
    aws --endpoint-url http://192.168.56.104:9000 s3 ls s3://haotoday/data/bronze/trend/
    

수동 재수집

컨테이너 재시작 시 즉시 1회 수집을 실행한다:

docker compose restart

또는 컨테이너 내부에서 직접 실행:

docker exec trend-collector python -c "
import sys; sys.path.insert(0, '/app/src')
from trend_collector.main import collect_job
collect_job()
"