Skip to content

FUCLU/NetPulse

Repository files navigation

NetPulse - Quản trị mạng và hệ thống

Node.js Python InfluxDB Docker GNS3 Netmiko

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

Thành viên

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

Giới thiệu

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.

Tính năng chính

  • 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.

Kiến trúc hệ thống

NetPulse Architecture

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

Giao diệ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.

NetPulse Dashboard

Ả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.

Overview

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.

Devices & Topology

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.

Inventory

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.

Metrics

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.

Alerts

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.

Automation

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.

Backups

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.

Công nghệ sử dụng

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

Cấu trúc thư mục

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

Yêu cầu môi trường

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

Cài đặt

1. Cài thư viện Python

pip install -r requirements.txt

2. Cài thư viện Node.js

cd server
npm install
cd ..

3. Tạo file môi trường

copy .env.example .env

Trên Linux/macOS:

cp .env.example .env

Ví 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.

Chạy hệ thống

Khởi động toàn bộ stack:

docker compose up -d --build

Kiểm tra container:

docker compose ps

Xem log:

docker compose logs -f server
docker compose logs -f collector
docker compose logs -f alert-manager

Truy cập:

Dịch vụ URL
NetPulse Dashboard http://localhost:3001
InfluxDB UI http://localhost:8086

Dừng hệ thống:

docker compose down

Cấu hình thiết bị GNS3

Thiế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/0

Nế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.

API chính

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

Automation tasks

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

Kiểm thử

Chạy toàn bộ test:

pytest tests -v

Chạy từng nhóm test:

pytest tests/test_collector.py -v
pytest tests/test_automation.py -v
pytest tests/test_alert.py -v

Lệnh thường dùng

# 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

Lưu ý vận hành

  • 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 .env phả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.

Kết luận

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)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors