Tìm kiếm trang web

Cách xây dựng một trình theo dõi tốc độ internet tự động cho mạng gia đình của bạn


Bạn có thường xuyên gặp sự cố kết nối internet, nhưng mỗi khi bạn thực hiện kiểm tra tốc độ internet, kết quả lại cho thấy bạn nhận được tốc độ mà nhà cung cấp dịch vụ internet đã hứa? Nếu bạn cảm thấy điều đó quen thuộc, hãy cân nhắc xây dựng một công cụ theo dõi và ghi lại tốc độ internet tự động.

Nhà cung cấp dịch vụ Internet của bạn không muốn bạn biết điều này về tốc độ internet của mình

Sự thật: tốc độ internet mà hầu hết các nhà cung cấp dịch vụ Internet (ISP) cam kết chỉ là 'tốc độ tối đa.' Nói cách khác, tốc độ internet mà bạn trả tiền chỉ là ngưỡng cao nhất. Bạn hiếm khi đạt được tốc độ được quảng cáo mọi lúc. Ví dụ, nếu bạn đang trả tiền cho một kết nối 'gigabit,' bạn sẽ không nhận được tốc độ đó liên tục.

Tốc độ 'tối đa' được quảng cáo bởi hầu hết các nhà cung cấp dịch vụ Internet (ISP) che giấu các điều khoản chi tiết trong hợp đồng dịch vụ Internet của bạn: những tốc độ đó là kịch bản tốt nhất, và không có gì đảm bảo rằng bạn sẽ luôn đạt được tốc độ tối đa. Ngoài ra, băng thông được quảng cáo phản ánh tốc độ mà ISP dự định cung cấp tới bộ định tuyến có dây của họ, chứ không phải tốc độ được cung cấp tới các thiết bị kết nối của bạn.

Bởi vì các điều khoản chi tiết có lợi cho nhà cung cấp dịch vụ internet của bạn, nếu bạn đang gặp vấn đề về tốc độ internet, cách tốt nhất là theo dõi kết nối của bạn trong khoảng 1-4 tuần và ghi lại tất cả thời gian gián đoạn trước khi gọi cho nhà cung cấp dịch vụ của bạn. Bằng cách này, giống như đã giúp Monica khi nhà cung cấp dịch vụ của cô ấy yêu cầu 1000 USD để cho phép cô ấy rút hợp đồng, các hồ sơ hỗ trợ sẽ giúp bạn lập luận, thương lượng lại, hoặc chấm dứt hợp đồng với nhà cung cấp dịch vụ của bạn. Vì các bài kiểm tra tốc độ internet qua web một lần không phải lúc nào cũng đáng tin cậy, đây là cách tạo một trình theo dõi tốc độ internet tự động, tự động ghi lại tốc độ internet của bạn theo các khoảng thời gian đã định.

Điều quan trọng trước tiên: Chuẩn bị các công cụ theo dõi để ghi lại tốc độ internet chính xác

Speedtest của Ookla là công cụ kiểm tra tốc độ internet được sử dụng phổ biến nhất. Chúng ta sẽ dựa vào nó, nhưng thay vì sử dụng phiên bản trình duyệt nặng nề, chúng ta sẽ cài đặt phiên bản CLI. Bước đầu tiên là cập nhật hệ thống của bạn và sau đó cài đặt speedtest-cli:

sudo apt update 
sudo apt install speedtest-cli -y



Sau khi cài đặt speedtest-cli, hãy chạy một bài kiểm tra thủ công để xác nhận nó hoạt động:

speedtest-cli --simple

Kết quả nên bao gồm thời gian ping và tốc độ tải xuống và tải lên của bạn tính bằng megabit trên giây.

Điều này chứng tỏ rằng speedtest-cli đang hoạt động. Phần tiếp theo của quy trình là tạo công cụ kiểm tra tốc độ internet và ghi dữ liệu.

Tạo một công cụ kiểm tra tốc độ internet đơn giản và ghi dữ liệu

Sử dụng lệnh mkdir để tạo một thư mục dành riêng cho dự án, sau đó sử dụng lệnh cd để chuyển vào đó để bắt đầu tạo công cụ.

mkdir -p ~/"Internet Speed Tracker Project"
cd ~/"Internet Speed Tracker Project"

Sử dụng dấu ngoặc kép đảm bảo rằng terminal hiểu các khoảng trắng là một phần của tên thư mục. Nếu bạn không muốn sử dụng chúng, hãy tạo một tên thư mục không có khoảng trắng.

Sử dụng nano hoặc bất kỳ trình soạn thảo văn bản terminal nào khác để tạo một tệp Python có tên 'internet speed tracker,' sau đó sao chép-dán đoạn script 40 dòng sau vào tệp đó:

nano internet_speed_tracker.py
#!/usr/bin/env python3
import subprocess
import csv
import os
from datetime import datetime

#--------------CONFIGURATIONs--------------
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
LOG_FILE = os.path.join(BASE_DIR, "speed_log.csv")

def run_speed_test():
    try:
        # Run speedtest in simple mode
        result = subprocess.check_output(["speedtest-cli", "--simple"]).decode("utf-8")
        
        # These settings parse the text. For example: Ping: 20 ms, Download: 50.5 Mbit/s, etc
        lines = result.split('\n')
        ping = lines[0].split()[1]
        download = lines[1].split()[1]
        upload = lines[2].split()[1]
        return ping, download, upload
    #These settings keep Speedtest from crashing by logging zeroes when the internet is totally down
    except Exception:
        return "0", "0", "0" 

def main():
    timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
    ping, download, upload = run_speed_test()
    
    # Check if file exists to add headers if it doesn't
    file_exists = os.path.isfile(LOG_FILE)
    
    with open(LOG_FILE, mode='a', newline='') as f:
        writer = csv.writer(f)
        if not file_exists:
            writer.writerow(["Timestamp", "Ping (ms)", "Download (Mbit/s)", "Upload (Mbit/s)"])
        writer.writerow([timestamp, ping, download, upload])

if __name__ == "__main__":
    main()



Nếu bạn đang sử dụng nano, nhấn Ctrl + O + Enter để ghi và lưu các thay đổi, sau đó nhấn Ctrl + X để thoát về lại terminal.

Bạn sẽ nhận thấy rằng kịch bản lưu nhật ký ở định dạng CSV. Điều đó quan trọng vì nó tạo ra một tệp mà bạn có thể mở trong Google Sheets, LibreOffice và các chương trình tương tự.

Bây giờ hãy sử dụng lệnh chmod để làm cho tệp có thể thực thi:

chmod +x internet_speed_tracker.py

Bước tiếp theo là tạo một bộ hẹn giờ systemd để đảm bảo công cụ biết khi nào cần kiểm tra tốc độ internet. Trước khi làm điều đó, tốt nhất là chạy thử công cụ bằng lệnh này:

./internet_speed_tracker.py

Chạy script sẽ tạo một file log mới trong thư mục dự án. Bạn có thể dùng LibreOffice để mở file này:

Sử dụng systemd để tự động kiểm tra tốc độ internet, theo dõi và ghi lại

Systemd là cách tốt nhất để tự động hóa và quản lý các dịch vụ Linux. Sử dụng nano để tạo tệp dịch vụ systemd cho công cụ kiểm tra tốc độ internet và người giữ bản ghi, sau đó dán script dưới đây. Hãy nhớ cập nhật các đường dẫn tuyệt đối của bạn; nếu không, script sẽ không hoạt động.

sudo nano /etc/systemd/system/internet-speed-tracker.service
[Service]
ExecStart=/usr/bin/python3 "home/htg/Internet Speed Tracker Project/internet_speed_tracker.py"
User=htg

Sử dụng nano một lần nữa để tạo một tệp đơn vị bộ hẹn giờ bền vững cho công cụ, sau đó sao chép và dán kịch bản bên dưới:

sudo nano /etc/systemd/system/internet-speed-tracker.timer
[Timer]
OnBootSec=5min
OnUnitActiveSec=2min
Persistent=true

[Install]
WantedBy=timers.target

Tệp đơn vị bộ hẹn giờ thiết lập tần suất chạy kiểm tra tốc độ internet. Để thử nghiệm, tôi đã đặt nó chạy mỗi 2 phút; chỉnh sửa nó để phù hợp với nhu cầu của bạn. Ví dụ, bạn có thể đặt nó chạy mỗi 1 giờ.

Tải lại daemon và sau đó bật bộ hẹn giờ:

sudo systemctl daemon-reload
sudo systemctl enable --now internet-speed-tracker.timer

Thế là xong: bạn vừa tạo ra một công cụ kiểm tra tốc độ internet ghi lại tốc độ internet của bạn dựa trên thời gian được xác định trong tệp đơn vị bộ hẹn giờ.

Đang đọc tệp nhật ký tốc độ internet của bạn

Sau vài ngày hoặc vài tuần, tệp nhật ký tốc độ internet của bạn sẽ có nhiều dữ liệu mà bạn có thể sử dụng để biết internet của bạn tốt (hoặc xấu) đến mức nào. Các bản ghi này cũng sẽ hữu ích nếu internet của bạn tệ đến mức cần gọi cho nhà cung cấp dịch vụ internet của bạn.

Khi xem lại tệp nhật ký, hãy tìm các giảm tốc độ vào giờ cao điểm như buổi tối và cuối tuần, các đường phẳng và kéo dài bao lâu, và các giá trị bằng không. Giảm tốc độ vào giờ cao điểm là những lúc tốc độ internet của bạn giảm 50% trở lên. Chúng cho thấy nhà cung cấp dịch vụ internet của bạn đã vượt quá số lượng thuê bao trên đường truyền hoặc đang hạn chế internet của bạn. Các đường phẳng thường cho thấy vấn đề kết nối vật lý, trong khi các giá trị bằng không cho thấy sự cố mất kết nối internet hoàn toàn.


Lần tới khi nhà cung cấp dịch vụ Internet của bạn nói, "Mọi thứ dường như hoạt động tốt trên phía chúng tôi," hãy sử dụng tệp nhật ký để chứng minh trường hợp của bạn. Họ sẽ nghiêm túc hơn nhiều nếu bạn có thể gửi cho họ một tệp cho thấy tốc độ Internet liên tục thấp và suy giảm hiệu suất kéo dài.

Bài viết liên quan