This project implements a Distributed Network Monitoring System designed for monitoring and analyzing the state of network links and devices in a distributed environment. The system leverages custom-built application-layer protocols, NetTask
(UDP-based) and AlertFlow
(TCP-based), to achieve efficient communication between clients (agents) and the central server.
-
NetTask Protocol:
- UDP-based, handles task distribution, metric collection, and agent registration.
- Implements reliability mechanisms like ACKs, retransmissions, and packet ID management.
-
AlertFlow Protocol:
- TCP-based, ensures reliable transmission of critical alerts when thresholds are exceeded.
-
Network Monitoring Tools:
- Uses tools such as
ping
andiperf
for metrics including latency, bandwidth, jitter, and packet loss. - Supports monitoring device metrics like CPU and RAM usage.
- Uses tools such as
-
JSON-Based Task Management:
- Tasks and thresholds are defined in JSON configuration files.
-
Scalable and Distributed:
- Supports multiple agents reporting to a single server.
-
Languages/Tools:
- Go (Golang)
- CORE Network Emulator (v7.5 or later)
- Utilities:
ping
,iperf
-
Environment:
- Linux-based systems for network emulation.
- JSON files for configuration.
.
├── LICENSE
├── Makefile # Automates build and run processes
├── README.md # Project documentation
├── cmd/ # Entrypoints for server and agent
│ └── nms/
│ ├── agent/
│ │ └── runner.go
│ └── server/
│ └── runner.go
├── configs/ # Configuration files
│ └── tasks.json # JSON tasks configuration
├── docs/ # Documentation
│ ├── report.pdf # Technical report
│ ├── CC Enunciado TP2 24-25.pdf # Project statement
├── internal/ # Core system modules
│ ├── agent/
│ │ ├── alertflow/
│ │ │ └── tcp.go
│ │ └── nettask/
│ │ ├── handlePingTask.go
│ │ └── other-task-handlers.go
│ ├── server/
│ │ ├── alertflow/
│ │ │ └── handleAlert.go
│ │ └── nettask/
│ │ └── task-handlers.go
│ ├── jsonParse/
│ │ ├── parser.go
│ │ └── task.go
│ └── utils/
│ ├── tcp.go
│ └── utils.go
└── topology/
└── CC-Topologia.imn # Core emulator topology file
Clone the repository and navigate to the project directory:
git clone git@github.com:2101dudu/Network-Monitoring-System.git
cd Network-Monitoring-System
Server
- Build and run the server:
make server
- Build and start the server in verbose mode for debugging:
make server-verbose
Agent
- Build and run the agent:
make agent
- Build and start the agent in verbose mode for debugging:
make agent-verbose
Edit the tasks.json
file in the configs/
directory to define tasks, thresholds, and monitoring parameters.
- Use the CORE Network Emulator to simulate networks and validate the system.
- Deploy multiple agents and simulate scenarios with packet loss and alerts.
- Ensure agents register correctly, execute tasks, and report metrics.
- Start the server.
- Deploy agents across different simulated devices.
- Configure and load tasks using
tasks.json
. - Observe metric collection and alert notifications.