개요 — 무엇을 하나
개요(Overview) 는 로그인 후 처음 만나는 통합 관제 랜딩(/)입니다. 가용성(availability)과 보안(security)을 하나의 화면에서 관통해 보여 줍니다 — 상단은 헬스 스코어·KPI·탐지, 하단은 서버 함대의 부하/메모리/네트워크/스토리지 시계열 스트립입니다.
핵심 특징:
- 융합 합성 스코어 2개 — 가용성 게이지(비보안 수집정보 전체의 가중 합성)와 보안 게이지(24시간 탐지 근거의 가중 합성)가 나란히.
- 8개 KPI 카드 — 서버·부하 피크·메모리 피크·네트워크 피크·위협·백업 + (데이터 있을 때) 웹 서비스·데이터베이스.
- 탐지 도넛(24h) — IDS 경보 / AI 이상탐지 / 웹 공격 / 스캔·차단 4분류.
- 서비스 성능 패널 — 웹·DB "개별 서비스" 하나를 골라 게이지로(전체 합산이 아님).
- 풀폭 서버 스트립 — Load / Memory / Network / Storage, 6h·24h·3d 시간창 토글, 화면 분할(1·2·3), 높이 슬라이더, 선형/로그 스케일.
- 라이브 폴링 — 값싼
rev(최신 seq) 체크로 변경이 있을 때만 무거운 payload 를 in-place 로 교체.
모든 수치는 수집기가 Laravel 밖에서 직접 DB에 적재한 실데이터입니다. 레거시 DB가 미가용이거나 데이터가 없으면 컨트롤러가 구조가 동일한 mockup(데모) 으로 graceful fallback 하며, 이때
source는mockup,rev는0이라 프론트는 재렌더를 건너뜁니다.
언제 쓰나
- 하루를 시작하며 "지금 무엇이 아픈가" 를 30초 안에 파악할 때 — 게이지 색과 근거 심볼로 어느 축(통신·부하·메모리·디스크·RAID·백업 / IDS·AI·웹·방화벽·평판·TLS)이 감점됐는지 바로 읽힙니다.
- 관제 벽(monitoring wall) 구성 — 화면 분할·페이징으로 여러 모니터에 나눠 대형 벽을 만들 때(전체 화면 모드).
- 특정 서버의 부하·디스크 스파이크가 언제 발생했는지("N분 전")를 되짚을 때.
- 세부 화면(Infrastructure ▸ Servers·Security ▸ Overview 등)으로 파고들기 전의 출발점.
화면 구성
상단 히어로
제목·태그라인("즉시 대응 · 자동 준비 · 상시 복원") + 우측에 수집 시각(stamp)·호스트 수, LIVE/PAUSED 토글, 전체 화면 버튼.
헬스 스코어(좌)
가용성·보안 두 개의 도넛 게이지 + 그 아래 근거자료 2열:
| 열 | 6 심볼(호버 툴팁) | 점수 원천 |
|---|---|---|
| 가용성 근거 | 통신·부하·메모리·디스크·RAID·백업 | aggregate() 의 avail_parts(지속 인지 합성 0~100) |
| 보안 근거 | IDS·AI·웹·방화벽·평판·TLS | PostureService(24h 미조치 잔여 비율을 건전성 점수로 정규화) |
각 심볼은 metric_cls 로 색이 정해집니다: 90↑ 정상(good) · 70↑ 주의(warn) · 그 미만 위험(crit) · 데이터 없음은 —(na).
KPI 카드(중앙 3×2 + 조건부 2)
| 카드 | 값 | 부제 |
|---|---|---|
| 서버 | 온라인/전체 | 오프라인 수 또는 "전체 온라인" |
| 부하 피크 | 가시 화면 최대 load | 호스트 · "N분 전" |
| 메모리 피크 | 가시 화면 최대 mem% | 호스트 · "N분 전" |
| 네트워크 피크 | 최대 pkts(In/Out 중 큰 값) | 호스트 · "N분 전" |
| 위협 | 미해결(=Kitsune 차단) | 오늘 차단 수 |
| 백업 | 14일 성공률 % | 24h 실행 수 · 마지막 경과 · 우세 유형 |
| 웹 서비스(조건부) | 가동/전체 | 최대지연 호스트·ms |
| 데이터베이스(조건부) | 가동/전체 | 부하 최상위 DB · 24h slow · 대기 |
Load/Memory/Network 피크는 프론트에서 "현재 가시 화면(current_servers)의 시리즈 max" 로 계산됩니다. 즉 분할·페이지를 바꾸면 피크 카드의 대상 서버 집합도 바뀝니다. "N분 전" 라벨은 그 피크가 처음 관측된 seq 위치(
times[idx])를 역산한 값입니다.
서비스 성능 패널(우)
웹 1개 + DB 1개를 골라 컴팩트 게이지로 표시합니다(폭주 1개가 평균에 묻히지 않도록 합산하지 않고 개별). 드롭다운(다른 서비스 선택)으로 대상 교체:
- 웹 — 응답코드 4구간 도넛(2xx good·3xx info·4xx warn·5xx crit) + 중앙 RPS + 에러율·지연. 기본 선택 = RPS 최대.
- DB — 연결 포화(좌석) arc + 중앙 QPS + 실행/대기. 기본 선택 = 연결 포화 최대. 톤 임계 70/90%(Service ▸ Database 규약).
탐지 도넛(우)
24시간 탐지를 4분류(IDS/AI/웹/스캔)로. ECharts 도넛 + HTML 레전드(이름·압축수치·점유바).
하단 — 풀폭 서버 스트립
서버 통계 툴바(RAID 상태 칩·여유<1G 칩·높이 슬라이더·범위 라벨·시간창 토글·분할 버튼) 아래에 4개 스트립:
- 부하 평균 — latest 상위 3서버에 alias·값 핀, 선형/로그.
- 메모리 — 사용률 %, 선형/로그.
- 네트워크 트래픽 — In(바닥)+Out(위) 스택 area.
- 스토리지 — 루트(/) 비선형 게이지 +
/data파트 사용률.
사용법
- 게이지부터 — 가용성/보안 두 점수의 색을 봅니다. 낮으면 아래 근거 6 심볼 중 붉은(crit)/노란(warn) 칸에 마우스를 올려 어떤 축이 감점됐는지 확인.
- KPI 카드 — 오프라인 서버·위협·백업 성공률 등 이상치를 훑습니다. 피크 카드의 "N분 전"으로 이벤트 시점을 잡습니다.
- 시간창 전환 — 하단 우측
6h·24h·3d버튼으로 스트립 창을 바꿉니다. 선택은localStorage(infr:range:overview)에 저장되고, 서버에range파라미터로 재조회됩니다. KPI·헬스 게이지는 24h 개념으로 고정입니다(스트립만 창이 바뀜). - 화면 분할 —
전체·2·3버튼으로 서버 함대를 나눠 페이지(◀▶)로 넘깁니다. 여러 모니터에 배치할 때 유용. - 높이·스케일 — 슬라이더로 스트립 높이(80~360px)를, 각 스트립의
Lin/Log로 y축 스케일을 조절(sol 같은 스파이크 호스트 대비). - 라이브/전체 화면 — 히어로의
LIVE토글로 폴링을 켜고 끄고,전체 화면으로 상단 메뉴바를 숨겨 관제 벽 모드로.
범위 → 포인트 수
하단 스트립 시간창은 server_status 수집 주기(≈5분)를 기준으로 seq 포인트 수로 환산됩니다.
| range | seq 포인트 |
|---|---|
6h |
72 |
24h |
288 (기본) |
3d |
864 |
라이브 갱신(폴링) 동작
30초마다 ──▶ GET /overview/rev (값싼 최신 seq)
│ rev 변동?
├─ 아니오 → 스킵(대역폭 0)
└─ 예 → GET /overview/live?range=<창> → 데이터만 교체 + 차트 재렌더
- 탭이 숨겨지면(
document.hidden) 폴링 정지, 복귀 시 즉시 1회 확인. - 30초
clock틱으로 데이터 미변경 중에도 "N분 전" 라벨을 재계산. - Reverb가 배선되면(
window.Echo)infr.overview채널의.tick이벤트로 동일 갱신을 push 로 전환할 수 있습니다(현재는 no-op → 실시간(Reverb) 참고).
데이터 소스
전부 읽기 전용입니다. 신규 앱은 레거시 리소스 테이블을 그대로 읽습니다(§리소스 read verbatim).
| 축 | 테이블 / 서비스 | 커넥션 | 용도 |
|---|---|---|---|
| 서버 함대·시계열 | server_status(loadavg·free·df-*·traffic-out) |
legacy(MAIN) |
부하·메모리·디스크·네트워크 스트립, 통신 판정 |
| RAID | storage_status(status_summary) |
legacy |
Optimal/Degraded/Failed 근거 |
| 백업 | backup_history |
legacy |
14일 성공률·마지막·유형 |
| IDS | suricata_alert_ct |
legacy_glory |
탐지 도넛·보안 근거(sev 1·2) |
| AI 이상탐지 | kitsune_detail_log(is_blocked) |
legacy_glory |
탐지·위협·보안 근거 |
| 웹 공격 | nginx_meta_ct(is_suspicious) |
legacy_glory |
탐지·의심 요청 비율 |
| 평판·차단 | blacklist_info |
legacy_glory |
오늘 차단·신규 차단 압력 |
| TLS 위생 | suricata_tls_ct(version) |
legacy_glory |
약한 TLS(<1.2) 비율 |
| 웹 서비스 성능 | WebMetricService::dashboard()(infr_web_metric) |
중앙 | 웹 KPI·성능 패널 |
| DB 성능 | DbCollectorService::latest()·infr_db_metric·infr_collector(access=database) |
중앙 | DB KPI·성능 패널 |
| 방화벽 노출 | FirewallService::dashboard()(infr_instance_firewall) |
중앙 | 보안 근거 fw |
합성 스코어 공식
가용성 = 데이터 있는 지표만 가중평균(가중치 재정규화). 각 축은 표시 창 전체를 보고 "얼마나 오래(지속)·얼마나 심하게(피크)" 위반했는지로 감점합니다.
| 축 | 가중치 | 감점 기준 |
|---|---|---|
| 통신(live) | 0.30 | 첫 보고 이후 무응답 구간 비율 |
| 부하(load) | 0.15 | load avg 8 이상 침범(16↑ 완전 과부하) |
| 메모리(mem) | 0.15 | 사용률 99% 초과(100% 완전 압박) |
| 디스크(disk) | 0.15 | 루트 여유 1G 미만(실측 파티션만, 0G 완전 위험) |
| RAID | 0.15 | Degraded/Failed 노드는 0점 |
| 백업 | 0.10 | 14일 성공률 |
보안 = 6 근거의 가중평균(존재 지표만). 각 지표는 24h glory 실측을 건전성 점수(0~100)로 정규화 — 볼륨/비율이 커질수록 감점(최대 감점 45 → 하한 55). 전 지표 미가용 시에만 detections() 휴리스틱 스칼라로 폴백.
| 지표 | 가중치 | 원천(24h) | 만점 감점 도달 |
|---|---|---|---|
| ids | 0.22 | 고심각(sev 1·2) IDS 경보 수 | 200건 |
| ai | 0.22 | Kitsune 차단 수 | 500건 |
| web | 0.20 | nginx 의심 요청 비율% | 8% |
| rep | 0.14 | 오늘 신규 차단 IP 수 | 400건 |
| tls | 0.12 | 약한 TLS(<1.2) 비율% | 5% |
| fw | 0.10 | 공인 IP 치명 포트×2 + 치명 + 미등록 노출 | 200 |
캐시 TTL
| 대상 | TTL | 키 |
|---|---|---|
| Overview 실데이터(build) | 30s | infr:overview:data:v1:{points} |
| 서비스 성능 패널(web/db) | 15s | infr:ov:perf |
| 보안 근거(PostureService) | 300s | infr:sec:posture:v1:<range> |
권한
- 읽기 전용 화면. 랜딩(
/)은infr.auth미들웨어만 적용 — 인증된 모든 등급(demo=1 이상) 이 볼 수 있습니다. 별도 쓰기 동작이 없어 등급 게이트가 없습니다. - 보안 근거·탐지 수치가 여기서는 데모(1) 등급에도 노출되지만, 세부 보안 역할 영역(
/security/*)은infr.level:2로 별도 게이팅됩니다. - 등급 체계 전반은 RBAC 등급 참고.
문제해결 · FAQ
Q. 게이지·카드에 데모 같은 값이 뜹니다.
레거시 DB(legacy/legacy_glory) 연결 실패 또는 데이터 부재 시 mockup fallback 입니다. payload 의 source 가 mockup 이고 rev 가 0 이면 실 DB 미가용 상태입니다. DB 접속·수집기 적재를 점검하세요(Admin ▸ Collectors).
Q. 근거 심볼이 — 로 나옵니다.
해당 축의 데이터가 없다는 뜻(가중치에서 제외됨)입니다. 예: 방화벽 CMDB(infr_instance_firewall)가 비어 있으면 fw 가 —, firewall_status 대신 새 방화벽 자산이 필요합니다. RAID 는 매칭되는 storage_status.host 가 없으면 제외됩니다.
Q. 데이터가 안 갱신됩니다.
(1) 히어로 토글이 PAUSED 인지, (2) 탭이 백그라운드인지(숨김 중 폴링 정지) 확인. 수집기는 Laravel 밖에서 약 5분 주기로 적재하므로 30초 폴링이라도 실제 값은 최대 수 분 지연될 수 있습니다. rev 가 바뀌지 않으면 무거운 payload 를 가져오지 않습니다.
Q. 부하 피크 서버가 화면마다 다릅니다.
피크는 현재 가시 화면(분할·페이지)의 서버 집합 기준으로 계산됩니다. 전 서버 기준으로 보려면 분할을 전체 로 두세요.
Q. 네트워크 In 이 항상 0 입니다.
server_status 에 per-alias inbound 소스가 없어 net_in 은 0 으로 채워지고 traffic-out(packets)만 실측 표시됩니다. 상세 대역폭은 Traffic(네트워크 I/O)에서 확인하세요.
Q. 시간창을 바꿔도 KPI·게이지가 그대로입니다.
정상입니다. range(6h/24h/3d)는 하단 스트립에만 적용되고, KPI·헬스 게이지는 24h 고정 개념입니다.
관련 항목
- Infrastructure ▸ Servers — 서버별 부하·메모리 시계열 심층
- Infrastructure ▸ Health — 노드 카드 라이브 프로브
- Security ▸ Overview — 위협→탐지→대응 방어 퍼널
- Service ▸ Web · Service ▸ Database — 성능 패널의 원천 화면
- Infrastructure ▸ Alerts — 임계 초과 시 알림 정책
- 실시간(Reverb) — 폴링 → push 전환 배경
