## 워커 모니터링이 왜 중요한가
분산 시스템에서 여러 워커(Worker)가 백그라운드 작업을 처리할 때, 각 워커의 상태를 실시간으로 파악하는 것은 필수적입니다. 워커가 정상 동작 중인지, 어떤 작업을 처리하고 있는지, 언제 마지막으로 응답했는지를 한눈에 볼 수 있는 대시보드는 운영 안정성을 크게 높입니다.
이 글에서는 워커 모니터링 시스템을 대시보드에 통합하는 실전 노하우를 공유합니다.
---
## 워커 ID 설계: 명확한 식별 체계
워커를 효과적으로 관리하려면 일관된 ID 체계가 필요합니다. 다음과 같은 형식을 권장합니다:
```
WORKER_TYPE_LOCATION_INSTANCE_PID
예: sp_office_hw_00_105396
```
- **WORKER_TYPE**: 워커 유형 (예: sp = scraper)
- **LOCATION**: 배포 위치 (예: office, cloud)
- **INSTANCE**: 인스턴스 번호 (00, 01 등)
- **PID**: 프로세스 ID (고유성 보장)
이 방식은 로그 추적, 장애 격리, 리소스 할당 시 매우 유용합니다.
---
## 헬스체크 테이블 설계
워커 상태를 추적하기 위한 `worker_heartbeat` 테이블 예시:
```sql
CREATE TABLE worker_heartbeat (
id SERIAL PRIMARY KEY,
worker_id VARCHAR(100) UNIQUE NOT NULL,
worker_type VARCHAR(50),
location VARCHAR(50),
last_heartbeat TIMESTAMP DEFAULT NOW(),
status VARCHAR(20), -- 'running', 'idle', 'error'
processed_count INT DEFAULT 0,
pending_count INT DEFAULT 0,
metadata JSONB
);
```
각 워커는 주기적으로(예: 30초마다) `last_heartbeat`를 업데이트합니다. 대시보드는 이 값을 확인해 5분 이상 업데이트되지 않은 워커를 "비정상" 상태로 표시할 수 있습니다.
---
## 모니터링 SQL 쿼리
### 1. 워커 상태 조회
```sql
SELECT worker_id, status, last_heartbeat,
NOW() - last_heartbeat AS uptime
FROM worker_heartbeat
WHERE NOW() - last_heartbeat < INTERVAL '5 minutes';
```
### 2. 처리 현황 요약
```sql
SELECT worker_type,
SUM(processed_count) AS total_processed,
SUM(pending_count) AS total_pending
FROM worker_heartbeat
GROUP BY worker_type;
```
---
## REST API 설계
대시보드와 워커 간 통신을 위한 API 엔드포인트:
### 워커 목록 조회
```
GET /api/workers
Response: [{
"workerId": "sp_office_hw_00_105396",
"status": "running",
"lastHeartbeat": "2026-03-21T10:30:00Z",
"processedCount": 1523
}]
```
### 워커 등록/갱신
```
POST /api/workers
Body: {
"workerId": "sp_office_hw_00_105396",
"status": "running",
"processedCount": 1523
}
```
### 워커 라우팅 변경
```
PATCH /api/bots/{botId}/location
Body: { "location": "office" }
```
---
## 대시보드 UI 구성 요소
1. **워커 리스트**: 전체 워커 상태를 테이블로 표시
2. **헬스 인디케이터**: 정상(녹색), 경고(노란색), 오류(빨간색)
3. **처리량 그래프**: 시간별 처리된 작업 수
4. **라우팅 관리**: 워커별 작업 할당 규칙 조정
---
## 원격 워커 관리: Tailscale 활용
원격 네트워크의 워커를 관리할 때는 VPN 솔루션(예: Tailscale)을 사용하면 편리합니다. 각 워커는 안전한 터널을 통해 중앙 대시보드와 통신하며, 방화벽 설정 없이도 프라이빗 네트워크처럼 관리할 수 있습니다.
---
## 핵심 요약
✅ **워커 ID는 구조화된 형식으로** 설계
✅ **헬스체크 테이블**로 상태 추적
✅ **REST API**로 대시보드-워커 통신
✅ **SQL 쿼리**로 실시간 모니터링
✅ **VPN 솔루션**으로 원격 워커 관리
다음 단계로는 알림(Slack, 이메일) 연동, 자동 재시작 로직, 로그 수집 시스템 통합을 고려해보세요.