<!-- canonical: https://docs.axelabs.ai/ops -->
<!-- source: content/ops/index.mdx -->

---
title: 운영자 대시보드
description: 운영자 (`ai@axellc.com`) 전용 — 일상·주간·월간 점검 항목.
---

# 운영자 대시보드

> 본 섹션은 **운영자 (`ai@axellc.com`)** 전용. Microsoft Entra ID 로그인 게이트 (예정). 정보가 customer 별 운영 디테일 포함.

## 매일 (자동, 점검만)

| 항목 | 자동화 | 점검 방법 |
|---|---|---|
| 03:00 KST local backup | `com.axe.backup.local` | `restic snapshots` 직접 |
| 03:30 KST ring push (axe → realchoice) | `com.axe.ring.push` | `axe ring status` |
| 매시 frame integrity check | `com.frame.integrity-check` | `ssh axe-macmini "docker exec frame-mcp-blue python -m frame.cli integrity-check --entity axec"` |
| 매시 cron jobs (stream/magnet) | supercronic | 각 service 로그 |

매일 운영자가 받는 Slack 보고 (또는 메일):
- 어제 backup 성공/실패
- frame integrity 결과 (모든 entity 정상이면 1줄 OK)
- stream/magnet alert 합계

## 매주

- 직원 활동 audit (frame `audit_log` × 모든 entity)
- secret 만료 임박 항목 (30일 이내)
- Cloudflare tunnel uptime
- macmini 디스크 사용량 (모든 customer)

## 매월

- 직원 권한 review (`customers.yaml > user_entity_map`)
- backup 크기 변화
- Vaultwarden organization 멤버 변동
- 회계 사무소 export 송부

## 분기

- Restore drill (`com.axe.restore-drill`, Jan/Apr/Jul/Oct 15)
- DECISIONS 회고 (변경 필요?)
- 비용 review (Cloudflare, Microsoft, Anthropic)
- Cold SSD rotation

## 주요 도구

| CLI | 용도 |
|---|---|
| `axe customers list/add/show` | customer 목록 |
| `axe health &lt;target&gt;` | 인프라 health probe (positional, `target` 기본값 `all`) |
| `axe deploy &lt;service&gt; &lt;customer&gt; --apply` | blue/green deploy |
| `axe ring push/sync/status/init` | ring backup (Phase 5) |
| `axe cold init/sync/status` | cold SSD backup |
| `axe console rebuild/data/restart/sso/token` | admin.axelabs.ai 콘솔 갱신 |
| `axe secret get/list/status` | Vault 직접 호출 (단건) |
| `axe secret check/pull/push/rotate &lt;svc&gt;` | 매니페스트 기반 일괄 ([architecture/secrets](/architecture/secrets), D-ops-17) |
| `axe phase` | 현재 rollout phase |
| `axe onboard &lt;customer&gt; --apply` | 신규 customer bootstrap (18-step) |
| `axe restore --customer X --from Y --as-of Z` | restic 복원 — **Phase 5 stub**, 현재 restic 직접 호출 사용 ([known-gaps](/ops/known-gaps)) |
| `axe docs-check [--since &lt;ref&gt;]` | 코드 ↔ axelabs-docs drift 감지 ([release flow](/ops/runbook/release-flow)) |
| `axe ship [&lt;service&gt;]` | release-gate: docs-check + push + deploy. **`git push origin main` 대신 사용** ([release flow](/ops/runbook/release-flow)) |

자동 일일 backup = `com.axe.backup.local` launchd (매일 03:00 KST). 수동 시도는 `restic backup` 직접.

## 외부 콘솔

| 콘솔 | 용도 |
|---|---|
| `https://admin.axelabs.ai` | 운영자 web 콘솔 (Microsoft SSO) |
| `https://axe.axelabs.ai/vault` | Vaultwarden (master password) |
| Azure portal | Entra ID app 관리 |
| Cloudflare dashboard | DNS, tunnel, Universal SSL |

## 핵심 파일

| 파일 | 역할 |
|---|---|
| `/Users/axe/.axe/customers.yaml` | SSOT — customer registry |
| `/Users/axe/.axe/bin/axe` | CLI |
| `/Users/axe/CLAUDE.md` | 포트 할당, launchd 서비스 목록 |
| `/Users/axe/multi-tenant-platform-plan.md` | 마스터 플랜 + D 결정 |
| `/Users/axe/frame/DECISIONS.md` | D-ops-1~15 |
| `/Users/axe/.axe/state.yaml` | 현재 rollout phase, 다음 세션 컨텍스트 |
| `/Users/axe/.axe/tunnels/axelabs/config.yml` | cloudflared ingress |
| `/Users/axe/.axe/vault/docker-compose.yml` | Vaultwarden |

## 다음 세션 시작 시

1. `cat /Users/axe/.axe/state.yaml` — 현재 phase 확인
2. `cat /Users/axe/.axe/NEXT_SESSION.md` — 마지막 세션의 다음 작업
3. 운영자 콘솔 ( `https://admin.axelabs.ai` ) 의 dashboard 확인
4. 미해결 알람 (어제 backup 실패 등) 처리

## 비상

| 사건 | 즉시 대응 |
|---|---|
| frame DB 손상 | [Runbook · DB 복구](/ops/runbook/db-recovery) |
| cloudflared 죽음 | `docker start axelabs-tunnel` |
| Vaultwarden 죽음 | [Runbook · Vaultwarden recovery](/ops/runbook/vault-recovery) |
| customer macmini 도난/화재 | [Runbook · macmini 손실](/ops/runbook/macmini-loss) |
| secret 노출 의심 | [Runbook · secret rotation](/ops/runbook/secret-rotation) |

## 다음

- [Runbooks](/ops/runbook) — 표준 절차들
- [DECISIONS](/ops/decisions) — 아키텍처 결정 누적
- [인프라 인벤토리](/ops/inventory) — 서비스/포트/파일 전체 목록
