Docker 파일

This commit is contained in:
2025-12-28 14:06:32 +09:00
parent 7d30d2b5a9
commit 9d2a6638b5
6 changed files with 158 additions and 276 deletions

View File

@@ -1,42 +1,27 @@
import { getDb } from '../../utils/db'
import { query } from '../../utils/db'
export default defineEventHandler(async (event) => {
const db = getDb()
const THRESHOLD = 30 // 30% 이상 변화 시 이상 감지
// 활성 서버 목록
const servers = db.prepare(`
SELECT target_id, server_name
const servers = await query<any>(`
SELECT target_id, name as server_name
FROM server_targets
WHERE is_active = 1
ORDER BY server_name
`).all() as any[]
ORDER BY name
`)
const anomalies: any[] = []
const serverResults: any[] = []
// 로그 저장용 prepared statement
const insertLog = db.prepare(`
INSERT INTO anomaly_logs (target_id, server_name, detect_type, metric, level, current_value, threshold_value, message)
VALUES (?, ?, 'short-term', ?, ?, ?, ?, ?)
`)
// 최근 1분 내 동일 로그 존재 여부 확인 (중복 방지)
const recentLogExists = db.prepare(`
SELECT 1 FROM anomaly_logs
WHERE target_id = ? AND detect_type = 'short-term' AND metric = ?
AND detected_at > datetime('now', '-1 minute', 'localtime')
LIMIT 1
`)
for (const server of servers) {
const snapshots = db.prepare(`
SELECT cpu_percent, memory_percent, collected_at
FROM server_snapshots
WHERE target_id = ?
ORDER BY collected_at DESC
const snapshots = await query<any>(`
SELECT cpu_usage as cpu_percent, memory_usage as memory_percent, checked_at as collected_at
FROM server_logs
WHERE target_id = $1
ORDER BY checked_at DESC
LIMIT 20
`).all(server.target_id) as any[]
`, [server.target_id])
if (snapshots.length < 4) {
serverResults.push({
@@ -53,10 +38,10 @@ export default defineEventHandler(async (event) => {
const currSnapshots = snapshots.slice(0, half)
const prevSnapshots = snapshots.slice(half)
const currCpuAvg = currSnapshots.reduce((sum, s) => sum + (s.cpu_percent || 0), 0) / currSnapshots.length
const prevCpuAvg = prevSnapshots.reduce((sum, s) => sum + (s.cpu_percent || 0), 0) / prevSnapshots.length
const currMemAvg = currSnapshots.reduce((sum, s) => sum + (s.memory_percent || 0), 0) / currSnapshots.length
const prevMemAvg = prevSnapshots.reduce((sum, s) => sum + (s.memory_percent || 0), 0) / prevSnapshots.length
const currCpuAvg = currSnapshots.reduce((sum: number, s: any) => sum + (Number(s.cpu_percent) || 0), 0) / currSnapshots.length
const prevCpuAvg = prevSnapshots.reduce((sum: number, s: any) => sum + (Number(s.cpu_percent) || 0), 0) / prevSnapshots.length
const currMemAvg = currSnapshots.reduce((sum: number, s: any) => sum + (Number(s.memory_percent) || 0), 0) / currSnapshots.length
const prevMemAvg = prevSnapshots.reduce((sum: number, s: any) => sum + (Number(s.memory_percent) || 0), 0) / prevSnapshots.length
let cpuChange: number | null = null
let memChange: number | null = null
@@ -86,12 +71,8 @@ export default defineEventHandler(async (event) => {
status
})
// CPU 이상 감지 + 로그 저장
// CPU 이상 감지
if (cpuChange !== null && Math.abs(cpuChange) >= THRESHOLD) {
const level = Math.abs(cpuChange) >= 100 ? 'danger' : 'warning'
const direction = cpuChange >= 0 ? '증가' : '감소'
const message = `CPU ${direction} 감지 (${prevCpuAvg.toFixed(1)}% → ${currCpuAvg.toFixed(1)}%)`
anomalies.push({
target_id: server.target_id,
server_name: server.server_name,
@@ -101,19 +82,10 @@ export default defineEventHandler(async (event) => {
change_rate: cpuChange,
direction: cpuChange >= 0 ? 'up' : 'down'
})
// 중복 아니면 로그 저장
if (!recentLogExists.get(server.target_id, 'CPU')) {
insertLog.run(server.target_id, server.server_name, 'CPU', level, currCpuAvg, cpuChange, message)
}
}
// Memory 이상 감지 + 로그 저장
// Memory 이상 감지
if (memChange !== null && Math.abs(memChange) >= THRESHOLD) {
const level = Math.abs(memChange) >= 100 ? 'danger' : 'warning'
const direction = memChange >= 0 ? '증가' : '감소'
const message = `Memory ${direction} 감지 (${prevMemAvg.toFixed(1)}% → ${currMemAvg.toFixed(1)}%)`
anomalies.push({
target_id: server.target_id,
server_name: server.server_name,
@@ -123,10 +95,6 @@ export default defineEventHandler(async (event) => {
change_rate: memChange,
direction: memChange >= 0 ? 'up' : 'down'
})
if (!recentLogExists.get(server.target_id, 'Memory')) {
insertLog.run(server.target_id, server.server_name, 'Memory', level, currMemAvg, memChange, message)
}
}
}