-- 1. 일별 요청량 및 Percentile 지연 시간 (시계열 차트)
SELECT
DATE(timestamp_ms / 1000) AS day,
COUNT(*) AS total_requests,
ROUND(PERCENTILE_CONT(0.50) WITHIN GROUP (ORDER BY execution_time_ms), 1) AS p50_ms,
ROUND(PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY execution_time_ms), 1) AS p95_ms,
ROUND(PERCENTILE_CONT(0.99) WITHIN GROUP (ORDER BY execution_time_ms), 1) AS p99_ms,
SUM(CASE WHEN status_code != 200 THEN 1 ELSE 0 END) AS error_count,
ROUND(SUM(CASE WHEN status_code != 200 THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS error_rate_pct
FROM ml_prod.monitoring.fraud_model_payload
WHERE date >= CURRENT_DATE() - INTERVAL 30 DAYS
GROUP BY DATE(timestamp_ms / 1000)
ORDER BY day DESC;
-- 2. LLM 엔드포인트: 토큰 사용량 추적 (시계열 차트)
SELECT
DATE(timestamp_ms / 1000) AS day,
SUM(request:usage.prompt_tokens) AS total_input_tokens,
SUM(request:usage.completion_tokens) AS total_output_tokens,
SUM(request:usage.total_tokens) AS total_tokens,
ROUND(AVG(execution_time_ms), 0) AS avg_latency
FROM ml_prod.monitoring.agent_payload
WHERE date >= CURRENT_DATE() - INTERVAL 30 DAYS
GROUP BY DATE(timestamp_ms / 1000)
ORDER BY day DESC;
-- 3. 에러 분석 (테이블 위젯)
SELECT
status_code,
COUNT(*) AS count,
FIRST(response) AS sample_error
FROM ml_prod.monitoring.fraud_model_payload
WHERE status_code != 200
AND date = CURRENT_DATE()
GROUP BY status_code;
-- 4. 시간대별 트래픽 패턴 (히트맵)
SELECT
DAYOFWEEK(timestamp_ms / 1000) AS day_of_week,
HOUR(timestamp_ms / 1000) AS hour_of_day,
COUNT(*) AS request_count
FROM ml_prod.monitoring.fraud_model_payload
WHERE date >= CURRENT_DATE() - INTERVAL 7 DAYS
GROUP BY day_of_week, hour_of_day;