Files
Tuan-Dat Tran 931652c494 Initial commit
Signed-off-by: Tuan-Dat Tran <tuan-dat.tran@tudattr.dev>
2024-12-31 13:36:22 +01:00

3.5 KiB

5G-IANA: UULM Network Monitoring

This repository contains the CI/CD and Dockerfiles necessary to build the UULM Network Monitoring Tool.

This tool is used to deploy a RTMP stream behind a reverse proxy and a network monitoring client which has a consumer for the stream. The monitoring tool outputs the timestamp, lat, lon, byts per second and rtt.

Feature Flags

There are currently two feature flags for this tool which enable us to record and output data to the endpoint in multiple formats.

RTT

With only the rtt flag enabled the tool records and emits the rtt towards the ping_ip. One output would look like this:

# lat, lon, rtt
0.00000000,0.00000000,6480000 ns
curl -X GET -H "Content-Type: application/json" -d "{ \"endpoint_ip\": [\"http://172.17.0.1:41002/upload\"], \"ping_ip\": \"1.1\" }" http://172.17.0.1:8000/demo/start
cargo build -F rtt

RTT/Throughput

# unix timestamp, lat, lon, bytes per second, rtt
1716480819,0.00000000,0.00000000,1.86 KB,6960000 ns
curl -X GET -H "Content-Type: application/json" -d "{ \"endpoint_ip\": [\"http://172.17.0.1:41002/upload\"], \"ping_ip\": \"1.1\" , \"stream_url\": \"rtmp://132.252.100.137:31000/live/test\" }" http://172.17.0.1:8000/demo/start
cargo build -F rtt -F throughput

Throughput (not yet tested)

# lat, lon, throughput per second
0.00000000,0.00000000,1.86 KB
curl -X GET -H "Content-Type: application/json" -d "{ \"endpoint_ip\": [\"http://172.17.0.1:41002/upload\"], \"stream_url\": \"rtmp://132.252.100.137:31000/live/test\" }" http://172.17.0.1:8000/demo/start
cargo build -F throughput

Local Deployment

Example

# Server
docker build -f nginx.Dockerfile -t ffmpeg-nginx .; docker run -p 1935:1935 ffmpeg-nginx:latest

# Client
# Add features as needed
cargo run -F rtt -F throughput -- -p "/pcap/receiver.pcap" -o "/output/videoprobe_$(date '+%s').log"

# Configure Client
curl -X GET -H "Content-Type: application/json" -d "{ \"endpoint_ip\": [\"http://172.17.0.1:41002/upload\"], \"ping_ip\": \"1.1\" , \"stream_url\": \"rtmp://localhost:1935/live/test\" }" http://172.17.0.1:8000/demo/start

Open internal Ports

  • 1935: RTMP of web providing sender-stream
  • 8000: Endpoint of videoprobe

Configurations/Environment Variables

  • STREAMURL: The URL of a rtmp based video stream. In this environment it is to be web.
  • RUSTLOG: The logging level of the network monitoring tool itself.
  • ROCKETCONFIG: Might as well be constant, but specifies the path for the configuration of the API endpoint of videoprobe.
  • VPTARGET: The API endpoint to upload the collected data to with with a POST request. This is variable should not be used during the demonstration.
  • CMD: Needed as an alternative to using the command: keyword, which is usually used to overwrite a containers entrypoint.
  • GNSSENABLED: Used for choosing whether the videoprobe should be running with "dry gps". Dry GPS means that the tool will be running without GPS capabilities in case the user is sure that there is no GNSS device present or satalite connectivity can't be ensured.
  • GNSSDEV: The path of the mounted GNSS Device. Needed to start gpsd inside of the container. Changes to it should also be applied to the corresponding file:local-docker-compose.yml and file:docker-compose.yml.