상태 페이지
봇의 실시간 가동 상태, 샤드별 성능 지표, 그리고 API 사용량을 모니터링하는 페이지입니다.
샤드 상태 그리드
각 샤드의 현재 상태가 카드 형태로 표시됩니다. 카드 색상으로 상태를 즉시 파악할 수 있습니다.
| 상태 | 조건 | 표시 |
|---|---|---|
| 온라인 | 최근 2분 이내 하트비트 수신 | 녹색 |
| 오프라인 | 2분 이상 하트비트 미수신 | 회색 |
카드 정보
각 샤드 카드에 표시되는 정보입니다.
| 항목 | 설명 | 출처 |
|---|---|---|
| WebSocket 핑 | 게이트웨이 지연 (ms) | heartbeat.wsPingMs |
| 메모리 사용량 | 프로세스 RSS 메모리 (MB) | heartbeat.memoryMb |
| 서버 수 | 해당 샤드가 담당하는 서버 수 | heartbeat.guildCount |
| 음성 연결 | 활성 음성 연결 수 | heartbeat.voiceConnections |
| CPU 사용률 | 프로세스 CPU 비율 (%) | heartbeat.cpuPercent |
단일 봇 모드
샤드가 1개이고 클러스터 ID가 설정되지 않은 경우 (비샤딩 단일 봇), "Cluster 0 > Shard 0" 제목 없이 카드 1장만 간결하게 표시됩니다.
클러스터 계층 구조
clusterId 옵션을 설정한 멀티클러스터 배포에서는 클러스터 > 샤드 계층으로 카드가 그룹화됩니다.
Cluster 0
├── Shard 0 ● 온라인 핑 42ms 메모리 128MB 서버 1,250
└── Shard 1 ● 온라인 핑 38ms 메모리 135MB 서버 1,248
Cluster 1
├── Shard 2 ● 온라인 핑 45ms 메모리 130MB 서버 1,251
└── Shard 3 ● 오프라인 마지막: 10분 전각 클러스터는 접고 펼칠 수 있으며, 클러스터 제목에는 온라인 샤드 수가 요약 표시됩니다.
히스토리 탭
샤드 카드를 클릭하면 해당 샤드의 시간별 성능 추이를 확인할 수 있습니다.
차트 종류
| 차트 | 설명 | 단위 |
|---|---|---|
| 핑 추이 | WebSocket 게이트웨이 지연 시간 변화 | ms |
| 메모리 추이 | RSS 메모리 사용량 변화 | MB |
| CPU 사용률 | 프로세스 CPU 비율 변화 | % |
| 이벤트 루프 P95 | Node.js 이벤트 루프 지연 P95 | ms |
참고
이벤트 루프 P95가 지속적으로 높다면 (예: 100ms 이상) 봇의 메인 스레드에 병목이 있을 수 있습니다. 동기적 연산이 많거나, 대량의 캐시 갱신이 발생하는 경우 이 지표가 상승합니다.
데이터가 없는 경우
봇이 오프라인이라 히스토리 데이터가 전부 없는 경우, 다음과 같이 표시됩니다.
- "현재 봇이 오프라인이라 측정되지 않고 있습니다"
- 마지막 온라인 시각 표시
- 해당 기간에 데이터가 있는 구간만 차트에 표시됩니다
API 사용량
상태 페이지에는 봇의 Discord REST API 사용량도 표시됩니다.
하트비트 기반 지표
| 지표 | 설명 |
|---|---|
| API 요청 수 | 윈도우 내 총 REST API 요청 수 |
| 글로벌 429 | 글로벌 레이트 리밋 횟수 |
| 버킷 429 | 버킷별 레이트 리밋 횟수 |
| 잘못된 요청 | 400/401/403 응답 횟수 |
API 라우트 Top 10
api_routes_snapshot 이벤트 (5분 주기)에서 가장 많이 호출된 API 라우트 10개를 보여줍니다. 라우트 경로의 스노우플레이크는 {id}로 정규화되어 표시됩니다.
POST /channels/{id}/messages 1,234건
PATCH /guilds/{id}/members/{id} 567건
PUT /guilds/{id}/members/{id}/roles/{id} 234건
...참고
글로벌 429 횟수가 지속적으로 높다면 봇이 Discord API의 전역 레이트 리밋에 걸리고 있는 것입니다. API 호출 패턴을 검토하세요.