Kuidas ma ehitasin lihtsa Interneti kvaliteedi monitooringu (ja miks see tegelikult kasulik on)

Kuidas ma ehitasin lihtsa Interneti kvaliteedi monitooringu (ja miks see tegelikult kasulik on)
Photo by Frederik Lipfert / Unsplash

Kui sul on kunagi olnud tunne, et “internet on täna kuidagi aeglane”, aga speedtest näitab täiesti normaalset tulemust, siis sa tead probleemi.

Latency hüppab, paketid kaovad, DNS uimerdab… aga seda kõike on keeruline tõestada. Eriti siis, kui pead ISP-le ticketi avama või kliendile selgitama, miks VPN lagib.

Sealt tuli mul idee. Panen püsti lihtsa, pidevalt töötava mõõtmisagendi, mis kogub päris andmeid, mitte ainult ühekordset snapshoti nagu speedtest.


Mis see lahendus teeb?

Kasutasin Docker image’it netprobe, mis jookseb taustal ja teeb regulaarselt:

  • ping ruuterisse (local gateway)
  • ping tuntud saitidele (nt Google, YouTube)
  • DNS päringud erinevatele resolveritele
  • (valikuline) speedtest

Kõik tulemused kirjutatakse lokaalsesse SQLite andmebaasi ja kuvatakse web UI-s.

Ehk siis sul tekib ajalugu, mitte ainult hetkeseis.


Minu setup (lihtne ja robustne)

Mul jookseb see LXC konteineris (Debian Trixie) Proxmoxis.

Miks nii?

  • eraldatud keskkond, ei sega hosti
  • lihtne deploy
  • väga väike resource usage

Sees kasutan Docker Compose’i:

services:
  netprobe:
    image: bmmbmm01/netprobe:latest
    container_name: netprobe
    restart: unless-stopped

    environment:
      WEB_PORT: 8080
      DB_PATH: /data/netprobe.sqlite
      PROBE_INTERVAL: 60
      PING_COUNT: 4

      SITES: fast.com,google.com,youtube.com
      ROUTER_IP: X.X.X.X

      DNS_TEST_SITE: google.com
      DNS_NAMESERVER_1: Google_DNS
      DNS_NAMESERVER_1_IP: 8.8.8.8
      DNS_NAMESERVER_2: Quad9_DNS
      DNS_NAMESERVER_2_IP: 9.9.9.9
      DNS_NAMESERVER_3: CloudFlare_DNS
      DNS_NAMESERVER_3_IP: 1.1.1.1
      DNS_NAMESERVER_4: My_DNS_Server
      DNS_NAMESERVER_4_IP: X.X.X.X

      WEIGHT_LOSS: 0.6
      WEIGHT_LATENCY: 0.15
      WEIGHT_JITTER: 0.2
      WEIGHT_DNS_LATENCY: 0.05

      THRESHOLD_LOSS: 5
      THRESHOLD_LATENCY: 100
      THRESHOLD_JITTER: 30
      THRESHOLD_DNS_LATENCY: 100

      SPEEDTEST_ENABLED: "True"
      SPEEDTEST_INTERVAL: 14400
      APP_TIMEZONE: Europe/Tallinn

    ports:
      - "8080:8080"

    volumes:
      - /home/dmitri/Netprobe/data:/data

    cap_add:
      - NET_RAW

Miks need valikud?

  • /data mount tähendab, et andmetest on lihtne teha backupi ja ringi kolida teise hosti peale kui vajadus tekkib
  • NET_RAW on vajalik ICMP pingide jaoks
  • PROBE_INTERVAL 60 sekundit annab piisava täpsuse ilma liigse koormuseta
  • SITES on päris teenused, mitte ainult IP aadressid

Mis on Internet Quality Score?

Süsteem arvutab ühe numbri vahemikus 0 kuni 100, mis näitab kui hea su ühendus parasjagu on.

Interneti kvaliteedi skoor

Interneti kvaliteedi skoor on mõõdik, mis annab ülevaate sinu internetiühenduse kvaliteedist igal ajahetkel. See koosneb neljast komponendist:

  • Paketikaotus 60.0%
  • Latentsus 15.0%
  • Jitter 20.0%
  • DNS vastuse aeg 5.0%

Paketikaotus

See näitab, kui suur osa pakette läheb kaduma.

Ideaalis peaks see olema 0%, väikeste hüpetega tipptundidel.

Pidev paketikaotus võib viidata:

  • vigasele kaablile või modemile
  • ISP seadmete probleemile
  • ISP ülekoormusele

Latentsus


Aeg, mis kulub paketil sihtkohta jõudmiseks ja tagasi tulemiseks. Minu seadistuses mõõdan latentsust teenuste nagu fast.com, google.com ja youtube.com suunas.

Kõrge latentsus tähendab aeglast tunnetust isegi siis, kui kiirus on suur.

Võimalikud põhjused:

  • probleemid sisemises võrgus
  • ISP routing
  • kehv ühendus välismaailma

Jitter

Jitter mõõdab latentsuse kõikumist.

See mõjutab otseselt:

  • videokõnesid
  • VoIP kõnesid
  • online mänge

Kõrge jitter tähendab ebastabiilset ühendust ja tuntavaid katkestusi.


DNS vastuse aeg

DNS on esimene samm peaaegu iga ühenduse puhul.

Kui DNS on aeglane:

  • veebilehed avanevad aeglaselt
  • samas speedtest võib olla täiesti korras

Probleem võib olla:

  • DNS serveris
  • või üldises latentsuses

Interneti ribalaius (perioodilised kiirusetestid)

See on klassikaline Mbps number.

Aga oluline asi, mida paljud ei tea:

halb kasutajakogemus ei tähenda alati väikest kiirust

Sageli on tegelikud süüdlased:

  • packet loss
  • jitter
  • DNS

Mul on näiteks kodus 100/100 Mbit/s ühendus.
Kui teha teste, siis näen, et allalaadimine on maksimaalselt umbes 85 Mbit/s ja üleslaadimine samuti.

Esimene mõte võiks olla, et teenusepakkuja ei täida oma lubadusi.

Tegelikult ei ole probleem ISP-s.

Mul on tulemüüris meelega seadistatud traffic shaping, ehk WAN liidesele on pandud kiirusepiirang.


Miks ma seda teen?


Põhjus on bufferbloat.

Mis on bufferbloat?

Bufferbloat on võrgu seadmete tarkvaraga seotud probleem, mis põhjustab internetiühenduse latentsuse järske tõuse olukorras, kus mõni seade võrgus laadib alla või üles andmeid.

Tulemus:

  • latentsus kasvab
  • jitter suureneb
  • ühendus muutub “uimaseks”
  • videokõned ja mängud hakkavad lagima

Ja kõige olulisem:

👉 speedtest võib samal ajal näidata täiesti normaalset kiirust


Kuidas seda lahendada?

Üks levinud lahendus ongi:

👉 piirata ühendust natuke alla maksimumi

Näiteks:

  • 100 Mbit/s ühendus
  • limiter seatud ~80–90 Mbit/s peale

Sellega saavutad, et:

  • järjekorrad tekivad sinu seadmes (kus sa kontrollid neid)
  • mitte ISP seadmetes (kus sa ei kontrolli midagi)

Tulemus

Kuigi maksimaalne kiirus on veidi väiksem:

  • latentsus on stabiilsem
  • jitter on väiksem
  • ühendus tundub kiirem ja “sujuvam”

Ehk reaalses kasutuses on kogemus parem.

Bufferbloat test, tehtud ühes arvutis üle wifit.


Miks see tegelikult kasulik on?

Kodukasutajale

Kui:

  • Netflix jääb bufferdama
  • Teams lagib
  • mängus tekivad katkestused

siis saad lõpuks näidata, et probleem on päriselt olemas, mitte lihtsalt tunne.


IT adminidele

Siin tuleb päris väärtus välja:

  • saad eristada kas probleem on LAN-is või ISP-s
  • näed mustreid, näiteks kindlatel kellaaegadel
  • saad teha reaalse andme põhise troubleshootingu

Väikeettevõttele

Kui töö sõltub internetist, näiteks:

  • VoIP
  • VPN
  • pilveteenused

siis see lahendus annab:

  • varajase indikatsiooni probleemidest
  • ajaloolise ülevaate
  • reaalse aluse ISP-ga suhtlemiseks

Mida ma ise sellest õppisin?

Kõige huvitavam asi oli see, et probleemid ei ole pidevad.

Need on lühikesed spike’id.

Ilma sellise tööriistata:

  • sa ei märka neid
  • sa ei saa neid tõestada

Kokkuvõte

See lahendus on:

  • odav
  • lihtne
  • praktiline

Ja kõige tähtsam, see annab sulle päris pildi interneti kvaliteedist, mitte ainult ühe speedtesti tulemuse.