Self-hosting. iPerf3 exporter
ΠΠΊΡΠΏΠΎΡΡΠ΅Ρ Prometheus Π΄Π»Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ iPerf3.
ΠΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π² Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π·Π°ΠΌΠ΅ΡΡ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠ΅ΡΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ iperf ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Π² Prometheus
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π·Π°ΠΌΠ΅ΡΡ ΠΌΠΎΠ³ΡΡ ΠΏΠΎΡΡΠ΅Π±Π»ΡΡΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΌ ΡΡΠ°ΡΠΈΠΊΠ°. ΠΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΏΡΠΈ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅. Π‘ΡΠ΅Π΄Π½Π΅Π΅ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΠΊΠ° Π½Π° ΠΎΠ΄ΠΈΠ½ Π·Π°ΠΌΠ΅Ρ ΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡΡ 1Gb/s ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ 5 ΡΠ΅ΠΊΡΠ½Π΄ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ~600 ΠΠ±.
Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ: https://github.com/edgard/iperf3_exporter
ΠΡΠΈΠΌΠ΅Ρ docker compose ΡΠ°ΠΉΠ»Π°:
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π²Π΅Π± ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΏΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΠΏΠΎΡΡΡ

ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΠΎΠ±ΡΡΠ½ΡΠΌ Π·Π°ΠΏΡΠΎΡΠΎΠΌ Π±ΡΠ°ΡΠ·Π΅ΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π°Π΄ΡΠ΅Ρ:
http://monitoring.local:9579/probe?target=example.com
Π³Π΄Π΅
monitoring.local:9579- Π°Π΄ΡΠ΅Ρ ΡΠΊΡΠΏΠΎΡΡΠ΅ΡΠ° Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ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.
- Π ΡΠ°Π·Π΄Π΅Π»Π΅
targetsΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Π·Π°ΠΌΠ΅ΡΡ ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ. - ΠΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
udp_modeΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ udp ΠΏΡΠΎΡΠΎΠΊΠΎΠ» Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΡ Π·Π°Π΄Π°Π²Π°ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π° Π½Π΅ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡ ΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ. - ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ
bitrateΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΡΡ ΡΠΊΠΎΡΠΎΡΡΡ Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠ΅ΡΡ, ΡΡΠΎ ΡΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠΊΠΎΡΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ. period- Π²ΡΠ΅ΠΌΡ Π·Π° ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡΡΡ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅monitoring.local- Π°Π΄ΡΠ΅Ρiperf3-exporterΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π±ΡΠ΄Π΅Ρ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ prometheus Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΌΠ΅ΡΠ°.
ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΡΠΈΠ΅ΠΌΠ½ΠΈΠΊΠ°
ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ 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]]
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:: ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΠΊΠΎΡΠΎΡΡΠΈ ΡΠ΅ΡΠΈ Π² prometheus