Agent skill

debug-service

마이크로서비스 디버깅 및 로그 분석. Use when: (1) 서비스 에러 분석, (2) 로그 확인, (3) 헬스체크 실패 원인 파악, (4) DB 연결 상태 확인, (5) 환경변수 검증.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/development/debug-service-semicolon-devteam-semo

SKILL.md

호출 시 메시지: 이 Skill이 호출되면 반드시 [SEMO] Skill: debug-service 호출 - {service_name} 시스템 메시지를 첫 줄에 출력하세요.

Debug Service Skill

마이크로서비스 디버깅 및 문제 진단

Quick Start

bash
# 서비스 상태 확인
curl -s http://localhost:{port}/api/health | jq

# Docker 로그 확인 (최근 100줄)
docker logs --tail 100 ms-{service}

# PM2 로그 확인
pm2 logs {service} --lines 100

진단 워크플로우

Phase 1: 서비스 상태 확인

bash
# 헬스체크 엔드포인트 테스트
SERVICE_PORT={port}
HEALTH_RESPONSE=$(curl -s -w "\n%{http_code}" http://localhost:$SERVICE_PORT/api/health)
HTTP_CODE=$(echo "$HEALTH_RESPONSE" | tail -1)
BODY=$(echo "$HEALTH_RESPONSE" | head -n -1)

if [ "$HTTP_CODE" = "200" ]; then
  echo "✅ 헬스체크 정상"
  echo "$BODY" | jq
else
  echo "❌ 헬스체크 실패 (HTTP $HTTP_CODE)"
fi

확인 항목:

  • HTTP 응답 코드 (200 정상)
  • 응답 시간 (1초 이내 권장)
  • 응답 본문 (status: healthy)

Phase 2: 로그 수집

Docker 환경

bash
# 최근 로그 확인
docker logs --tail 200 ms-{service} 2>&1

# 에러 로그만 필터링
docker logs ms-{service} 2>&1 | grep -i "error\|exception\|fail"

# 실시간 로그 스트림
docker logs -f ms-{service}

PM2 환경

bash
# PM2 프로세스 상태
pm2 status

# 특정 서비스 로그
pm2 logs {service} --lines 200

# 에러 로그만
pm2 logs {service} --err --lines 100

시스템 로그

bash
# journalctl (systemd 서비스)
journalctl -u ms-{service} -n 200 --no-pager

Phase 3: 데이터베이스 연결 확인

PostgreSQL

bash
# 연결 테스트
PGPASSWORD=$DB_PASSWORD psql -h $DB_HOST -U $DB_USER -d $DB_NAME -c "SELECT 1"

# 연결 수 확인
psql -c "SELECT count(*) FROM pg_stat_activity WHERE datname = '$DB_NAME'"

# 락 확인
psql -c "SELECT * FROM pg_locks WHERE NOT granted"

Prisma 상태

bash
# Prisma 연결 테스트
npx prisma db pull --print 2>&1 | head -5

# 마이그레이션 상태
npx prisma migrate status

Redis (해당 시)

bash
# Redis 연결 테스트
redis-cli -h $REDIS_HOST ping

# 키 개수 확인
redis-cli -h $REDIS_HOST dbsize

Phase 4: 환경변수 검증

bash
# 필수 환경변수 확인
REQUIRED_VARS=("DATABASE_URL" "NODE_ENV" "PORT")
for var in "${REQUIRED_VARS[@]}"; do
  if [ -z "${!var}" ]; then
    echo "❌ 누락: $var"
  else
    echo "✅ 설정됨: $var"
  fi
done

# .env.example과 비교
if [ -f ".env.example" ]; then
  echo "=== .env.example에 정의된 변수 ==="
  grep -v "^#" .env.example | grep "=" | cut -d= -f1
fi

Phase 5: 리소스 사용량 확인

bash
# Docker 컨테이너 리소스
docker stats ms-{service} --no-stream

# PM2 프로세스 리소스
pm2 monit

# 시스템 리소스
free -h
df -h

출력 포맷

진단 결과

markdown
[SEMO] Skill: debug-service 호출 - ms-{service}

=== 서비스 진단 보고서 ===

## 1. 서비스 상태
| 항목 | 상태 | 상세 |
|------|------|------|
| 헬스체크 | ✅ 정상 | HTTP 200, 응답시간 45ms |
| 프로세스 | ✅ 실행 중 | PID 12345 |
| 포트 | ✅ 리스닝 | :3000 |

## 2. 데이터베이스
| 항목 | 상태 | 상세 |
|------|------|------|
| PostgreSQL | ✅ 연결됨 | 활성 연결 5개 |
| Prisma | ✅ 동기화됨 | 마이그레이션 최신 |

## 3. 최근 에러 로그

[2025-01-01 10:00:00] ERROR: Connection timeout [2025-01-01 10:00:05] ERROR: Retry failed


## 4. 리소스 사용량
- CPU: 15%
- Memory: 256MB / 512MB
- Disk: 45% 사용

## 5. 권장 조치
- ⚠️ DB 연결 타임아웃 발생 → 연결 풀 크기 확인
- ⚠️ 메모리 50% 이상 사용 → 모니터링 필요

문제 발견 시

markdown
## 진단 결과: ❌ 문제 발견

### Critical Issues
1. **DB 연결 실패**
   - 원인: DATABASE_URL 환경변수 미설정
   - 해결: `.env` 파일에 DATABASE_URL 추가

2. **헬스체크 타임아웃**
   - 원인: 서비스 응답 없음
   - 해결: 서비스 재시작 필요 (`pm2 restart {service}`)

### 권장 명령어
```bash
# 서비스 재시작
pm2 restart {service}

# 로그 실시간 확인
pm2 logs {service} -f

## 서비스별 포트 참조

| 서비스 | 포트 | 헬스체크 경로 |
|--------|------|--------------|
| ms-notifier | 3000 | /api/health |
| ms-scheduler | 3003 | /api/health |
| ms-ledger | 3000 | /api/health |
| ms-media-processor | 3001 | /api/health |
| ms-crawler | 3333 | /api/health |
| ms-collector | 3002 | /api/health |
| ms-allocator | 3004 | /api/health |
| ms-gamer | 8080 | /health |

## Related Skills

- [health-check](../health-check/SKILL.md) - 개발 환경 검증
- [review](../review/SKILL.md) - 코드 리뷰

## References

- [Microservices Context](/.claude/memory/microservices.md) - 서비스 목록 및 컨텍스트

Didn't find tool you were looking for?

Be as detailed as possible for better results