Vai al contenuto
Home » Informatica » Networking » Misurazione connessione internet Raspberry Pi Speedtest Prometheus Grafana

Misurazione connessione internet Raspberry Pi Speedtest Prometheus Grafana

    Misurazione connessione internet Raspberry Pi Speedtest Prometheus Grafana

    Stai impazzendo per la qualità della tua connessione ad internet? Guida completa per la misurazione connessione internet con Raspberry Pi, Speedtest CLI, Prometheus e Grafana.

    Broadband domestico: la mia odissea

    Prima di entrare nel dettaglio, permettetemi una lunga e sentita introduzione poiché sto affrontando sul campo come molti il problema del digital divide in Italia che affligge chi, come me, abita nella periferia o in una piccola o media cittadina di provincia, come ho in parte raccontato nel mio articolo sul miglior router 4G,

    Broadband domestico: la mia odissea
    Broadband domestico: la mia odissea

    Diciamo pure che nel corso di diversi anni ormai ho valutato o provato sostanzialmente tutte le soluzioni possibili, tranne la preistorica ADSL, per risolverlo.

    Tutto comincia con l'impossibilità da parte di TIM di collegare la mia nuova casa alla rete di accesso mediante il doppino in rame.

    Cominciamo allora attivando il servizio Eolo che si rivelava in linea con le promesse (30 Mbit/s in download) e con cui non ho avuto particolari problemi per oltre un anno fino a quando hanno costruito una palazzina che ha coperto la visibilità ottica dell'antenna BTS obbligandomi nuovamente a guardare altrove.

    Nel frattempo TIM si era mossa e finalmente potevo celebrare la fibra su rame (FTTC) che mi consentiva di andare a ben 33 Mbit/s in download: ma non sapevo ancora che quella felicità sarebbe stata così breve ed effimera.

    Modem router 4G+ LTE

    Purtroppo col tempo la fibra su rame (FTTC), che nel frattempo avevo migrato su Vodafone, è diventata sostanzialmente inutilizzabile (<5 Mbit/s).

    La causa è da ricercarsi non tanto nella capacità dell'internet service provider ma dalla tratta su doppino in rame fino all'armadio di strada con la fibra ottica:

    • la distanza fisica è troppo grande (vedi i 33 Mbit/s iniziali rispetto ai 200 Mbit/s teorici dell'FTTC)
    • col crescere del numero di utenze collegate allo stesso armadio la diafonia ha avuto il sopravvento

    Ho provato allora con successo tecnico un'antenna esterna 4G con modem router integrato (leggi Mikrotik LHG LTE6 kit) che mi permetteva di superare in modo stabile i 70 Mbit/s.

    Purtroppo per il traffico mensile che faccio, ampiamente superiore ad 1 TB, il costo dei provider di connettività mobile delle due antenne BTS vicino a casa (Iliad e Windtre) ritengo non siano sostenibile, anche perché non permettono di sottoscrivere un'offerta di tipo Fixed Wireless Access (FWA).

    Quindi dobbiamo guardare altrove ancora una volta.

    Ho anche valutato il mitico servizio Starlink di Space X, essendo uno dei primissimi ad inserire un ordine non appena cominciate le vendite in Italia.

    Ma passata l'adrenalina della novità, ho cancellato l'ordine qualche giorno dopo averlo fatto ripensando al costo mensile del servizio.

    Una parte di me si morde le dita ancora oggi.

    Non avendo sostanzialmente altre opzioni possibili, ho attivato Linkem sperando che fosse un servizio migliore di quanto si legge sulle recensioni (quelle non sponsorizzate). Purtroppo la realtà si è rivelata essere molto peggio di ogni mia immaginazione.

    Il tanto pubblicizzato servizio Linkem in FWA fino a 100 Mbit/s in download e 10 Mbit/s in upload si rivelava, nel caso dell'antenna che copre il mio edificio, di soli 30 Mbit/s in DL e 3 Mbit/s in UL.

    Io e la mia bile abbiamo perso il conto del numero di disconnessioni che occorrono ogni giorno e che rendono il servizio Linkem totalmente inaffidabile, soprattutto usandolo per farci smart working o didattica a distanza.

    Errore disconnessione Linkem
    Errore disconnessione Linkem

    Sono ora in ansiosa attesa che FiberCop / TIM completino la rete in fibra ottica (FTTH), per quanto anche questo si stia rivelando un altro parto podalico.

    Da buon umarell precoce ho infatti colto subito i piccoli cantieri per la fibra ottica nella mia strada e come un bot ho cominciato a controllare la copertura sul sito di FiberCop.

    Ordine partito immediatamente con Tiscali quando la copertura è diventata disponibile: tecnico che interviene ma che scopre che manca ancora il ROE / PTE (Ripartitore Ottico di Edificio / Punto di Terminazione di Edificio) nella chiostrina su strada dove arriva il mio vecchio doppino in rame.

    Ho allora richiesto la cancellazione dell'ordine, inserendone uno nuovo con TIM direttamente: vedremo quanto ci impiegherà FiberCop / TIM a completare la rete di accesso questa volta.

    Come misurare velocità e stabilità della connessione internet domestica

    Direi che la mia esperienza testimonia in pieno come avere una connessione internet domestica performante e stabile sia davvero una gara di sopravvivenza nella giungla di tecnologie per la rete di accesso (FTTC, FWA, FTTH) ed internet service provider (ISP) presenti sul mercato.

    Uno strumento che può venirci in soccorso è quello di poter misurare la connessione internet di casa al fine di confermare quantitativamente tutte le nostre arrabbiature, evitare la rassegnazione ed avere un'arma nella discussione con gli operatori di telecomunicazioni quando non siano in grado di fornirci un servizio di qualità.

    Abbiamo tre approcci possibili per indirizzare questa esigenza:

    • utilizzare lo strumento ufficiale di AGCOM per aprire un reclamo
    • eseguire manualmente la misura della connessione internet tramite uno dei numerosi strumenti disponibili online tramite un browser
    • automatizzare la misurazione in modo da poter vedere l'andamento nel tempo e giudicare la stabilità della connettività internet

    Misurainternet: SpeedTest Online e misura certificata Ne.Me.Sys.

    Misurainternet è la piattaforma messa a disposizione degli utenti finali da parte di AGCOM (Autorità per le Garanzie nelle Comunicazioni) e che che permette di:

    • effettuare un test online tramite browser
    • scaricare ed installare l'apposito software Ne.Me.Sys. (disponibile per PC, Windows e Linux Ubuntu) che misura la connessione internet per 24 ore in modo esclusivo e produce un report ufficiale valido per aprire direttamente un reclamo al proprio operatore

    Purtroppo non sono riuscito a fare il test online di Misurainternet perché sia con Google Chrome che Microsoft Edge ricevevo sempre l'errore "Speed Test non riesce a far partire la misura! Controlla di essere connesso, di non
    essere in VPN o di non utilizzare browser con offuscamento del client ad esempio TOR o che integrano VPN verso server esterni al suolo italiano"
    . Il problema stava nel mancato supporto dell'operatore Linkem che fornisce solo accessi ad Internet con tecnologia mobile (4G, 5G, FWA) con cui non c'è interconnessione per la misura.

    Ne.Me.Sys. è uno strumento concettualmente potente nel misurare e certificare la qualità della connessione ad internet del proprio operatore:

    • effettua 96 misure, una ogni 15 minuti, nel corso delle 24 ore a partire dal primo campionamento
    • riprova le misure non eseguite in determinati orari per condizioni errate, nella medesima ora entro le 48 ore successive

    I requisiti per poter effettuare misure valide con Ne.Me.Sys. sono le seguenti:

    • il computer da cui viene eseguita la misura della connessione internet deve rimanere accesso fino al completamento delle misure
    • il computer deve avere il WiFi spento ed essere collegato al al modem router tramite cavo di rete
    • non ci devono essere altri dispositivi che che utilizzando la medesima connessione ad internet

    E' sicuramente lo strumento da utilizzare se siete arrivati ai ferri corti col vostro operatore ed avete delle alternative tecniche a disposizione:

    • avrete l'onere di isolare tutti i dispositivi di casa per almeno 24 ore per avere una misurazione valida
    • se anche dopo una seconda misurazione sarà violato il livello di servizio garantito, da effettuare non prima di 45 giorni, potrete fare recesso dal senza penali dal contratto sottoscritto per la parte relativa al servizio di accesso ad internet

    Purtroppo anche sul sito di Misurainternet si parla solo di banda minima garantita: se avete un problema di stabilità questo strumento non vi aiuta. Oltretutto un operatore come Linkem non compare nemmeno in tale elenco.

    Misurare la connessione internet tramite browser

    Utilizzare un browser è assolutamente la maniera più semplice ed immediata per misurare la velocità della connessione ad internet in modo puntuale, può essere effettuata tramite PC o smartphone.

    I servizi più popolari, e che vi raccomando, sono sicuramente i seguenti:

    • Speedtest: è lo standard di fatto, fornito dalla società americana Ookla, dispone di oltre 16.000 server di test nel mondo
    • Fast.com: è molto popolare essendo offerto da Netflix la cui qualità dipende totalmente dalla connettività
    • Google Measurement Lab (M-Lab): è il widget che può comparire automaticamente con una ricerca sull'argomento "test della velocità di Internet", la sua rete di server non ha sicuramente la capillarità di quella di Ookla

    Riporto a titolo illustrativo tre misure effettuate dal mio PC connesso via WiFi con i tre strumenti:

    Speedtest
    Speedtest
    Fast.com (Netflix)
    Fast.com (Netflix)
    Google M-Lab
    Google M-Lab

    Come era atteso le misure effettuate sulla connessione internet non sono consistenti tra di loro:

    • fatte in momenti diversi
    • condizioni di misura differente (server utilizzando, dimensione oggetto per DL / UL, connessione multipla/singola)

    Aggiungerei che i limiti della connessione WiFi non hanno inciso date le basse performance di cui parliamo e fortuna ha voluto che non abbia colto un momento di disservizio di Linkem.

    Ci vuole qualcosa in più.

    Misurazione automatica della connessione internet

    I requisiti per poter misurare la propria connessione internet in modo continuativo ed automatico sono i seguenti:

    • utilizzare un dispositivo sempre acceso e connesso ad internet
    • effettuare in modo automatico le misure con una frequenza configurabile
    • memorizzare i risultati di ogni singola misura della connessione internet
    • visualizzare in modo flessibile l'andamento delle prestazione della connessione internet

    Come dispositivo di misura potremmo usare un vecchio PC o un piccolo Raspberry Pi già in uso per la domotica, l'importante è che:

    • la velocità di elaborazione, per quanto bassa, non deve influenzare negativamente le misure
    • la connessione locale del dispositivo, via Ethernet o WiFi, deve essere molto più stabile e performante della connessione internet per non avere misurazioni falsate

    In questo articolo ci occuperemo esclusivamente di soluzioni di misurazione automatica della connessione internet basate su Raspberry Pi ma potrebbero essere facilmente adattate su Windows, macOS e Linux.

    Per l'esecuzione della misura non ci sono dubbi: utilizzeremo la versione per linea di comando di Speedtest, facilmente automatizzabile e disponibile per tutte le piattaforme.

    Per la memorizzazione dei dati ci sono sostanzialmente due opzioni valide:

    InfluxDB
    InfluxDB

    Database progettato per l'archiviazione e il recupero veloce e ad alta disponibilità di dati su serie temporali; è un sistema push che richiede che un'applicazione invii i dati.

    Prometheus
    Prometheus

    Database ottimizzato per serie temporali di dati, ideale per metriche di monitoraggio, integrato con altri software nativi per il cloud, sistema pull in grado di recuperare i dati.

    Quale modello di Raspberry Pi usare

    E' importante che per la misurazione di velocità della connessione ad internet si utilizzi almeno un Rasperry Pi 4 collegato direttamente tramite cavo ad una porta Gigabit Ethernet del vostro router.

    Tutte le versioni di Raspberry Pi precedenti hanno infatti un limite nella velocità di collegamento via Ethernet come illustrato in questo diagramma riepilogativo:

    Velocità download Raspberry Pi - Ethernet
    Velocità download Raspberry Pi - Ethernet

    Probabilmente se state leggendo questo articolo è perché il vostro ISP vi sta fornendo un servizio quantomeno discutibile, quindi potrebbe anche bastare un Raspberry Pi 3 B+ collegato via Gigabit Ethernet al router.

    Con un collegamento in fibra FTTH, velocità download >1 Gbit/s, anche la misura col Raspberry Pi 4 collegato via Gigabit Ethernet, potrebbe diventare non affidabile.

    L'attendibilità della misura si riduce ulteriormente se pensiamo di utilizzare il collegamento del nostro Raspberry Pi via WiFi visti i limiti raggiungibili:

    Velocità download Raspberry Pi - WiFi
    Velocità download Raspberry Pi - WiFi

    Chiaramente se il vostro obiettivo è quello di misurare affidabilità e velocità di una connessione internet come quella offertami da Linkem, il mio vecchio Raspberry Pi 3 B connesso tramite rete WiFi a 2,4 GHz è sufficiente allo scopo.

    Per verificare la versione hardware del vostro Raspberry Pi potete usare questo astruso comando:

    rev=$(awk '/^Revision/ { print $3 }' /proc/cpuinfo) && curl -L perturb.org/rpi?rev=$rev

    che però fornisce un risultato molto facile da leggere:

    Versione hardware Raspberry Pi
    Versione hardware Raspberry Pi

    Se non lo avessi ancora fatto, leggi la mia guida all'installazione di Raspberry Pi OS.

    Speedtest CLI su Raspberry Pi

    Speedtest CLI è una versione del più popolare tool di misura della velocità della connessione ad internet con il quale potrai:

    • misurare le prestazioni della connessione ad internet generando metriche come velocità di download/upload, tempo di latenza e perdita di pacchetti da linea di comando senza la necessità di utilizzare un browser
    • testare la connessione ad internet grazie alla rete di server Speedtest tramite una macchina Linux o un semplice Raspberry Pi
    • configurare script per la raccolta automatica dei dati sulle prestazioni della connessione al fine di analizzare le variazioni nel corso del tempo
    • integrare Speedtest all'interno di applicazioni in diversi linguaggi di programmazione
    • esportare i risultati in formato CSV o JSON

    La maniera più semplice per installare Speedtest CLI su Raspberry Pi è quella di utilizzare pip:

    sudo pip3 install speedtest-cli

    Una volta effettuata l'installazione, il primo comando che vi suggerisco di lanciare è per la verifica della versione:

    speedtest-cli ‐‐version

    La maniera più semplice è lanciare il comando senza parametri eseguendo un test in modo totalmente automatico:

    Speedtest CLI

    Possiamo anche vedere la lista dei server più vicini geograficamente con cui effettuare il test:

    speedtest-cli --list
    Speedtest CLI

    In questo modo potrete forzare sulla linea di comando il server Speedtest con cui fare il test di performance dal vostro Raspberry Pi:

    Speedtest CLI

    Infine l'opzione più interessante per poter collezionare nel tempo le misure della vostra connessione internet sul vostro Raspberry mediante la generazione del risultato in formato CSV oppure JSON:

    speedtest-cli --csv
    speedtest-cli --json
    Speedtest CLI Raspberry Pi

    Prometheus su Raspberry Pi

    Prometheus prevede tre modalità di installazione:

    • binari pre-compilati
    • compilazione codice sorgente
    • utilizzo di Docker

    Ho arbitrariamente deciso di procedere con i binari pre-compilati: nella sezione download del sito Prometheus trovate l'ultima versione disponibile per l'architettura arm7.

    Installazione e configurazione Prometheus

    Copiate l'indirizzo del file compresso col binario di Prometheus e fate download sul vostro Raspberry Pi:

    wget https://github.com/prometheus/prometheus/releases/download/v2.33.1/prometheus-2.33.1.linux-armv7.tar.gz

    Ora estraete il file binario dall'archivio:

    tar xzf prometheus-2.33.1.linux-armv7.tar.gz
    

    Rinominate il folder così creato in uno più semplice:

    mv prometheus-2.33.1.linux-armv7/ prometheus/

    Ora potete cancellare il file scaricato per lasciare una situazione pulita:

    rm prometheus-2.33.1.linux-armv7.tar.gz
    

    Ora impostiamo un servizio su Raspberry Pi per avviare automaticamente al boot Prometheus e per poterlo fermare ed avviare manualmente in modo facile.

    Creiamo il file di configurazione del servizio mediante l'editor di sistema:

    sudo nano /etc/systemd/system/prometheus.service

    Dove inseriremo questa configurazione:

    [Unit]
    Description=Prometheus Server
    Documentation=https://prometheus.io/docs/introduction/overview/
    After=network-online.target
    
    [Service]
    User=pi
    Restart=on-failure
    
    ExecStart=/home/pi/prometheus/prometheus \
      --config.file=/home/pi/prometheus/prometheus.yml \
      --storage.tsdb.path=/home/pi/prometheus/data
    
    [Install]
    WantedBy=multi-user.target

    Abilitiamo il servizio appena creato:

    sudo systemctl enable prometheus

    Per evitare di aspettare il prossimo reboot possiamo avviarlo immediatamente:

    sudo systemctl start prometheus

    Verificando poi che sia partito regolarmente:

    sudo systemctl status prometheus

    Possiamo accedere all'interfaccia web di Prometheus sulla porta 9090 dell'indirizzo del nostro Raspberry Pi per verificare che tutto abbia funzionato correttamente finora:

    Interfaccia web Prometheus
    Interfaccia web Prometheus

    Prometheus Speedtest Exporter

    Quando non ci sia un'integrazione nativa è possibile sviluppare i cosiddetti Exporter, ovvero dei servizi che, interrogati da Prometheus, restituiscono una certa metrica.

    Esiste uno Speedtest Exporter per Prometheus, scritto in Python, pronto da utilizzare che fa al caso nostro e che può essere installato tramite Docker oppure manualmente. Anche questa volta ho scelto arbitrariamente la strada manuale.

    Il primo passo è quello di clonare localmente al vostro Raspberry Pi il repository GitHub Speedtest Exporter:

    git clone https://github.com/MiguelNdeCarvalho/speedtest-exporter.git

    Entrate ora nella cartella del repository clonato:

    cd speedtest-exporter

    Installate i moduli Python necessari:

    python -m pip install -r src/requirements.txt

    Lanciate ora manualmente l'Exporter:

    python src/exporter.py

    Verificando l'output che conferma l'avvio del processo Speedtest Exporter in ascolto sulla porta 9798:

    Prometheus Speedtest Exporter

    A questo punto mediante il browser, mediante l'URL http://IP_RASPBERRY:9798/metrics, potete simulare l'interrogazione da parte di Prometheus del servizio Speedtest Exporter sulla porta 9798:

    Prometheus Speedtest Exporter

    Anche in questo caso andiamo a creare un servizio su Raspberry Pi per avviare lo Speedtest Exporter per Prometheus all'avvio del sistema:

    sudo nano /etc/systemd/system/speedtest-exporter.service
    
    [Unit]
    Description=Speedtest Exporter Prometeus
    After=network-online.target
    
    [Service]
    User=pi
    Restart=on-failure
    ExecStart=python3.10 /home/pi/speedtest-exporter/src/exporter.py
    
    [Install]
    WantedBy=multi-user.target
    sudo systemctl enable speedtest-exporter

    A questo punto possiamo completare il lavoro con la configurazione di Prometheus in modo che periodicamente vada ad interrogare il servizio Speedtest Exporter ed in ultima battuta esegua materialmente la misura sulla connessione internet.

    Dovrete inserire all'interno della sezione scrape_configs del file /home/pi/prometheus/prometheus.yml la configurazione con i valori corretti per il vostro caso (frequenza, time-out, indirizzo):

    - job_name: 'speedtest-exporter'
      scrape_interval: 150s
      scrape_timeout: 30s
      static_configs:
        - targets: ['localhost:9798']

    Fate un bel restart di Prometheus e la misurazione automatica della vostra connessione internet dovrebbe cominciare:

    sudo systemctl restart prometheus
    

    Potete controllare se i dati vengono raccolti su Prometheus con una semplice query ad esempio sulla velocità di download speedtest_download_bits_per_second:

    Speedtest CLI + Prometheus su Raspberry Pi
    Speedtest CLI + Prometheus su Raspberry Pi

    La visualizzazione dati e la creazione di dashboard non sono il punto forte di Prometheus: dobbiamo aggiungere qualcosa sul nostro Raspberry Pi per rappresentare per bene la misura della connessione internet fatta con Speedtest CLI.

    Grafana su Raspberry Pi

    Completiamo la nostra soluzione installando su Raspberry Pi lo standard di fatto per gestire dati di monitoraggio e logging: Grafana.

    Il primo passo è aggiungere su Raspberry Pi la chiave APT per l'autenticazione dei pacchetti software di Grafana:

    wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

    Ora aggiungere il repository di Grafana nell'elenco di quelli riconosciuti:

    echo "deb https://packages.grafana.com/oss/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list

    Procedete finalmente con l'installazione di Grafana su Raspberry Pi:

    sudo apt-get update
    sudo apt-get install -y grafana

    Ora abilitare il servizio per l'avvio automatico di Grafana al boot di Raspberry Pi:

    sudo systemctl enable grafana-server

    Ed infine avviate manualmente il servizio per vedere Grafana all'opera sul vostro Raspberry Pi , attivo sulla porta 3000:

    sudo systemctl start grafana-server
    Grafana su Raspberry Pi
    Grafana su Raspberry Pi

    Grafana e Prometheus

    Passiamo ora alla configurazione di Grafana per interrogare i dati presenti in Prometeus.

    Autentichiamoci su Grafana con l'utenza predefinita admin, cambiandone la password rispetto a quella di default admin:

    Grafana su Raspberry Pi
    Grafana su Raspberry Pi

    Clicchiamo su Data sources - Add your first data source e selezioniamo Prometheus:

    Grafana e Prometheus su Raspberry Pi

    Dovete unicamente inserire il valore dell'URL (http://localhost:9090), anche se coincidente con quello predefinito, confermare con Save & test:

     Grafana e Prometheus su Raspberry Pi

    A questo punto selezione Create - Dashboard dal menù di sinistra ed importate questa dashboard già pronta (https://grafana.com/grafana/dashboards/13665) ed il gioco è fatto:

    Dashboard Grafana da Prometheus e Speedtest CLI su Raspberry Pi
    Dashboard Grafana da Prometheus e Speedtest CLI su Raspberry Pi

    Direi che avete ottenuto uno strumento molto potente per misurare la connessione internet domestica grazie all'uso di Raspberry Pi, Speedtest CLI, Prometheus e Grafana.

    Leggi tutti i miei articoli su Networking e Raspberry Pi:

    Ultimo aggiornamento Amazon Affiliate 2022-07-03 at 22:37

    Lascia un commento

    Il tuo indirizzo email non sarà pubblicato.

    Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

    La mia Casa Elettrica

    GRATIS
    VISUALIZZA