All checks were successful
Build Docker Images for Pull Request / build (pull_request) Successful in 17m5s
116 lines
6.4 KiB
Markdown
116 lines
6.4 KiB
Markdown
# PeerTube collector
|
|
|
|
peertube-collector is a project designed to collect and analyze WebRTC statistics from a Chromium browser and export them to a MongoDB service. This project includes a Docker setup for running the necessary services.
|
|
|
|
## Prerequisites
|
|
|
|
**Linux** based OS with the following:
|
|
|
|
### Software:
|
|
- Docker Engine Community version is required. To install Docker CE, follow the official [install instructions](https://docs.docker.com/engine/install/).
|
|
|
|
### Ports:
|
|
|
|
#### External (OPTIONAL PROBABLY NOT NEEDED!!!):
|
|
These ports are actively used by selenium and the collector services.
|
|
|
|
- 50000:60000/udp (WebRTC)
|
|
- WebRTC NAT traversal requires a range of ports to be open.
|
|
The range needs to be fairly large since the port is chosen randomly by the STUN server.
|
|
- 27107/tcp (MongoDB)
|
|
|
|
Ports can be opened in the host machine's firewall with:
|
|
```sh
|
|
ufw allow 50000:60000/udp
|
|
ufw allow 27107/tcp
|
|
```
|
|
## Setup with Docker Compose
|
|
|
|
1. Clone the repository:
|
|
```sh
|
|
git clone <repository-url>
|
|
cd peertube-collector
|
|
```
|
|
2. Create and configure the environment file based on the `.env.example` file:
|
|
```sh
|
|
cp .env.example .env
|
|
```
|
|
3. Ajust the firewall settings to allow the necessary ports if needed
|
|
4. Start the Docker containers:
|
|
```sh
|
|
docker compose up --abort-on-container-failure
|
|
```
|
|
|
|
The collector will start gathering WebRTC stats from the Selenium container and sending them to the Telegraf service.
|
|
|
|
To stop the Docker containers run: `docker compose down -v`
|
|
|
|
### Setup with Monolithic image:
|
|
|
|
1. Clone the repository:
|
|
```sh
|
|
git clone <repository-url>
|
|
cd peertube-collector
|
|
```
|
|
2. Create and configure the environment file based on the `.env.example` file:
|
|
```sh
|
|
cp .env.example .env
|
|
```
|
|
3. Ajust the firewall settings to allow the necessary ports if needed
|
|
4. Start the Docker container:
|
|
```sh
|
|
docker run --rm -p 7900:7900 --env-file .env --name peertube-collector gitea.kobim.cloud/kobim/peertube-collector-monolith:latest
|
|
```
|
|
|
|
|
|
### Environment Variables
|
|
|
|
| Environment Variable | Service | Default Value | Description |
|
|
| ------------------------------- | -------------------- | ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| `TELEGRAF_HOSTNAME` | telegraf | None, **must** be set | Hostname used to identify the host/user between sessions |
|
|
| `TELEGRAF_MONGODB_DSN` | telegraf | `mongodb://stats_user...` | DSN for the MongoDB service |
|
|
| `TELEGRAF_MONGODB_DATABASE` | telegraf | `statistics` | Database name for the MongoDB service |
|
|
| `VIDEO_URL` | collector | `https://tube.kobim.cloud/...` | URL for the video to be analyzed |
|
|
| `HUB_URL` | collector | None | URL for the Selenium Hub. If not set, the local Chrome driver will be used |
|
|
| `SOCKET_URL` | collector | `localhost` | Socket URL for Telegraf service |
|
|
| `SOCKET_PORT` | collector & telegraf | `8094` | Socket port for Telegraf service |
|
|
| `WEBRTC_INTERNALS_PATH` | collector | None | **Absolute** path for WebRTC internals exporter extension. When **not** set the extension path is construced relative to the current main script location. |
|
|
| `WEBRTC_INTERNALS_EXPORTER_URL` | WebRTC extension | `http://localhost:9092` | Server URL for the WebRTC internals exporter extension |
|
|
|
|
Variables can be set in the `.env` file.
|
|
An example configuration is provided in the `.env.example` file.
|
|
|
|
### Monitoring
|
|
A noVNC server is available at [http://localhost:7900](http://localhost:7900/?autoconnect=1&resize=scale&password=secret) to monitor the Selenium container. The password is `secret`.
|
|
|
|
## Components
|
|
|
|
### Docker Compose
|
|
|
|
The `docker-compose.yml` file defines the following services:
|
|
- **selenium**: Runs a Selenium standalone Chromium container.
|
|
- **telegraf**: Collects and sends metrics to the specified output.
|
|
- **collector**: Runs the main Python application to collect WebRTC stats.
|
|
|
|
### Dockerfile
|
|
|
|
The `Dockerfile` sets up the Python environment and installs the necessary dependencies to run the `main.py` script.
|
|
|
|
### Monolithic Dockerfile
|
|
|
|
`Monolith.dockerfile` is a single Dockerfile that combines the Selenium, Telegraf, and Collector services into a single container. This is useful for deployment in a single container environment.
|
|
|
|
### Main Python Script
|
|
|
|
The `main.py` script sets up the Selenium WebDriver, collects WebRTC stats, and sends them to the Telegraf service.
|
|
|
|
### WebRTC Internals Exporter
|
|
|
|
The `webrtc-internals-exporter` directory contains a Chromium extension that collects WebRTC stats from the browser.
|
|
It uses Webpack to replace the server collector endpoint with an environment variable.
|
|
|
|
# Credits
|
|
|
|
- [WebRTC Internals Exporter](https://github.com/vpalmisano/webrtc-internals-exporter)
|
|
- [WebRTC debugging with Prometheus/Grafana](https://medium.com/@vpalmisano/webrtc-debugging-with-prometheus-grafana-254b6ac71063)
|
|
- [MongoDB Docker Compose examples](https://github.com/TGITS/docker-compose-examples/tree/main/mongodb-docker-compose-examples) |