AgentSkillsCN

daily-report

生成 EC2 生产环境的每日监控报告(数据库/日志/系统指标)。支持 Discord 通知。

SKILL.md
--- frontmatter
description: EC2 프로덕션 환경의 일일 모니터링 리포트를 생성합니다 (DB/로그/시스템 메트릭). Discord 알림 지원.

Daily Report Skill

EC2 프로덕션 환경의 데이터를 수집하여 종합 일일 모니터링 리포트를 생성합니다.

사용법

명령설명
/daily-report리포트 생성 (Discord 알림 없음)
/daily-report --notify리포트 생성 + Discord 알림 전송

💡 Discord 알림: DISCORD_WEBHOOK_URL 환경변수 설정 필요

수집 항목

카테고리항목
DB 현황총 사용자, 금일 가입, 총 제출, 금일 제출, 문제 수
문제 통계문제별 성공/실패/오류 수, 실패율
토큰 사용AI 코치/힌트/피드백 사용량, 금일 총 소비
오류 현황발생 시간, 내용, 파일, 예상 원인
시스템 리소스CPU, 메모리, 디스크 사용률
채점 시스템평균 시간, 타임아웃 수, 큐 대기, Worker 상태

워크플로우

Step 1: EC2에서 리포트 스크립트 실행

AWS SSM send-command로 EC2에서 리포트 생성 스크립트를 실행합니다:

bash
# 기본 실행 (알림 없음)
COMMAND_ID=$(aws ssm send-command \
  --instance-ids "i-05b23ecec2bdcd44a" \
  --document-name "AWS-RunShellScript" \
  --parameters 'commands=["cd /home/ssm-user/qa_labs && docker compose -f docker-compose.prod.yml exec -T backend python /app/scripts/daily_report.py --output json 2>/dev/null"]' \
  --query 'Command.CommandId' --output text)

# Discord 알림 포함 (--notify 옵션 사용 시)
COMMAND_ID=$(aws ssm send-command \
  --instance-ids "i-05b23ecec2bdcd44a" \
  --document-name "AWS-RunShellScript" \
  --parameters 'commands=["cd /home/ssm-user/qa_labs && docker compose -f docker-compose.prod.yml exec -T backend python /app/scripts/daily_report.py --output json --notify 2>/dev/null"]' \
  --query 'Command.CommandId' --output text)

echo "Command ID: $COMMAND_ID"

Step 2: 결과 수집 (60초 대기)

bash
sleep 60
RESULT=$(aws ssm get-command-invocation \
  --command-id "$COMMAND_ID" \
  --instance-id "i-05b23ecec2bdcd44a" \
  --query 'StandardOutputContent' --output text)

echo "$RESULT"

Step 3: 결과 파싱 및 출력

JSON 결과를 파싱하여:

  1. 터미널에 컬러 포맷으로 출력
  2. reports/daily-report-YYYY-MM-DD.md 파일로 저장

출력 형식

터미널 출력 (컬러)

code
╔════════════════════════════════════════════════════════════╗
║           QA Labs Daily Report - 2025-01-09                ║
╚════════════════════════════════════════════════════════════╝

📊 DB 현황
┌──────────────────────────────────────────────────────────┐
│ 총 사용자: 150명 (금일 가입: +5명)                       │
│ 총 제출:   1,234건 (금일: 45건)                          │
│ 총 문제:   25개 (공개: 20개)                             │
└──────────────────────────────────────────────────────────┘

🎯 문제별 실패율
┌────────────────┬─────────┬─────────┬────────┬───────────┐
│ Problem        │ SUCCESS │ FAILURE │ Rate   │ Status    │
├────────────────┼─────────┼─────────┼────────┼───────────┤
│ E01-LoginTest  │   45    │    5    │ 10.0%  │ ✅ 정상   │
│ E02-CartTest   │   30    │   15    │ 33.3%  │ ⚠️ 주의   │
│ H01-PaymentTest│   10    │   20    │ 66.7%  │ 🔴 높음   │
└────────────────┴─────────┴─────────┴────────┴───────────┘

🤖 토큰 사용 현황
┌──────────────────────────────────────────────────────────┐
│ AI 코치: 25회 (총 50 토큰)                               │
│ AI 힌트: 30회 (총 30 토큰)                               │
│ 딥 피드백: 10회 (총 30 토큰)                             │
│ 금일 총 소비: 110 토큰                                   │
└──────────────────────────────────────────────────────────┘

🔴 오류 현황 (3건)
┌──────────────────────────────────────────────────────────┐
│ [14:32:15] ConnectionError: Redis connection refused     │
│   파일: app/services/judge.py:45                         │
│   원인: Redis 일시적 과부하                              │
├──────────────────────────────────────────────────────────┤
│ [09:15:03] TimeoutError: Judge execution timeout         │
│   파일: app/services/executor.py:120                     │
│   원인: 사용자 코드 무한루프 가능성                      │
└──────────────────────────────────────────────────────────┘

💻 시스템 리소스
┌──────────────────────────────────────────────────────────┐
│ CPU:    45% ████████████░░░░░░░░░░░░░░░░░░               │
│ Memory: 62% ████████████████████░░░░░░░░░░               │
│ Disk:   38% ████████████░░░░░░░░░░░░░░░░░░               │
└──────────────────────────────────────────────────────────┘

⏱️ 채점 시스템
┌──────────────────────────────────────────────────────────┐
│ 평균 채점 시간: 3.2초                                    │
│ 타임아웃 발생: 2건 (전체의 0.4%)                         │
│ 현재 큐 대기: 0건                                        │
│ Worker 상태: ✅ ONLINE (1/1)                             │
└──────────────────────────────────────────────────────────┘

📁 리포트 저장: reports/daily-report-2025-01-09.md

마크다운 파일

위 내용을 마크다운 형식으로 저장하여 Slack/Notion에서 공유 가능


상태 판단 기준

지표✅ 정상⚠️ 주의🔴 위험
문제 실패율< 30%30-50%> 50%
CPU 사용률< 60%60-80%> 80%
메모리 사용률< 70%70-85%> 85%
디스크 사용률< 70%70-85%> 85%
타임아웃 비율< 1%1-5%> 5%

사용 시점

  • 매일 아침: 전날 밤 이슈 확인
  • 매일 저녁: 퇴근 전 시스템 상태 확인
  • 이상 징후 발생 시: 빠른 현황 파악
  • 주간/월간 리포트 작성 시: 기초 데이터 수집

Discord 알림 설정

환경변수 설정

EC2의 .env.prod 또는 docker-compose.prod.yml에 추가:

bash
DISCORD_WEBHOOK_URL=https://discord.com/api/webhooks/...

알림 조건

조건알림 레벨
CPU > 80%🔴 위험
CPU > 60%⚠️ 주의
메모리 > 85%🔴 위험
메모리 > 70%⚠️ 주의
디스크 > 85%🔴 위험
디스크 > 70%⚠️ 주의
오류 > 10건🔴 위험
오류 > 5건⚠️ 주의
타임아웃 > 5%🔴 위험

알림 색상

  • 🟢 초록: 모든 지표 정상
  • 🟠 주황: 주의 항목 존재
  • 🔴 빨강: 위험 항목 존재

트러블슈팅

스크립트 실행 실패 시

bash
# EC2에서 직접 확인
aws ssm send-command \
  --instance-ids "i-05b23ecec2bdcd44a" \
  --document-name "AWS-RunShellScript" \
  --parameters 'commands=["cd /home/ssm-user/qa_labs && docker compose -f docker-compose.prod.yml exec -T backend python -c \"import scripts.daily_report; print('OK')\""]' \
  --query 'Command.CommandId' --output text

DB 연결 실패 시

bash
# PostgreSQL 상태 확인
aws ssm send-command \
  --instance-ids "i-05b23ecec2bdcd44a" \
  --document-name "AWS-RunShellScript" \
  --parameters 'commands=["cd /home/ssm-user/qa_labs && docker compose -f docker-compose.prod.yml ps postgres"]' \
  --query 'Command.CommandId' --output text