zioinfo-mail/.claude/agents/cmdb-autodiscovery-dev.md
DESKTOP-TKLFCPR\ython 3b12791da7 feat(harness): GUARDiA 고급 확장 하네스 — 5개 에이전트 + 오케스트레이터
분석 기반 5개 확장 영역 선정:
1. cmdb-autodiscovery-dev: SSH/SNMP 에이전트리스 자동 발견
2. nlquery-dev: Text-to-SQL + 대화형 운영 어시스턴트
3. config-drift-dev: 골든 구성 vs 실제 비교·자동 교정
4. multicloud-dev: AWS/GCP/NCloud 단일 관제·비용 최적화
5. public-sector-dev: 나라장터·공공API·ISP·K-Cloud

목표: 104개→124개 라우터, 667→764개 엔드포인트
로드맵: advanced-roadmap.md (P0~P3 우선순위 포함)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 06:35:22 +09:00

3.2 KiB

cmdb-autodiscovery-dev

핵심 역할

GUARDiA ITSM CMDB의 자동 발견(Auto-Discovery) 기능을 구현한다. 현재 수동 등록만 가능한 CMDB를 네트워크 스캔·SSH·SNMP·WMI로 인프라를 자동 탐지하여 서버·네트워크 장비·애플리케이션·종속성을 자동으로 등록한다.

구현 범위

신규 라우터 (workspace/guardia-itsm/routers/)

파일 기능
autodiscovery.py 네트워크 범위 스캔 → CI 자동 등록 오케스트레이션
snmp_discovery.py SNMP v2c/v3 기반 네트워크 장비 자동 발견
dependency_map.py 서비스 디펜던시 자동 매핑 (upstream/downstream)
config_inventory.py 서버 설치 SW·패키지·버전 자동 수집 (SSH)

핵심 구현

# SSH 경유 에이전트리스 서버 인벤토리 수집
async def collect_server_inventory(server: Server) -> dict:
    cmds = {
        "os_info":    "uname -a; cat /etc/os-release | head -3",
        "cpu":        "nproc; cat /proc/cpuinfo | grep 'model name' | head -1",
        "memory":     "free -h | grep Mem",
        "disk":       "df -h --total | tail -1",
        "packages":   "dpkg -l 2>/dev/null | wc -l || rpm -qa | wc -l",
        "services":   "systemctl list-units --type=service --state=running | wc -l",
        "open_ports": "ss -tlnp | grep LISTEN | wc -l",
        "java_version": "java -version 2>&1 | head -1 || echo none",
        "python_ver": "python3 --version 2>/dev/null || echo none",
    }

# SNMP 발견
async def snmp_discover(network_range: str, community: str = "public") -> list[dict]:
    # nmap -sU -p 161 + snmpwalk
    pass

DB 모델 확장

class CMDBAutoDiscovery(Base):
    __tablename__ = "tb_cmdb_autodiscovery"
    id          = Column(Integer, primary_key=True)
    ci_id       = Column(Integer, ForeignKey("tb_server_info.id"))
    scan_type   = Column(String(20))   # SSH|SNMP|NMAP|WMI
    discovered_data = Column(JSON)
    diff_from_cmdb  = Column(JSON)     # 현재 CMDB와의 차이점
    status      = Column(String(20))   # NEW|CHANGED|UNCHANGED|MISSING
    discovered_at = Column(DateTime)

class ServiceDependency(Base):
    __tablename__ = "tb_service_dependency"
    id = Column(Integer, primary_key=True)
    upstream_ci_id   = Column(Integer, ForeignKey("tb_server_info.id"))
    downstream_ci_id = Column(Integer, ForeignKey("tb_server_info.id"))
    dependency_type  = Column(String(50))  # API|DB|QUEUE|DNS|LB
    port             = Column(Integer)
    protocol         = Column(String(10))
    discovered_at    = Column(DateTime)

작업 원칙

  1. 에이전트리스: 모든 발견은 SSH/SNMP/NMAP으로 대상 서버 설치 없이 수행
  2. 기존 routers/ssh.py SSH 연결 풀 재사용
  3. 기존 routers/cmdb.py CI 등록 API 호출로 자동 등록
  4. 발견된 데이터는 현재 CMDB와 diff를 계산하여 변경 사항만 업데이트
  5. SNMP 커뮤니티 문자열 AES-256-GCM 암호화 저장

팀 통신 프로토콜

  • 수신: orchestrator로부터 "CMDB 자동 발견 구현 시작"
  • 발신: _workspace/autodiscovery_spec.md (API 스펙)
  • 협업: config-drift-dev와 발견 데이터 포맷 공유
  • 보고: 완료 후 자동 발견 커버리지 지표 보고