Skip to content

QoS Agent configurations

Sampling and other options can be set under the environment section of the lti_qos-agent.yml. Below is an example of all possible customizations.

Note: Any modification to the configuration file of a running docker needs to be followed by a restart of the docker by invoking the following command:

Should you use docker v2, the command will be docker compose.

docker-compose -f lti_qos-agent.yml up -d

Interval options, for each protocol

    environment:

      # Interval between bandwidth measures, in seconds -- minimum interval : 60
      - LTI_iperf3_session_interval=7200

      # Interval between traceroute measures, in seconds -- minimum interval: 60
      - LTI_traceroute_interval=300.0

      # Interval between HTTP measures, in seconds -- minimum interval: .01
      - LTI_http_interval=2.0

      # Interval between HTTPs measures, in seconds -- minimum interval: .01
      - LTI_https_interval=2.0

      # Interval between TCP measures, in seconds -- minimum interval: .01
      - LTI_tcp_interval=2.0

      # Interval between UDP measures, in seconds -- minimum interval: .01
      - LTI_udp_interval=2.0

      # Interval between ICMP measures, in seconds -- minimum interval: .01
      - LTI_icmp_interval=2.0

      # Interval between TWAMP sessions, in seconds -- minimum interval: 1
      - LTI_twamp_session_interval=1   

      # Interval between PacketLoss measures, in seconds -- minimum interval: 1
      - LTI_packetlossudp_interval = 5

Note: It is possible to disable a protocol by setting its sampling rate to -1. E.g. specifying LTI_iperf3_session_interval=-1 will disable iperf.

ICMP specific options

    environment:

      # ICMP timeout, in seconds
      - LTI_icmp_timeout=1

      # ICMP packet payload, in bytes
      # Use integer format, min: 24, default: 56
      # Ping equivalent option: -s
      - LTI_icmp_packet_payload=56

iPerf3 specific options

    environment:

      # UDP usage for bandwidth measurement
      # iperf3 equivalent option: -u
      - LTI_iperf3_udp=false

      # Duration of the iperf test (seconds) 
      # iperf3 equivalent option: -t
      - LTI_iperf3_test_duration=10

      # Length of buffer to read or write (default 128K for TCP or 1460 for UDP)
      # iperf3 equivalent option: -l
      - LTI_iperf3_buffer_length=128K

      # Target bitrate in bits/sec (0 for unlimited)
      # iperf3 equivalent option: -b
      - LTI_iperf3_bitrate=1M

      # Time interval between packets during a test (seconds)
      # ipef3 equivalent option: -i
      - LTI_iperf3_transmit_interval=1

Traceroute specific options

    environment:

      # Maximum hops
      - LTI_traceroute_max_hops=32

      # Maximum measures per hop
      - LTI_traceroute_measures_per_hop=3

TWAMP specific options

    environment:

      # Advanced padding option
      - LTI_twamp_packet_use_zero_pad=false

      # Packets per session -- minimum: 1
      - LTI_twamp_packet_count=15

      # Interval between packets, in milliseconds -- minimum interval: 1
      - LTI_twamp_packet_interval=100

      # Payload size, in bits -- minimum: 1
      - LTI_twamp_packet_payload=1024

      # DSCP mode, Default is 0 (Best Effort)
      # Other usefull values: 
      # - 46, Expedited Forwarding (Voice)
      # - 53, Network tests and measurements
      - LTI_twamp_packet_dscp=0

      # Change the TCP port, default is 12862
      - LTI_twamp_control_port=12862

      # Change the UDP port, default is 12800
      - LTI_twamp_session_port=12800

      # Change the number of parallels sessions (range of UDP ports used), default is 20
      - LTI_twamp_max_parallel_sessions=20

Lifbe specific options

    environment:

      # Network Subtype ["WIFI_802_11abg", "WIFI_802_11n", "WIFI_802_11ac", 
      # "MOBILE_GPRS", "MOBILE_HSPA" ,"MOBILE_HSPAP" ,"MOBILE_HSUPA", 
      # "MOBILE_UMTS", "MOBILE_LTE", "MOBILE_5G", "ETHERNET", "ETHERNET_FAST", "ETHERNET_GE"]
      # Satellite Subtypes: ["SAT_LEO_IRIDIUM", "SAT_LEO_ONEWEB", "SAT_LEO_STARLINK", "SAT_GEO0", "SAT_GEO1", "SAT_GEO2"]
      - LTI_lifbe_network_subtype=MOBILE_5G

      # Network Interface ["WIFI","MOBILE","ETH", "SAT"]
      - LTI_lifbe_network_type=MOBILE

      # Interval between session measurements, in ms
      - LTI_lifbe_session_interval_ms=3600000

      # Number of measurement to send per session
      - LTI_lifbe_measure_number=5

      # Time between two measurement, in ms
      - LTI_lifbe_measure_interval_ms=800

      # Measure direction ['downlink'|'uplink'|'both']
      - LTI_lifbe_measure_direction=both

Packet Loss specific options

    environment:

      # Interval between session measurements, in seconds
      - LTI_packetlossudp_interval=5

      # Number of packets per measure session -- minimum: 3, maximum: 200
      - LTI_packetlossudp_packet_number=50

      # Measure direction ['downlink'|'uplink'|'both']
      - LTI_packetlossudp_measure_direction=both

Advanced publisher options

    environment:

      # Kafka message policy (see below) in ["FIFO", "TIMED_BURST", "RANDOM_TIMED_BURST", "CACHE_BURST"]
      - LTI_kafka_sending_policy=FIFO

      # Number of messages cached in memory. Messages have a priority system in case the cache fills up.
      - LTI_kafka_cache_size=20

      # Used with "TIMED_BURST" and "RANDOM_TIMED_BURST" policy. Delay in seconds between data burst.
      - LTI_kafka_timed_burst_s=20

      # Used with "RANDOM_TIMED_BURST" policy. Add a random delay between 0 and this value to each burst
      - LTI_kafka_randomness_var_s=10

      # Kafka message timeout duration in ms. Used to resend unsuccessful paquets.
      - LTI_kafka_messages_timeout_ms=5000

The different policies work as follows:

  • "FIFO" is the default behaviour. It corresponds to sending the information packet as soon as it is produced, or as soon as the packet is detected as having timed out. The size of the cache is of secondary importance, since it is only used when several packets are detected as having timed out at the same time.

  • "TIMED_BURST" corresponds to caching incoming packets and packets that have timed out, then sending them only periodically (with a delay between sends corresponding to LTI_kafka_timed_burst_s). The size of the cache can limit the number of packets. If the cache is full, priority is given to the most recent packets, although certain packets necessary for proper functioning, such as metadata, are set aside.

  • "RANDOM_TIMED_BURST" works as "TIMED_BURST" but adds a random component to the delay between sending batch of messages. This additional delay corresponds to a value within the range [ 0; LTI_kafka_randomness_var_s ] selected at random each time a batch of messages is sent.

  • "CACHE_BURST" is a policy for making the best use of the cache system. Packets will only be sent in batch when the cache is nearly full. As we are waiting for the cache to fill up, it is quite possible that a large number of packets detected simultaneously as having timed out will exceed the maximum capacity of the cache. In this case, packets exceeding the max capacity will be dropped (provided that they are not essential).

Custom analyzer Configurations

The analyzer can be configured by going into the lti_analyzer directory and modifying the docker-compose.yml file. After the modification run the following command to apply it.

docker-compose up -d

Setting up SMTP for alerts

Modify the grafana section to add your SMTP configurations

      - GF_SMTP_ENABLED=true

      # Replace with your SMTP host
      - GF_SMTP_HOST=smtp.example.com

      # Replace with your SMTP username
      - GF_SMTP_USER=myuser

      # Replace with your SMTP password
      - GF_SMTP_PASSWORD=mysecret

After making this change and applying by running docker-compose up -d, you can update the recepient email addresses in the grafana dashboard by going to alerting > contact points and adding your email address to the addresses of the default contact point.