Self-hosting. iPerf3 exporter

ЭкспортСр Prometheus для ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ сСтСвой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ iPerf3.
ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π² автоматичСском Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ Π·Π°ΠΌΠ΅Ρ€Ρ‹ скорости сСти с использованиСм iperf ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² Prometheus

Π’Π°ΠΆΠ½ΠΎ

АвтоматичСскиС Π·Π°ΠΌΠ΅Ρ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ объСм Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ°. Π­Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ настройкС. Π‘Ρ€Π΅Π΄Π½Π΅Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠ° Π½Π° ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΌΠ΅Ρ€ со ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒΡŽ 1Gb/s ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ 5 сСкунд составляСт ~600 Мб.

Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ: https://github.com/edgard/iperf3_exporter

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ docker compose Ρ„Π°ΠΉΠ»Π°:

services:
  iperf3_exporter:
    container_name: iperf3-exporter
    image: ghcr.io/edgard/iperf3_exporter:latest
    ports:
      - '9579:9579'

ПослС запуска Π±ΡƒΠ΄Π΅Ρ‚ доступСн Π²Π΅Π± интСрфСйс ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΡ€Ρ‚Ρƒ
Self-hosting. iPerf3 exporter.png
Для выполнСния Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅Ρ€Π° ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ запросом Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ адрСс:
http://monitoring.local:9579/probe?target=example.com
Π³Π΄Π΅

Настройка Prometheus:

  - job_name: 'iperf3'
    scrape_interval: 1h
    metrics_path: /probe
    static_configs:
      - targets:
        - iperf.server.com
    params:
      port: ['5201']
      # Optional: enable reverse mode
      # reverse_mode: ['true']
      # Optional: enable UDP mode
      #udp_mode: ['true']
      # Optional: set bitrate limit
      #bitrate: ['1G']
      # Optional: set test period
      period: ['5s']
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: monitoring.local:9579  # The iPerf3 exporter's real hostname:port.

Настройка сСрвСра ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°

НСобходимо ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ iperf3

apt install iperf3
sudo systemctl daemon-reload
sudo systemctl enable iperf3
sudo systemctl start iperf3
sudo systemctl status iperf3

Если ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ufw Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΠΎΡ€Ρ‚Ρ‹ для тСста (ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π±Π΅Π»Ρ‹Ρ… ip с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ тСст):

sudo ufw allow from <ip> to any port 5201 proto udp
sudo ufw allow from <ip> to any port 5201 proto tcp

Запрос prometheus

Для получСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ запрос:

((last_over_time(iperf3_received_bytes[2h]) / last_over_time(iperf3_received_seconds[2h])) * 8) 
(
    (last_over_time(iperf3_sent_bytes[2h]) / last_over_time(iperf3_sent_seconds[2h]))
    * 8
) 

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΠ°Π½Π΅Π»ΠΈ:
![[iperf monitoring-1765922599921.json]]