Tên dự án: Ứng dụng NetDevOps trong giám sát thời gian thực và tự động hóa quản trị mạng
Nhóm: 10
Giảng viên hướng dẫn: Nguyễn Khánh Thuật
| MSSV | Họ và tên | Vai trò chính |
|---|---|---|
| 24521382 | Lưu Hồng Phúc | Python pipeline, storage, scheduler, backend API |
| 24520624 | Phan Thái Hưng | Device collector, parser, alert manager, remediation |
| 24520919 | Võ Tường Tuấn Kiệt | GNS3 lab, Jinja2 templates, config pusher, topology |
NetPulse là hệ thống giám sát mạng thời gian thực kết hợp tự động hóa quản trị cấu hình theo hướng NetDevOps. Hệ thống kết nối đến các thiết bị router/switch trong lab GNS3, thu thập metric, lưu dữ liệu vào InfluxDB và hiển thị trên dashboard web.
Bên cạnh chức năng giám sát, NetPulse hỗ trợ các tác vụ quản trị như backup cấu hình, restore cấu hình, so sánh config, push cấu hình từ template Jinja2, kiểm tra kết nối, kiểm tra compliance và tự động xử lý cảnh báo CPU cao theo chính sách remediation.
- Giám sát trạng thái thiết bị mạng theo thời gian thực.
- Thu thập CPU, memory và trạng thái interface từ router/switch.
- Lưu metric vào InfluxDB 2.7.
- Dashboard web cập nhật dữ liệu định kỳ 5 giây.
- Hiển thị topology mạng trực quan bằng SVG.
- Quản lý inventory thiết bị ngay trên giao diện.
- Cảnh báo theo ngưỡng CPU warning và critical.
- Cấu hình auto remediation policy và safe interface.
- Chạy automation task trực tiếp từ dashboard.
- Backup, restore và download file cấu hình.
- Hỗ trợ GNS3 API để đồng bộ node và link trong lab.
Luồng xử lý tổng quát:
GNS3 Devices
-> collector/scheduler.py
-> storage/db_client.py
-> InfluxDB
-> server/routes/*.js
-> dashboard/static
Luồng cảnh báo:
InfluxDB metrics
-> alerts/alert_manager.py
-> alerts/active_alerts.json và measurement alert
-> GET /api/alerts
-> Dashboard Alerts
Luồng automation:
Dashboard
-> POST /api/automation/run
-> automation/*.py
-> Netmiko SSH/Telnet
-> Network devices
-> Terminal output trên Dashboard
Dashboard được xây dựng theo dạng single-page application trong dashboard/static. Giao diện gồm sidebar bên trái, topbar phía trên và vùng nội dung chính.
Ảnh trên minh họa màn hình dashboard chính của NetPulse. Giao diện được thiết kế để người quản trị có thể nhìn nhanh số lượng thiết bị, trạng thái online, cảnh báo đang active, biểu đồ CPU/memory realtime và các module vận hành như topology, inventory, metrics, alerts, automation và backups.
Màn hình tổng quan hiển thị:
- Tổng số thiết bị trong inventory.
- Số thiết bị online.
- Số cảnh báo đang active.
- Trạng thái remediation.
- Biểu đồ CPU realtime.
- Biểu đồ memory realtime.
- Danh sách cảnh báo gần đây.
Trang này dùng để theo dõi danh sách thiết bị và sơ đồ mạng:
- Bảng thiết bị gồm hostname, IP, type, OS, status, CPU và action.
- Sơ đồ topology bằng SVG.
- Màu sắc thể hiện trạng thái online, warning hoặc offline.
- Hỗ trợ zoom, fit view và xem thông tin chi tiết node.
- Có thể lấy node/link từ GNS3 API nếu được cấu hình.
Trang Inventory cho phép quản lý thiết bị:
- Thêm thiết bị mới.
- Chỉnh sửa thông tin thiết bị.
- Xóa thiết bị.
- Cấu hình protocol SSH, Telnet, no_cli hoặc icmp_only.
- Khai báo IP quản trị, platform, username, password, interface và static route.
- Ghi log các thao tác inventory.
Trang Metrics hiển thị dữ liệu hiệu năng:
- Chọn thiết bị cần xem metric.
- Xem biểu đồ CPU theo các mốc 1 giờ, 24 giờ, 3 ngày và 7 ngày.
- Theo dõi trạng thái interface, IPv4, admin status, oper status, input/output và last seen.
Trang Alerts dùng để quản lý cảnh báo:
- Lọc cảnh báo theo severity và thời gian.
- Hiển thị device, CPU, status và remediation result.
- Clear log cảnh báo.
- Quản lý Auto Remediation Policy.
- Xem bảng audit log của remediation.
Trang Automation là nơi chạy các tác vụ quản trị:
- Backup Configuration.
- Restore Configuration.
- Config Diff.
- Initial Config.
- Push Network Configuration.
- Configure SSH.
- Verify Connectivity.
- Compliance Check.
- Validator.
Kết quả chạy task được stream về terminal trên dashboard để người dùng theo dõi realtime.
Trang Backups hiển thị các file backup cấu hình:
- Tên thiết bị.
- Thời gian backup.
- Kích thước file.
- Tên file cấu hình.
- Download backup.
- Chạy backup nhanh và xem output.
| Thành phần | Công nghệ | Vai trò |
|---|---|---|
| Network lab | GNS3, Cisco IOS | Môi trường router/switch ảo |
| Collector | Python, Netmiko | Kết nối thiết bị và thu thập metric |
| Parser | Python | Parse output CLI thành dữ liệu có cấu trúc |
| Database | InfluxDB 2.7 | Lưu trữ time-series metrics |
| Backend | Node.js, Express | REST API và serve dashboard |
| Frontend | HTML, CSS, Vanilla JS, SVG | Dashboard realtime |
| Automation | Python, Netmiko, Jinja2 | Backup, restore, push config, compliance |
| Inventory | YAML | Khai báo thiết bị và thông tin quản trị |
| Container | Docker Compose | Chạy InfluxDB, server, collector, alert-manager |
| Testing | Pytest | Kiểm thử collector, automation và alert |
NetPulse/
|-- main.py # API Python phụ trợ và alert worker
|-- docker-compose.yml # InfluxDB, server, collector, alert-manager
|-- requirements.txt # Thư viện Python
|-- server/ # Backend Node.js Express
| |-- index.js
| |-- routes/
| |-- services/
|-- dashboard/
| |-- static/
| |-- index.html
| |-- main.css
| |-- js/
|-- collector/ # Thu thập metric từ thiết bị
|-- alerts/ # Alert manager và active alerts
|-- automation/ # Script tự động hóa quản trị mạng
|-- storage/ # DB client, task run, backup files
|-- inventory/ # hosts.yaml, groups.yaml, defaults.yaml
|-- templates/ # Jinja2 templates
|-- tests/ # Pytest test suite
|-- docs/ # Tài liệu và hình ảnh minh họa
| Thành phần | Phiên bản khuyến nghị |
|---|---|
| Python | 3.11+ |
| Node.js | 18+ hoặc 20+ |
| Docker Desktop | 24+ |
| Docker Compose | V2 |
| GNS3 | 2.2+ |
| Cisco IOS image | c3725, c3745, c7200 hoặc tương đương |
pip install -r requirements.txtcd server
npm install
cd ..copy .env.example .envTrên Linux/macOS:
cp .env.example .envVí dụ cấu hình .env:
INFLUX_URL=http://localhost:8086
INFLUX_URL_DOCKER=http://influxdb:8086
INFLUX_TOKEN=netpulse-secret-token-2026
INFLUX_ORG=netpulse_lab
INFLUX_BUCKET=network_metrics
CPU_WARNING_THRESHOLD=70
CPU_CRITICAL_THRESHOLD=85
ALERT_POLL_INTERVAL=10
ENABLE_REMEDIATION=1
GNS3_API_URL=http://localhost:3080
GNS3_PROJECT_ID=<your_project_id>
GNS3_API_USERNAME=<username>
GNS3_API_PASSWORD=<password>Không commit file .env lên GitHub vì file này có thể chứa token và thông tin đăng nhập.
Khởi động toàn bộ stack:
docker compose up -d --buildKiểm tra container:
docker compose psXem log:
docker compose logs -f server
docker compose logs -f collector
docker compose logs -f alert-managerTruy cập:
| Dịch vụ | URL |
|---|---|
| NetPulse Dashboard | http://localhost:3001 |
| InfluxDB UI | http://localhost:8086 |
Dừng hệ thống:
docker compose downThiết bị router/switch cần có SSH hoặc Telnet để collector và automation kết nối. Ví dụ cấu hình SSH trên Cisco IOS:
enable
configure terminal
hostname R1
ip domain-name lab.local
username admin privilege 15 secret cisco123
crypto key generate rsa modulus 1024
ip ssh version 2
line vty 0 4
login local
transport input ssh
exec-timeout 30 0
end
write memory
Ví dụ khai báo trong inventory/hosts.yaml:
all:
children:
routers:
hosts:
R1:
platform: cisco_ios
protocol: ssh
ansible_host: 192.168.200.10
ansible_user: admin
ansible_password: cisco123
default_interface: FastEthernet0/0Nếu bật GNS3 API, các node trong project có thể được đồng bộ lên dashboard. Inventory vẫn được dùng để override thông tin quản trị như IP, protocol, credentials và template variables.
| Method | Endpoint | Mô tả |
|---|---|---|
| GET | /api/health |
Kiểm tra server |
| GET | /api/influx/health |
Kiểm tra InfluxDB |
| GET | /api/devices |
Lấy danh sách và trạng thái thiết bị |
| GET | /api/devices/:hostname |
Lấy chi tiết một thiết bị |
| PUT | /api/devices/inventory/:hostname |
Thêm hoặc cập nhật override inventory |
| DELETE | /api/devices/inventory/:hostname |
Xóa override inventory |
| GET | /api/metrics?host=R1&range=-1h |
Lấy CPU, memory và interface history |
| GET | /api/alerts |
Lấy danh sách cảnh báo |
| POST | /api/alerts/ack-all |
Acknowledge tất cả cảnh báo |
| POST | /api/alerts/clear |
Xóa cảnh báo |
| GET | /api/alerts/remediation-policy |
Lấy chính sách remediation |
| GET | /api/alerts/remediation-audit |
Lấy audit log remediation |
| GET | /api/tasks |
Lấy lịch sử task |
| POST | /api/tasks/clear |
Xóa lịch sử task |
| POST | /api/automation/run |
Chạy automation task |
| GET | /api/backups |
Lấy danh sách backup |
| GET | /api/backups/:filename/download |
Download file backup |
| GET | /api/topology/gns3 |
Lấy topology từ GNS3 |
| GET | /api/topology/links |
Lấy link người dùng cấu hình |
| POST | /api/topology/link |
Thêm link |
| DELETE | /api/topology/link |
Xóa link |
| GET | /api/collector/health |
Kiểm tra collector |
| POST | /api/collector/run |
Chạy collector thủ công |
Dashboard gọi các script trong thư mục automation/ thông qua endpoint /api/automation/run.
| Task | Chức năng |
|---|---|
backup_configuration |
Sao lưu running-config vào storage/backups/ |
restore_configuration |
Khôi phục cấu hình từ bản backup |
config_diff |
So sánh running-config với baseline |
initial_config |
Cấu hình ban đầu cho thiết bị |
push_network_configuration |
Render Jinja2 và đẩy cấu hình xuống thiết bị |
configure_ssh |
Cấu hình SSH cho thiết bị |
verify_connectivity |
Kiểm tra kết nối trước/sau thao tác |
compliance_check |
Kiểm tra cấu hình bảo mật |
validator |
Kiểm tra template và cấu hình trước khi push |
Chạy toàn bộ test:
pytest tests -vChạy từng nhóm test:
pytest tests/test_collector.py -v
pytest tests/test_automation.py -v
pytest tests/test_alert.py -v# Khởi động lại server sau khi sửa code
docker compose up -d --build server
# Chạy collector bằng Python ngoài Docker
python -m collector.scheduler
# Chạy alert manager
python alerts/alert_manager.py
# Backup tất cả thiết bị
python automation/backup_configuration.py --target all
# Xem log tất cả container
docker compose logs -f- GNS3 phải đang chạy trước khi collector kết nối thiết bị.
- Router/switch cần được cấu hình SSH hoặc Telnet đúng với inventory.
- InfluxDB token, org và bucket trong
.envphải khớp với Docker Compose. - Built-in switch trong GNS3 thường không có CLI/IP quản trị, trạng thái có thể hiển thị
unknown. - Nếu GNS3 chậm, có thể tăng timeout trong
inventory/defaults.yaml.
NetPulse cung cấp một dashboard tập trung để giám sát, cảnh báo và tự động hóa quản trị mạng trong môi trường GNS3. Hệ thống giúp giảm thao tác thủ công, tăng khả năng quan sát realtime và hỗ trợ xử lý sự cố nhanh hơn thông qua các tác vụ automation.
Nhóm 10 - Trường Đại học Công nghệ Thông tin (UIT)

