Quando se decide monitorar velocidade da internet em vez de confiar apenas em testes pontuais realizados pelo navegador, abre-se a possibilidade de enxergar o desempenho real da rede ao longo de todo o dia. Este artigo detalha, passo a passo, como construir um rastreador automático que mede, registra e organiza as métricas de conexão sem intervenção humana.
A seguir, mostramos como instalar a versão de linha de comando do Speedtest by Ookla, criar um script em Python capaz de coletar ping, download e upload, armazenar tudo em CSV e, por fim, configurar um timer do systemd que dispara a verificação no intervalo que você definir. Todo o processo foi pensado para rodar em distribuições Linux comuns, com comandos simples e sem dependências avançadas.
Por que vale a pena acompanhar a velocidade 24 h por dia?
Planos de banda larga normalmente anunciam velocidades “de até”. O termo, presente no contrato em letras miúdas, significa que o valor informado é um teto teórico que dificilmente se sustenta em horários de pico ou em situações de sobrecarga da rede do provedor. Dessa forma, comparar o resultado de um único teste feito durante a madrugada com a mensalidade paga não oferece elementos suficientes para uma reclamação formal.
Registrar medições durante algumas semanas muda o jogo. Um histórico consistente de quedas pronunciadas, latência elevada ou, pior, períodos de desconexão total fornece evidências concretas. Na prática, o consumidor dispõe de números para pedir desconto, exigir reparo ou até rescindir o contrato sem multas abusivas.
O que é necessário para montar o rastreador de velocidade
O projeto gira em torno de três componentes básicos:
1. Speedtest CLI
Versão de linha de comando da ferramenta Speedtest, mais enxuta que a versão no navegador e livre de anúncios.
2. Python 3
Responsável por executar o script que inicia o teste, extrai os resultados de forma estruturada e grava tudo em um arquivo CSV.
3. systemd
Gerenciador de serviços presente na maioria das distribuições Linux. Será empregado para automatizar a execução periódica do script, evitando cron e outras alternativas menos robustas.
Preparando o ambiente: atualização do sistema e instalação do Speedtest CLI
Comece atualizando a lista de pacotes para garantir versões recentes:
sudo apt update
Em seguida, instale a ferramenta de medição:
sudo apt install speedtest-cli -y
Teste rapidamente se tudo está funcionando:
speedtest-cli --simple
Você deve ver três linhas contendo Ping, Download e Upload, todos em Mbit/s, indicando que o aplicativo está pronto para ser chamado pelo script.
Criando o diretório e o arquivo do projeto
Organização facilita manutenção. Então, crie uma pasta:
mkdir -p ~/"Internet Speed Tracker Project"
Mude para ela:
cd ~/"Internet Speed Tracker Project"
Escrevendo o script em Python
Abra seu editor de texto favorito, por exemplo o nano:
nano internet_speed_tracker.py
Cole o conteúdo a seguir. Cada bloco é comentado para que seja fácil adaptar depois:
#!/usr/bin/env python3
import subprocess
import csv
import os
from datetime import datetime
# -------------- CONFIGURAÇÕES --------------
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
LOG_FILE = os.path.join(BASE_DIR, "speed_log.csv")
def run_speed_test():
try:
# Executa o Speedtest em modo simples
resultado = subprocess.check_output(
["speedtest-cli", "--simple"]).decode("utf-8")
# Divide linhas e extrai números
linhas = resultado.split('n')
ping = linhas[0].split()[1]
download = linhas[1].split()[1]
upload = linhas[2].split()[1]
return ping, download, upload
except Exception:
# Se cair a conexão, registra zero
return "0", "0", "0"
def main():
timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
ping, download, upload = run_speed_test()
# Verifica se o arquivo já existe
arquivo_existe = os.path.isfile(LOG_FILE)
with open(LOG_FILE, mode='a', newline='') as f:
escritor = csv.writer(f)
if not arquivo_existe:
escritor.writerow(
["Timestamp", "Ping (ms)", "Download (Mbit/s)", "Upload (Mbit/s)"])
escritor.writerow([timestamp, ping, download, upload])
if __name__ == "__main__":
main()
Salve com Ctrl + O seguido de Enter e saia do editor (Ctrl + X). Depois, dê permissão de execução:
chmod +x internet_speed_tracker.py
Faça um teste manual:
./internet_speed_tracker.py
Um novo arquivo speed_log.csv deve aparecer na pasta, contendo a data, o ping, a taxa de download e de upload. Ao abri-lo no LibreOffice Calc, Google Sheets ou software similar, os dados já estarão dispostos em colunas.
Automatizando a execução com systemd
Criar um serviço garante que o script seja iniciado sempre que o computador for ligado e que rode em intervalos regulares, mesmo se nenhum usuário estiver logado. Vamos construir dois arquivos: um service e um timer.
Arquivo de serviço
Abra o nano com privilégios de administrador:
sudo nano /etc/systemd/system/internet-speed-tracker.service
Cole:
[Service]
ExecStart=/usr/bin/python3 "/home/SEU_USUARIO/Internet Speed Tracker Project/internet_speed_tracker.py"
User=SEU_USUARIO
Substitua SEU_USUARIO pelo nome da conta que rodará o script. Caminhos absolutos são obrigatórios para que o systemd encontre o arquivo.
Arquivo de timer
Agora vamos definir a periodicidade:
sudo nano /etc/systemd/system/internet-speed-tracker.timer
[Timer]
OnBootSec=5min
OnUnitActiveSec=2min
Persistent=true
[Install]
WantedBy=timers.target
No exemplo, o primeiro teste ocorre cinco minutos após a inicialização do sistema, e os seguintes a cada dois minutos. Após validar o funcionamento, muitos usuários preferem aumentar para 15 min, 30 min ou 1 h, equilibrando a quantidade de dados gerados e o consumo de banda.
Imagem: Lucas Gouveia
Ativando o serviço
Recarregue a lista de unidades, habilite e inicie o timer:
sudo systemctl daemon-reload
sudo systemctl enable --now internet-speed-tracker.timer
Para checar o status:
systemctl status internet-speed-tracker.timer
Ou para ver os últimos testes executados:
journalctl -u internet-speed-tracker.service -f
Interpretando o arquivo de log
Depois de alguns dias, abra novamente o CSV. Três padrões merecem atenção:
Dips em horários de pico
São quedas acentuadas no download ou upload, normalmente no início da noite ou fins de semana, quando há mais gente online.
Flatlines
Velocidade próxima a zero por longos períodos. Pode indicar problema físico no cabeamento ou congestionamento grave.
Zeros absolutos
Registro de 0 Mbit/s para download e upload, acompanhado de perda de ping. Identifica interrupções totais de serviço.
Organize esses pontos num gráfico de linhas para visualizar facilmente variações. Ferramentas de planilha geram relatórios em poucos cliques. Quanto mais detalhes, mais forte seu dossiê contra respostas genéricas do suporte técnico do provedor.
Como usar os relatórios na conversa com a operadora
De posse de evidências, ligue para a central de atendimento tendo em mãos:
1. Período de coleta – datas exatas com início e fim.
2. Percentual de perda – média entregue versus prometida.
3. Horários críticos – janelas com maior degradação.
Mencionar que as informações vêm de medições Speedtest CLI inibe a contestação imediata, já que a Ookla é a referência adotada pela própria indústria. Caso a situação evolua para agência reguladora ou Procon, anexar o CSV reforça a legitimidade da queixa.
Possíveis melhorias no projeto
Embora o rastreador básico cumpra bem o papel, há caminhos de expansão:
• Dashboard em tempo real – Expor os números em um servidor web local com Flask ou Grafana.
• Alertas proativos – Disparar e-mails ou notificações push quando o download cair abaixo de certo patamar.
• Compatibilidade com Wi-Fi mesh – Medir a partir de diferentes nós para detectar gargalos internos.
• Exportação automática – Sincronizar o CSV para Google Drive ou Nextcloud, salvaguardando dados em caso de falha de hardware.
Segurança e privacidade
O script não coleta tráfego de navegação, apenas metadados de desempenho. Contudo, atenção a dois pontos:
1. Exposição de IP público
O Speedtest comunica-se com servidores externos. Embora comum, isso revela seu endereço IP ao serviço. Se a política da empresa exigir anonimato, considere hospedar um servidor local do Ookla.
2. Permissões de usuário
Evite rodar o serviço como root. A configuração apresentada usa uma conta padrão, reduzindo riscos caso o script sofra alteração maliciosa.
Por que scripts automatizados superam testes via navegador
Testes manuais demandam disciplina e geram amostragem pequena, sujeitos a variação de carga do computador, abas abertas, extensões do navegador e interferência de Wi-Fi. Já o rastreador automático:
• É isento de fatores humanos – dispensa lembretes no celular ou alarmes diários.
• Usa recursos mínimos – a CLI consome menos memória que a versão web repleta de anúncios e gráficos pesados.
• Garante consistência – todas as medições seguem o mesmo fluxo, sem abrir janelas aleatórias que possam contaminar o resultado.
Quando vale escalar o problema para órgãos reguladores
Se, após envio do relatório, o provedor continuar sem solução, os registros sustentam reclamação formal junto à Agência Nacional de Telecomunicações (Anatel) ou ao Procon local. Ambas as entidades exigem prova documental de falha crônica, condição facilmente atendida pelo CSV gerado.
Nesse cenário, inclua:
• Contrato assinado (com velocidade anunciada).
• Faturas pagas – demonstram adimplência.
• Gráficos e tabelas – destacam discrepâncias.
• Protocolo de atendimento – registra tentativas prévias de resolução amigável.
Dúvidas frequentes (FAQ)
Posso rodar o script em um Raspberry Pi?
Sim. Aliás, é uma maneira de manter o medidor ativo 24 h por dia sem ocupar seu computador principal.
As medições prejudicam minha franquia?
Cada teste transfere alguns megabytes. Até mesmo em periodicidade curta (a cada 2 min), o consumo mensal não costuma passar de algumas centenas de megabytes.
Em redes corporativas, o firewall bloqueará?
Possivelmente, já que o Speedtest usa portas e protocolos específicos. Será preciso autorizar o tráfego ou hospedar um servidor interno para evitar bloqueio.
Conclusão
Construir um sistema para monitorar velocidade da internet não requer conhecimentos avançados em programação. Com poucos comandos, script enxuto e automação via systemd, qualquer usuário doméstico ou administrador de rede obtém transparência sobre o serviço contratado. De posse dos números, negociações com a operadora deixam de ser baseadas em percepções subjetivas e passam a se apoiar em fatos.
Reserve de uma a quatro semanas para coletar amostra representativa. Depois, avalie se as quedas são aceitáveis ou configuram descumprimento contratual. Em tempos de trabalho remoto, streaming e jogos on-line, estabilidade e velocidade são pré-requisitos, não luxo. Use este guia para reivindicar o que já está pagando.
Com informações de How-To Geek