Files
kis_trader/docs/LS_WS_관측_예약.md
Your Name 5e44b86f8b fix(시세): LS spill-only·토큰 파일캐시·호가 snap_time 3초컷
- _feed_fallback 미러 OFF, LS cap/grace/hold RAM을 KIS·키움 spill과 정합
- LS 접근토큰 .ls_token_cache_*.json (재시작 재사용, revoke 루프 없음)
- 호가 RAM을 틱과 동일 LIVE_FEED_FALLBACK(snap_time)로 컷, 필터 max_age=0은 유지
- 익절 지정가 로그에 실제 호가 벤더(kis/kiwoom/ls 1·2·3차) 표기

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-27 15:21:21 +09:00

4.3 KiB

LS WS 저널 관측 (Bye / sends≈1 / abort_why / RSP)

8/25형 불완전 REG (OPEN sends≈1 → Bye 반복) 와 관측 패치 필드 (abort_why, ws_same, LS WS RSP) 를 장중 hold 구간에 자동 수집한다.

장외(hold 외)에는 LS 소켓이 없어 OPEN/Bye 가 없는 것이 정상이다.


1. 파일 목록

경로 역할
scripts/observe_ls_ws_journal.py journalctl 수집·집계 (once / watch)
scripts/observe_ls_ws_journal.sh cron용 래퍼 (stdout → 일별 래퍼 로그)
docs/LS_WS_관측_예약.md 본 문서
logs/ls_ws_observe_YYYYMMDD_HHMMSS.log 매칭된 저널 원문
logs/ls_ws_observe_YYYYMMDD_HHMMSS_summary.md 집계 요약 (sends 분포, abort_why, …)
logs/ls_ws_observe_cron_YYYYMMDD.log cron/래퍼 실행 로그 (그날 누적 append)

관련 코드(관측 필드 출력):

경로 내용
kis_trader/ws/ls_ws.py LS WS OPEN … abort_why= / CLOSE … ws_same= / LS WS RSP …
kis_trader/utils/ls_ws_session_windows.py KR hold 기본 07:00~20:00

유닛: kis_trader_main.service


2. 수동 실행

cd /home/hoon/kis_bot

# 당일 00:00~지금 1회 집계
python3 -u scripts/observe_ls_ws_journal.py --once

# hold 시각부터 지정
python3 -u scripts/observe_ls_ws_journal.py --once --since "2026-08-26 07:00:00"

# 90분 폴링(2분 간격) 후 최종 집계 — 아침 재현용
python3 -u scripts/observe_ls_ws_journal.py --watch --minutes 90 --interval 120

# 래퍼 (cron과 동일, 로그 append)
bash scripts/observe_ls_ws_journal.sh watch
bash scripts/observe_ls_ws_journal.sh once --since "2026-08-26 07:00:00"

실행 후 stdout 에 raw= / summary= 경로가 찍힌다.

# 최신 요약 보기
ls -lt logs/ls_ws_observe_*_summary.md | head -3
tail -f logs/ls_ws_observe_cron_$(date +%Y%m%d).log

3. cron 예약 (평일 아침)

KR hold 기본 07:0007:05 에 90분 watch 시작 (약 08:35 종료).

설치 (사용자 hoon crontab):

# LS WS Bye/REG 관측 — 평일 07:05 KST, 90분 watch
5 7 * * 1-5 /home/hoon/kis_bot/scripts/observe_ls_ws_journal.sh watch

장 마감 후 하루 요약(선택):

# LS WS 당일 전체 once 요약 — 평일 20:10 (hold 종료 직후)
10 20 * * 1-5 /home/hoon/kis_bot/scripts/observe_ls_ws_journal.sh once --since "$(date +\%Y-\%m-\%d) 07:00:00"

확인:

crontab -l | grep observe_ls_ws

제거:

crontab -l | grep -v observe_ls_ws_journal | crontab -

4. 요약 파일이 보는 것

집계 의미
LS WS OPEN + sends≈N 분포 N=1 다수 → 불완전 REG 의
abort_why opened_cleared / not_running (REG 루프 중단 사유)
ws_same CLOSE/ERROR 가 현재 소켓인지
LS WS RSP / rsp_cd REG ACK (body 없는 응답 포함)
Bye / opcode=8 서버/연결 종료 시그니처
hold 관련 장외 대기 중이면 OPEN=0 이 정상

힌트 문구는 가설이다. abort_why·ws_same 없이 “고쳤다”고 단정하지 말 것.


5. 8/25 참고 시그니처 (이미 확인된 것)

  • 장중 sends≈1 OPEN 다수 (예: 373) + Bye/CLOSE 반복 (~1400대)
  • 정상급 sends≈15 이상은 소수
  • 당시 프로세스에는 abort_why / ws_same / LS WS RSP 없음 (관측 패치 전)
  • 재시작 후 hold 진입분부터 새 필드가 찍힘

6. 운영 체크리스트

  1. 전날/당일 kis_trader_main 재시작으로 관측 패치·틱 구독전체 적재 코드 반영 확인
  2. 평일 07:05 cron → logs/ls_ws_observe_cron_YYYYMMDD.log append 확인
  3. *_summary.md 에서 sends≈1 비율·abort_why·ws_same 확인
  4. 원인 확정 후에만 행동 패치(REG 재시도 / stale close 무시 등) — 선보고·승인
  5. LS_WS_TICK_SAVE=true 여도 Bye로 구독이 죽으면 ls_ws_ticks 는 0

7. 의존

  • journalctl 읽기 권한 (동일 사용자 유닛 또는 systemd user)
  • Python 3, 레포 루트 /home/hoon/kis_bot
  • DB/증권사 API 호출 없음 (저널만)

8. 변경 이력

일자 내용
2026-08-26 스크립트·cron 문서 최초. 재시작 후 장외 hold 대기로 당일 새벽 재현 불가 → 07:05 watch 예약