분석 기반 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>
75 lines
3.2 KiB
Markdown
75 lines
3.2 KiB
Markdown
# 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) |
|
|
|
|
### 핵심 구현
|
|
```python
|
|
# 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 모델 확장
|
|
```python
|
|
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와 발견 데이터 포맷 공유
|
|
- **보고**: 완료 후 자동 발견 커버리지 지표 보고
|