26J30d1

Young-Kyoo Kim·2026년 6월 29일
"""
config.py (글로벌 파이프라인 설정 및 도메인 규칙 원부 - 데이터 레이크 고도화 버전)
"""
import re
from pathlib import Path

# ── 📂 1. 글로벌 프로젝트 경로 정의 ──
BASE_DIR = Path(__file__).resolve().parent
RAW_DIR = BASE_DIR / "data" / "raw"
MERGED_DIR = BASE_DIR / "data" / "merged"
OUT_DIR = BASE_DIR / "data" / "output"

# 모든 경로 자동 생성 보장
for d in [RAW_DIR, MERGED_DIR, OUT_DIR, OUT_DIR / "plots"]:
    d.mkdir(parents=True, exist_ok=True)

# ── 🌐 2. Thanos / Prometheus 코어 인프라 정보 ──
DEFAULT_THANOS_URL = "http://thanos-query.internal.zone:9090"

# ── 🪣 3. MinIO AIStor 오브젝트 스토리지 버킷 구분 정의 ──
# 원천 Parquet 시계열 데이터를 보관하는 데이터 레이크 원부 버킷
MINIO_RAW_BUCKET = "enterprise-finops-raw-lake"
# 최종 결산 보고서(Excel, 차트)가 배포되는 리포트 버킷
MINIO_REPORT_BUCKET = "enterprise-finops-reports"

# ── 🔍 4. 공통 노드 프리픽스 정규식 필터 변수 ──
NODE_PREFIX_PATTERN = r"name1wk\d+"

# ── 📈 5. step1 전용 마스터 PromQL 쿼리 생성 매크로 ──
def get_finops_promql_queries(selector):
    return {
        "cpu_request": f"kube_pod_container_resource_requests{selector.replace('container!=', 'resource="cpu", container!=')}",
        "cpu_limit":   f"kube_pod_container_resource_limits{selector.replace('container!=', 'resource="cpu", container!=')}",
        "cpu_usage":   f"rate(container_cpu_usage_seconds_total{selector}[1m])",
        "mem_request": f"kube_pod_container_resource_requests{selector.replace('container!=', 'resource="memory", container!=')}",
        "mem_limit":   f"kube_pod_container_resource_limits{selector.replace('container!=', 'resource="memory", container!=')}",
        "mem_usage":   f"container_memory_working_set_bytes{selector}",
        "oom_event":   f"kube_pod_container_status_terminated_reason{selector.replace('container!=', 'reason="OOMKilled", container!=')}"
    }

# ── 🧩 6. step2 전용 기술 워크로드 도메인 분류 함수 ──
def get_workload_type(pod_name):
    p = str(pod_name).lower()
    
    # 1. SPARK (동적 분산 엔진)
    if "spark" in p or "-exec-" in p or "-driver" in p:
        if "executor" in p or "-exec-" in p: return "SPARK_EXECUTOR"
        if "driver" in p or "-driver" in p: return "SPARK_DRIVER"
        return "SPARK_SYSTEM"
        
    # 2. AIRFLOW (비동기 배치 배포 제어) - statsd 포함
    if "airflow" in p or "statsd" in p:
        if "worker" in p: return "AIRFLOW_WORKER"
        if "scheduler" in p: return "AIRFLOW_SCHEDULER"
        if "dag-processor" in p: return "AIRFLOW_DAG_PROC"
        if "triggerer" in p: return "AIRFLOW_TRIGGERER"
        return "AIRFLOW_SYSTEM"
        
    # 3. STARROCKS (초고속 OLAP)
    if "starrocks" in p or "-be-" in p or "-fe-" in p or "-cn-" in p:
        if "-be" in p: return "STARROCKS_BE"
        if "-fe" in p: return "STARROCKS_FE"
        if "-cn" in p: return "STARROCKS_CN"
        return "STARROCKS_SYSTEM"
        
    # 4. POSTGRESQL (메타 RDBMS) - postgresql-backup 지정 명세화
    if "postgres" in p or "pgpool" in p:
        if "postgresql-backup" in p: return "POSTGRES_BACKUP"
        if "pgpool" in p: return "POSTGRES_POOL"
        return "POSTGRESQL"
        
    # 5. HYPERSET (BI 시각화) - 사번(7-8자리) 중간 유입 패턴 처리 및 단일 'HYPERSET' 처리
    if "hyperset" in p or "superset" in p or re.search(r"hyperset-\d{7,8}-redis", p):
        return "HYPERSET"
        
    # 6. JUPYTERLAB (분석 휴면 워크로드)
    if "jupyter" in p or "notebook" in p:
        return "JUPYTERLAB"
        
    # 7. MINIO STORAGE (오브젝트 스토리지 코어) - lake-pool 융합
    if "minio" in p or "aistor" in p or "lake-pool" in p:
        return "MINIO_STORAGE"
        
    # 8. CILIUM CNI (eBPF 네트워크 인프라)
    if "cilium" in p:
        return "CILIUM_CNI"
        
    return "GENERAL_APPS"

0개의 댓글