Lời hứa tốc độ “Lên đến”: Một nỗi thất vọng thường trực
Một kịch bản quen thuộc: bạn trả tiền cho gói cáp quang 1Gbps, nhưng Netflix bắt đầu xoay vòng (buffering) vào lúc 8 giờ tối thứ Ba. Khi gọi cho nhà mạng (ISP), họ khẳng định mọi thứ ở phía họ đều hoàn hảo. Nếu không có dữ liệu thực tế, bạn chỉ là một khách hàng đang bực bội mà không có bằng chứng. Các công cụ kiểm tra tốc độ trên trình duyệt là không đủ vì chúng chỉ ghi lại một thời điểm duy nhất—thường là khi bạn chợt nhớ ra để chạy thử.
Để thực sự hiểu về đường truyền của mình, bạn cần ghi lại các thông số 24/7 mà không cần động tay vào. Tôi cần bằng chứng để chỉ cho ISP chính xác thời điểm các vấn đề định tuyến (peering) bắt đầu. Speedtest Tracker đã giải quyết vấn đề này. Sau khi chạy nó trong môi trường thực tế hơn sáu tháng, nó đã trở thành một tiện ích không thể thiếu trong hệ thống HomeLab của tôi.
Công cụ: Speedtest Tracker
Speedtest Tracker là một ứng dụng tự lưu trữ (self-hosted) được xây dựng trên Laravel và Filament. Nó hoạt động như một lớp vỏ bọc mạnh mẽ cho Ookla Speedtest CLI chính thức. Thay vì chỉ chạy một bài kiểm tra đơn lẻ, nó lưu trữ mọi kết quả vào cơ sở dữ liệu và tạo ra các biểu đồ trực quan. Điều này cho phép bạn xuất nhật ký CSV bất cứ khi nào cần có một cuộc “nói chuyện nghiêm túc” với nhà cung cấp dịch vụ.
Khả năng cô lập của Docker là thế mạnh lớn nhất. Dù bạn đang chạy Ubuntu, Synology NAS hay Raspberry Pi, môi trường vẫn luôn đồng nhất. Công cụ này quản lý lịch trình thông qua cron, xử lý cơ sở dữ liệu (SQLite hoặc PostgreSQL) và cung cả một bảng điều khiển gọn gàng để theo dõi jitter, latency (độ trễ) và throughput (băng thông) trong nhiều tháng.
Kiến trúc cho một nút giám sát chính xác
Sự chính xác đòi hỏi một kết nối có dây. Nếu bạn chạy các bài kiểm tra qua Wi-Fi, bạn đang đo lường sự nhiễu sóng cục bộ chứ không phải tốc độ internet của mình. Tôi cài đặt phiên bản của mình trên một máy chủ chuyên dụng, kết nối qua cáp Ethernet Cat6 trực tiếp vào bộ định tuyến chính.
Thiết lập này cực kỳ ổn định. Theo kinh nghiệm của tôi, container vẫn rất nhẹ, chỉ tốn chưa đến 200MB RAM khi ở trạng thái nghỉ. Mức sử dụng CPU chỉ tăng vọt trong khoảng thời gian kiểm tra ngắn ngủi 30 giây, khiến nó trở nên hoàn hảo cho các thiết bị phần cứng công suất thấp.
Thực hành: Triển khai với Docker Compose
Cách đáng tin cậy nhất để khởi chạy ứng dụng này là thông qua Docker Compose. Tôi sử dụng image của LinuxServer.io vì nó được cập nhật thường xuyên và tự động xử lý các điều khoản EULA của Speedtest CLI.
1. Chuẩn bị thư mục
mkdir -p ~/homelab/speedtest
cd ~/homelab/speedtest
touch docker-compose.yml
2. Cấu hình hệ thống
Cấu hình này sử dụng SQLite. Nó hiệu quả và hoàn toàn có khả năng xử lý dữ liệu lịch sử trong nhiều năm mà không làm chậm hệ thống.
services:
speedtest-tracker:
container_name: speedtest-tracker
image: lscr.io/linuxserver/speedtest-tracker:latest
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Ho_Chi_Minh
- SPEEDTEST_SCHEDULE=0 * * * * # Chạy mỗi giờ một lần
- SPEEDTEST_SERVERS= # Để trống để tự động chọn server
- DISPLAY_TIMEZONE=Asia/Ho_Chi_Minh
volumes:
- ./config:/config
ports:
- 8080:80
restart: unless-stopped
3. Khởi chạy dịch vụ
Chạy lệnh sau để tải image và khởi động container:
docker compose up -d
Truy cập bảng điều khiển tại http://your-server-ip:8080. Sử dụng [email protected] và password để đăng nhập, nhưng hãy thay đổi thông tin xác thực này ngay lập tức.
Mẹo tối ưu sau 6 tháng sử dụng
Các bài kiểm tra tốc độ tiêu tốn đáng kể băng thông. Nếu bạn có đường truyền 1Gbps, việc chạy kiểm tra mỗi 5 phút có thể gây lag cho những người dùng khác hoặc làm phiền ISP của bạn. Tôi thấy rằng khoảng thời gian 1 giờ (0 * * * *) mang lại sự cân bằng tốt nhất giữa dữ liệu chi tiết và hiệu suất mạng.
Thông báo qua Telegram
Việc thiết lập tích hợp Telegram là một bước ngoặt lớn. Tôi đã cấu hình ứng dụng để cảnh báo nếu tốc độ tải xuống giảm xuống dưới 400Mbps hoặc nếu một bài kiểm tra thất bại hoàn toàn. Điều này cho phép tôi khởi động lại modem từ xa trước khi gia đình kịp nhận thấy mạng bị chậm.
Tính toàn vẹn của dữ liệu
Sau sáu tháng, cơ sở dữ liệu SQLite của tôi chỉ khoảng 45MB. Mặc dù nhẹ, tôi thực sự khuyên bạn nên ánh xạ volume /config vào một vị trí lưu trữ cố định trên máy chủ. Nếu bạn di chuyển HomeLab sang phần cứng mới, chỉ cần di chuyển thư mục đó để giữ nguyên toàn bộ lịch sử.
Dữ liệu đã tiết lộ điều gì
Các xu hướng thu được thật đáng kinh ngạc. Tôi nhận thấy tốc độ giảm 15% và ping tăng vọt từ 12ms lên 55ms lặp đi lặp lại vào mỗi tối thứ Sáu lúc 7 giờ tối. Điều này xác nhận vấn đề tắc nghẽn tại tủ cáp địa phương chứ không phải do bộ định tuyến của tôi. Khi tôi nâng cấp gói cước, tôi đã sử dụng các nhật ký CSV đã xuất để chứng minh đường truyền hoạt động kém hiệu quả trong giờ cao điểm. Dữ liệu này đã giúp tôi thương lượng được mức giá tốt hơn cho gói cáp quang tiếp theo.
Độ tin cậy của container này thực sự ấn tượng. Ngoài các bản cập nhật tự động qua Watchtower, tôi chưa phải động vào dịch vụ này kể từ ngày đầu tiên. Nó âm thầm thu thập bằng chứng tôi cần để đảm bảo mình nhận được đúng dịch vụ mà mình đã trả tiền.
Lời kết
Giám sát internet không nên là một công việc thủ công nhàm chán. Bằng cách triển khai Speedtest Tracker, bạn biến cảm giác mơ hồ rằng “mạng chậm” thành một bảng điều khiển các thông số chuyên nghiệp. Cho dù bạn đang khắc phục sự cố với một ISP không ổn định hay chỉ đơn giản là tò mò về hiệu suất mạng, công cụ này là một bổ sung thiết yếu cho HomeLab. Nó mang lại sự an tâm và quan trọng hơn là các sự thật để củng cố cho những khiếu nại của bạn khi có sự cố xảy ra.

