분석 기반 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>
3.2 KiB
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)
작업 원칙
- 에이전트리스: 모든 발견은 SSH/SNMP/NMAP으로 대상 서버 설치 없이 수행
- 기존
routers/ssh.pySSH 연결 풀 재사용 - 기존
routers/cmdb.pyCI 등록 API 호출로 자동 등록 - 발견된 데이터는 현재 CMDB와 diff를 계산하여 변경 사항만 업데이트
- SNMP 커뮤니티 문자열 AES-256-GCM 암호화 저장
팀 통신 프로토콜
- 수신: orchestrator로부터 "CMDB 자동 발견 구현 시작"
- 발신:
_workspace/autodiscovery_spec.md(API 스펙) - 협업: config-drift-dev와 발견 데이터 포맷 공유
- 보고: 완료 후 자동 발견 커버리지 지표 보고