InfraGuard

서비스 개요 — 큐레이션 라이브 보드

운영자가 관심 서비스(웹·DB·세션·프록시·Docker)를 우선순위 카드로 골라 배치하고 가용성 게이지와 라이브 시계열로 관제하는 서비스 보드입니다.

개요 — 무엇을 하나

서비스 개요(Service Overview) 는 InfraGuard 의 Service 대메뉴 첫 화면(/service)으로, 운영 중인 서비스(데몬)의 큐레이션 라이브 관제 보드입니다. 운영자가 관심 있는 서비스를 직접 골라 우선순위 카드로 배치하면, 각 카드가 종류별 대표 지표를 실시간으로 보여주고, 맨 앞(우선) 카드로 가용성 게이지를, 하단에서 선택 카드들의 라이브 시계열을 그립니다.

특징:

이 보드는 데모용 가짜 fleet 이 아니라 전부 실데이터입니다. 지표 원천은 이미 수집기가 채운 infr_web_metric · infr_db_metric · infr_redis_metric 와 infr_service(Catalog) 입니다.

언제 쓰나

화면 구성

상단 KPI 스트립

realKpi() 가 계산하는 전사 요약(30초 폴링으로 갱신):

KPI 의미 원천
웹 트래픽(web) 등록 웹서비스 총 RPS · 대역폭 WebMetricService::kpi(dashboard())
DB 부하(db) access=database 수집기별 최신 저장 QPS 합 · 총 연결수 DbCollectorService::latest() 합산
웹 가동률(uptime) 24h 가동률 WebProbeService::availabilityOrPassive()(능동 프로브 우선)
평균 지연(latency) 프로브 평균 응답(ms) 동일
인시던트(incidents) 최근 7일 등록 건수 InfrIncident created_at ≥ now-7d

웹 가동률·평균 지연은 능동 합성 프로브를 우선합니다. 수동 vts 트래픽 카운터만으로는 트래픽 없는 완전 다운·3xx 뒤 숨은 5xx·카운터 리셋을 오진하므로, WebProbeService 의 실제 HTTP 프로브 결과를 씁니다. 프로버가 아직 안 돌아 커버리지가 없으면 passive(web24h) 로 폴백합니다.

서비스 가용성 게이지

우선순위 첫 web/db/session 카드의 속성으로 conic 도넛/아크를 그립니다(그 3종 카드가 하나도 없으면 placeholder 안내).

카드 종류 게이지 모양 중앙 값 톤 규칙
web 응답코드 4구간 도넛 REQ(현재 RPS) 2xx=good · 3xx=info · 4xx=warn · 5xx=crit
database 연결 포화도(conn_pct) 아크 QPS ≥90 crit · ≥70 warn · 그외 good
session 적중률(hit_rate) 아크 OPS ≥90 good · ≥70 warn · 그외 crit

서비스 보드(카드 그리드)

선택한 서비스가 우선순위 순서로 카드 배치됩니다. 각 카드는 종류별로 다른 KPI를 표시합니다:

종류 daemon 기본 헤더(alias) 주요 KPI
web nginx 대표 도메인 지연 · RPS · 열린 세션(활성 커넥션) · 24시간 누적 요청 · 에러율
database mysql/mariadb/postgres/mongo 수집기 alias QPS · 좌석(연결/최대) · 포화도 · 실행 중 · lock(row-lock 평균 ms) · Slow 누적 · 대기
session redis 노드 alias OPS · 적중률 · 클라이언트(현재 세션) · 키 · 포화도(메모리 수용률)
proxy software_key/proxy 인스턴스 alias 의존성(+N) · 지연 · 리슨 포트
docker software_key/docker 인스턴스 alias 의존성(+N) · 지연 · 리슨 포트

라이브 서비스(하단 시계열)

시리즈가 있는 선택 카드(web/db/session)를 2열 그리드의 SVG area+line 스파크로 그립니다. 각 그래프에는 ruler(세로 그리드 + start·mid·end HH:MM 라벨)가 붙어 타임라인을 식별합니다. 상단 range 토글(1h · 6h · 1d) 로 창을 바꿉니다(기본 1h).

헤더 컨트롤

사용법

1) 서비스 고르기

  1. 보드 헤더의 [서비스 선택] 또는 [서비스 추가] 를 눌러 선택 모달을 엽니다.
  2. 모달은 사용 가능한 전체 서비스를 종류별 그룹(web → database → session → proxy → docker)으로 보여줍니다.
  3. 원하는 서비스를 켜고(✓) 끕니다. 선택은 즉시 보드에 반영되고 localStorage 에 저장됩니다.

첫 방문 기본값 = web · database · session 각 종류의 첫 항목이 자동 선택되어 가용성 게이지가 바로 동작합니다. 원치 않으면 모달에서 해제하세요.

2) 우선순위 조정

3) 시계열 창 바꾸기

// POST /service/series 요청 예시
{ "keys": ["web:12", "db:db@blue", "session:blue"], "range": "6h" }

카드 key 규약:

web:{infr_web_service.id}
db:{infr_collector.key}      예: db@blue
session:{node_alias}         예: blue
proxy:{infr_service.id}
docker:{infr_service.id}

4) 전체화면 상황판

데이터 소스

카드 종류 빌더 실제 테이블
web WebMetricService::dashboard() + WebProbeService::overlayStatus() infr_web_metric(vts 카운터) · infr_web_check(능동 프로브) · infr_web_service
database InfrCollector(access=database) + DbCollectorService::latest()/series() infr_db_metric · infr_collector
session RedisMetricService::dashboard() infr_redis_metric · infr_instance
proxy/docker InfrService(kind IN proxy,container) infr_service · infr_instance
KPI 인시던트 — infr_incident(최근 7일)

시계열 원천:

상태(status) 토큰

토큰 의미
up 정상
degraded 열화
down 중단(실제 연결·프로브 실패)
pending 대기(데이터 지연 등 판정 보류)

DB 카드 false-red 방지 — economy 수집 모드에서 수집이 잠시 밀려 마지막 샘플이 5분 이상 오래되면 statusOf 는 stale 사유로 down 을 냅니다. DB 는 멀쩡한데 빨간 알람이 뜨는 오진이므로, 보드는 stale down 을 pending 으로 강등하고 실제 연결 실패(ok=false)만 down 을 유지합니다. 또한 보드를 보는 present 사용자에게만 마지막 샘플이 45초 이상 밀렸을 때 ensureFresh(45) 로 즉석 1회 샘플을 뜨며(스케줄러가 수집 중이면 연결 없이 no-op), 이 샘플러는 finally 에서 연결을 purge 해 누수를 막습니다.

권한

localStorage 키:

infr:svcboard:sel:v1        선택 서비스 key 배열(순서=우선순위)
infr:svcboard:h:v1          보드/라이브 높이 슬라이더 값
infr:range:service-overview 하단 시계열 range(1h/6h/1d)

문제해결 · FAQ

보드가 비어 있어요. 헤더 [서비스 추가] 로 관심 서비스를 배치하세요. 사용 가능한 서비스가 하나도 없다면(=수집기가 아직 데이터를 안 채웠다면) 모달 그룹이 비어 보일 수 있습니다 — Collectors 등록과 수집 파이프라인을 먼저 확인하세요.

가용성 게이지가 안 떠요. 게이지는 우선순위 첫 web/db/session 카드가 있어야 그립니다. proxy/docker 만 골랐다면 placeholder 안내가 나옵니다. web/db/session 카드를 하나 이상 앞쪽에 두세요.

하단 시계열이 비어 있어요. 시계열은 web/db/session 카드만 가집니다. proxy/docker 는 제외됩니다. 또한 원천 테이블에 해당 창(1h/6h/1d) 데이터가 없으면 빈 그래프가 됩니다.

DB 카드가 빨간색인데 DB는 멀쩡해요. 데이터 지연이면 pending(회색/대기)으로 강등됩니다. 그래도 down 이면 실제 연결 실패이니 Database 화면과 Collectors의 access=database 수집기 상태를 확인하세요.

새로고침해도 카드가 그대로예요 / 다른 PC에선 다르게 보여요. 선택·순서는 브라우저 localStorage 소유라 서버 계정 설정이 아닙니다. 브라우저·기기마다 독립적입니다.

range 를 5분으로 바꾸고 싶어요. 현재 구현의 range 창은 1h · 6h · 1d 세 가지입니다(기본 1h). 더 짧은 관측이 필요하면 Servers·Database 등 전용 화면을 사용하세요.

관련 항목

서비스 개요 — 큐레이션 라이브 보드
서비스 개요 — 큐레이션 라이브 보드