디스크 및 시스템 health
포털은 두 운영자 대시보드를 /admin 아래 노출합니다.
- /admin/health — 모든 컨테이너 서비스와 Trivy DB 신선도 카드의 현재 상태.
- /admin/disk — workspace와 데이터베이스 저장소 사용량(설정 가능한 hard limit 포함).
이 둘이 함께 사용자가 알아채기 전에 문제를 잡습니다.


대상 독자
호스트를 운영하는 super_admin. docker-compose ps와 기본 셸에 익숙해야 합니다.
시스템 health 대시보드
/admin/health 페이지는 포털이 의존하는 모든 컴포넌트를 나열합니다. 각 행:
- 컴포넌트 —
postgres,redis,celery,disk,active_scans,last_24h_errors중 하나. Trivy DB 신선도는 같은 페이지의 별도 패널에 표시됩니다(취약점 데이터 참고). - 상태 —
ok(녹색),degraded(노랑),down(빨강). UI 라벨은 로케일에 따라 다르나(EN 로케일은 "OK / Degraded / Down" 표시) API 계약은 위 소문자 enum을 발신합니다. - 상세 —
ok가 아닐 때의 오류 메시지 또는 텔레메트리 요약.
모든 프로브는 페이지(또는 API)가 요청하는 시점에 동기로 실행됩니다. 따라서 행마다 "마지막 점검" 시각이 따로 있는 것이 아니라 페이지 헤더에 마지막 갱신 타임스탬프 하나가 표시되며, 페이지의 모든 카드는 같은 프로브 실행 결과를 반영합니다.
대시보드는 React Query 폴링으로 자동 갱신됩니다(기본 30초; 사용자는 페이지 헤더에서 폴링을 일시 정지 가능). WebSocket 스트림이 아닙니다 — 벽 디스플레이를 원하는 운영자는 탭을 열어 두면 폴링 갱신에 의존할 수 있습니다.
Health 프로브
각 행은 services/admin_health_service.py의 실제 프로브에 매핑됩니다.
| 컴포넌트 | 프로브 |
|---|---|
postgres | 애플리케이션의 asyncpg 풀로 SELECT 1. |
redis | 동기 redis 클라이언트로 보내는 PING. |
celery | Celery control.ping이 고정된 2초 안에 응답하는지 확인하며, 값은 응답한 워커 수입니다. |
disk | Workspace 볼륨 사용량을 warn / critical 임계와 비교. |
active_scans | 현재 queued 또는 running 상태인 스캔 수. 정보성이며 큐 길이가 내부 임계를 넘으면 degraded로 표시됩니다. |
last_24h_errors | 최근 24시간 안에 종료 시각 기준으로 실패한 스캔 수. 정보성입니다. 이름은 과거 명칭이라 세는 대상과 맞지 않습니다. |
포털은 backend, worker, beat, frontend, traefik을 별도 프로브하지 않습니다. 이들의 liveness는 암묵적입니다 — 대시보드가 렌더되면 backend 가동 중, celery 행이 ok이면 worker(와 worker가 의존하는 broker)도 도달 가능.
endoflife.date 스냅샷 패널
Trivy DB·KEV 피드 패널 아래의 endoflife.date 스냅샷 패널은 Components 탭 EOL 배지의 데이터셋 상태를 보여줍니다.