무료 자체 호스팅 SNMP 툴킷을 만들었습니다 — 이제 실시간 WebSocket 푸시 지원
I’m happy to translate the article for you, but I’ll need the full text you’d like translated. Could you please paste the content (excluding the source line you already provided) here? Once I have the article text, I’ll translate it into Korean while preserving the original formatting, markdown, and technical terms.
Trishul SNMP란 무엇인가요?
자체 호스팅되는 SNMP 개발 툴킷으로, 다섯 가지 도구를 하나의 깔끔한 웹 UI에 통합합니다.
| 기능 | 대신에 |
|---|---|
| SNMP 시뮬레이터 (UDP 에이전트) | snmpsim + CLI 설정 |
| Walk & Parse → JSON | snmpwalk + 수동 OID 조회 |
| Trap 전송기 + 수신기 | snmptrap + snmptrapd |
| MIB 브라우저 (트리 뷰) | iReasoning MIB Browser ($500+) |
| MIB 매니저 (업로드/검증) | 텍스트 편집기 + 수동 의존성 관리 지옥 |
스택: Python 3.11, FastAPI, pysnmp, pysmi, Bootstrap 5, Docker.
# Install in one command
curl -fsSL https://raw.githubusercontent.com/tosumitdhaka/trishul-snmp/main/install-trishul-snmp.sh | bash
그런 다음 http://localhost:8080을 엽니다. 기본 로그인: admin / admin123 — Settings에서 즉시 변경하세요.
v1.2.4 업데이트 내용
⚡ 실시간 WebSocket 푸시 — 폴링은 사라졌다
가장 큰 아키텍처 변화: 프론트엔드 전체가 이제 이벤트‑드리븐으로 동작합니다.
이전: 모든 페이지가 setInterval 로 백엔드에 폴링했습니다 — 대시보드 30 초마다, 시뮬레이터 5 초마다. 오래된 데이터가 흔했습니다. 페이지 전환 시 스피너가 나타났습니다.
이후: /api/ws 에 하나의 지속적인 WebSocket 연결을 사용합니다. 백엔드는 상태 변화가 일어나는 즉시 브로드캐스트합니다. 대시보드, 시뮬레이터 상태, 트랩 리시버가 모두 즉시 업데이트되며 새로 고침이 필요 없습니다.
Browser ←──── WS push ────── FastAPI /api/ws
│
broadcasts on:
- trap received
- simulator start/stop
- MIB uploaded
- stats change
네비게이션 바에 WebSocket이 정상일 때 초록색 점이 실시간으로 표시됩니다. 재연결 시 백엔드는 full_state 메시지를 보내 모든 데이터를 다시 시드하므로 네트워크 일시 중단 후에도 오래된 데이터를 보지 않게 됩니다.
개발자에게 중요한 이유: 트랩 핸들러를 만들고 UI에서 테스트 트랩을 보낼 때, 대시보드의 카운터가 실시간으로 증가하는 것을 바로 확인할 수 있습니다. F5는 필요 없습니다.
📊 실시간 활동 통계 대시보드
대시보드에 새롭게 추가된 8개의 카운터 행이 세션에서 일어나는 모든 일을 보여줍니다:
| 카운터 | 설명 |
|---|---|
| SNMP 요청 | 시뮬레이터가 처리한 전체 폴링 횟수 |
| 로드된 OID | 로드된 모든 MIB에서 현재 메모리에 있는 OID 수 |
| 수신/전송된 트랩 | 실시간 트랩 카운터 |
| 실행된 Walk | 수행한 SNMP walk 횟수 |
| 반환된 OID | 모든 Walk에서 반환된 OID 총합 |
| 업로드된 MIB / 재로드 횟수 | MIB 관리 활동 |
모든 카운터는 WebSocket 푸시로 업데이트됩니다. 또한 파일 기반으로 저장돼 컨테이너 재시작 후에도 세션 히스토리를 유지합니다.
⚙️ 설정 — 새 카드 3개
앱 동작
- 두 개 토글: 시뮬레이터 자동 시작 및 트랩 리시버 자동 시작 (컨테이너 부팅 시).
- 세션 타임아웃 설정 가능 (60 s – 86 400 s).
- 설정은
app_settings.json에 저장되며 다음 재시작 시 적용됩니다.
통계 관리
- 모든 카운터를 JSON 으로 내보내기 (테스트 세션 결과 로깅에 유용).
- 테스트 실행 전 카운터를 0 으로 초기화하여 깨끗한 기준점 확보.
정보
- 버전, 작성자, 설명이 백엔드에서 실시간으로 가져와 표시됩니다 — 실제 배포된 내용과 항상 동기화됩니다.
🐛 주요 수정 사항
| 이슈 | 수정 내용 |
|---|---|
타임스탬프 버그 – 트랩 리시버가 백엔드에서 Unix epoch 0 을 반환했을 때 Last Received 를 1970 으로 표시 | 값을 검증하여 epoch 가 0 인 경우 -- 로 표시하도록 방어 로직 추가 |
| 전송된 트랩 카운트 누락 – 통계가 프론트엔드에서만 증가했으며 API 직접 트랩 전송 시 카운터가 업데이트되지 않음 | 백엔드가 트랩 전송 성공 시마다 통계를 브로드캐스트하도록 변경 |
페이지 전환 시 대시보드 스피너 – WS full_state 가 DashboardModule.init() 가 리스너를 등록하기 전에 발생해 타일이 스피너에 머무름 | WS 상태와 관계없이 초기화 시 항상 REST 로 시드하도록 수정 |
MIB 브라우저 상태 충돌 – Walk & Parse 에서 미리 채워진 OID 로 브라우저로 이동할 때 이전 세션의 대기 중 트리 상태가 충돌해 Could not find node 로그가 발생 | 프로그램적으로 OID 검색이 있을 경우 pendingSelectedOid 와 pendingExpandedNodes 를 초기화하도록 함 |
이 문서는 누구를 위한 것인가?
- NMS / backend developers – 실제 하드웨어 없이 폴링할 수 있는 실제 SNMP 에이전트가 필요하거나, 핸들러 코드를 검증하기 위해 특정 트랩 OID를 발생시켜야 함.
- DevOps / integration engineers – CI/스테이징 환경에서 SNMP 모니터링 통합을 테스트해야 함.
- Network engineers – MIB 구조를 인터랙티브하게 탐색하고 싶음 — OID, 이름, 설명으로 검색 — 그리고 장비가 실제 배치되기 전에 어떤 트랩을 발생시킬 수 있는지 이해하고자 함.
이것은 아닌 경우
- Production 24/7 monitoring → Zabbix, LibreNMS, PRTG 사용.
- Enterprise NMS → SolarWinds, Cisco Prime 사용.
- High‑availability trap collection at scale → 전용 플랫폼 사용.
Trishul은 개발자 및 테스트 도구이며, 프로덕션 모니터링 시스템이 아닙니다.
빠른 아키텍처
Browser (8080)
│ HTTP + WebSocket
▼
Nginx (static files + reverse proxy)
│ REST + WS
▼
FastAPI Backend (8000)
├── MIB Service (parse, validate, search)
├── SNMP Simulator (UDP 1061)
├── Trap Manager (send + receive on UDP 1162)
├── Walker (SNMP walk client)
└── WebSocket hub (/api/ws)
모든 구성 요소는 Docker에서 host network mode로 실행되므로 SNMP UDP 포트(1061, 1162)에 호스트에서 접근할 수 있습니다.
사용해 보기
# One‑command install
curl -fsSL https://raw.githubusercontent.com/tosumitdhaka/trishul-snmp/main/install-trishul-snmp.sh | bash
# Access at
http://localhost:8080
🐙 GitHub — tosumitdhaka/trishul-snmp
💬 v1.2.4 발표 및 토론 — 토론 보기
📋 전체 변경 로그 — 변경 로그 보기
프로젝트가 유용했다면 GitHub에 ⭐ 하나만 달아 주세요 — 다른 개발자들이 프로젝트를 찾는 데 큰 도움이 됩니다.
아키텍처 결정, pysnmp/pysmi 통합, 혹은 WebSocket 구현에 관한 질문이 있으면 댓글로 언제든 답변해 드리겠습니다. 🔱