Network Connections - Proxy Container
What it does
This metric provider records all the external web resources that are requested by the build and the run of the benchmark. Currently it only supports http and https connections but more might follow if requested. This is very interesting when wanting to benchmark certain scenarios in which network traffic is important.
We use the great tinyproxy as it is very performant and doesn’t add a lot of overhead
which might skew our measurements. Under Mac you need to install this by yourself with
brew install tinyproxy!
It is worth highlight that this proxy only works with external resources. It does not report on inter-container network communication. It also currently does not record the amount of data transferred. For this you can use our Network I/O cgroup provider.
The proxy implementation does not follow the “standard” way in which we define metric providers in that they echo a
key value pair to a file and this is then loaded into the measurements database. Instead it parses the output of the
proxy program and then adds the corresponding values to the
How it works
When starting the metric provider the
tinyproxy program is started in the user space and mapped to the port 8889.
All log are written the the GMT log folder for later processing as the aim is to do the absolute minimal while
measuring. Once the
tinyproxy has loaded all docker containers are started with the
httpProxy and the
command line argument. A detailed description how to use docker proxies can be found
here. It is important to note that we don’t set the proxy for the whole
docker daemon as this might interfere with other docker containers running on the same system but are not part
of our benchmark.
The docker container needs to be able to access the proxy running on the host system. While there is a standard domain
under Windows and Mac
host.docker.internal which resolves to the host this is not available under Linux. If you
Service not found or similar error under Linux it is probably a problem with the ip resolution of the host
system. Please refer to the following configuration part to see how this can be mitigated.
The network proxy does not need any configuration by default. It is however possible to set the
if our logic does not resolve a correct ip on Linux.
common: network.proxy.proxy_provider.ProxyMetricsProvider: host_ip: 192.168.1.2
host_ip needs to be reachable from inside of the container and the proxy needs to be accessible on port 8889.
Normally you don’t neet to set the
host_ip as we try to detect it. If this fails you can set it manually.
Please make sure that tinyproxy is in your local path and installed. On Mac you can do this with
brew install tinyproxy
On Linux machines the install script should have taken care of the install.