1. 概述:为什么要对香港服务器做带宽自动化测试
- 目的:持续监控公网带宽、峰值、丢包与抖动,及时定位链路问题。
- 场景:网站、API或游戏服部署在香港节点,需对内外链路做SLA证明与报警。
- 输出:自动化结果以CSV/JSON存储、支持Grafana展示并触发告警。
2. 测试前准备:安装必须工具与权限
- 工具:iperf3、speedtest-cli、curl、mtr、mailx(或curl webhook)、jq。
- 安装命令(Ubuntu/Debian):sudo apt update && sudo apt install -y iperf3 mtr curl jq mailutils python3-pip && pip3 install speedtest-cli。
- 权限:确认防火墙/安全组允许iperf3 TCP/UDP端口(默认5201),或使用HTTP下载测试无需额外端口。
3. 手动带宽测试常用命令(快速验证)
- iperf3(到测试服务器):iperf3 -c
-p 5201 -t 10 -J(输出JSON)。
- speedtest(到最近Speedtest服务器):speedtest-cli --json > /tmp/speedtest.json。
- 下载测试(HTTP):curl -o /dev/null -s -w "%{speed_download}\n" "http:// example.com/1Gfile"。
- 延迟与丢包:mtr -n -r -c 100 <目标IP>,查看packet loss、avg jitter。
4. 自动化脚本设计思路(变量、重试、日志)
- 变量:测试目标IP/域名、测试时长、输出目录、通知Webhook或邮件。
- 重试与容错:每次测试失败重试2次,失败计入日志并触发轻报警。
- 日志格式:建议CSV字段 timestamp, test_type, target, download_bps, upload_bps, latency_ms, jitter_ms, packet_loss, raw_json_path。
5. 示例Bash脚本模板(可直接修改部署)
- 说明:以下脚本在HK服务器上执行speedtest+iperf3并记录CSV,可写为 /usr/local/bin/bw_check.sh 并 chmod +x。
- 脚本内容(缩写呈现,按行复制并替换变量):
code:#!/bin/bash
code:OUTDIR=/var/log/bw_check;mkdir -p $OUTDIR
code:TS=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
code:ST_JSON=$OUTDIR/speed_$TS.json; speedtest-cli --json > $ST_JSON 2>/dev/null
code:DL=$(jq .download $ST_JSON); UL=$(jq .upload $ST_JSON); LAT=$(jq .ping $ST_JSON)
code:IPERF_JSON=$OUTDIR/iperf_$TS.json; iperf3 -c 1.2.3.4 -p 5201 -t 10 -J > $IPERF_JSON 2>/dev/null
code:IPERF_DL=$(jq '.end.sum_received.bits_per_second' $IPERF_JSON)//0
code:echo "$TS,speedtest,$DL,$UL,$LAT,$IPERF_DL" >> $OUTDIR/bw_log.csv
code:# 可加Webhook报警:curl -X POST -H 'Content-Type: application/json' -d '{"text":"bw alert"}' $WEBHOOK
6. 定时执行与告警(Cron与Webhook/邮件结合)
- Cron示例:每15分钟执行:*/15 * * * * /usr/local/bin/bw_check.sh >/dev/null 2>&1。
- 告警阈值:下载速率低于X Mbps或丢包>Y%触发。脚本内判断后调用mailx发送或curl推送到监控Webhook。
- 建议:对峰值量化,设置短期与长期阈值避免抖动误报。
7. 存储与可视化(CSV、Prometheus、Grafana)
- 轻量:持续写CSV并用go/csv导入到Timeseries存储或直接用Python生成折线图。
- 推荐:将CSV转为Prometheus pushgateway格式或用Telegraf收集并写入InfluxDB,再用Grafana建面板。
- 指标:download_bps、upload_bps、latency_ms、packet_loss、test_success_rate。
8. 常见问题与故障排查
- 当iperf3速度异常低:检查防火墙、流量限制(运营商速率限制)、TCP窗口/MTU设置。
- speedtest与iperf差异:speedtest走CDN/最近节点,iperf测试到指定服务器,需对比两者定位是到ISP还是到目标机房问题。
- 日志异常:保留原始JSON用于人工分析,避免只看汇总数值。
9. 问:在香港服务器做带宽测试,如何选择服务端(iperf server)?
- 答:优先选择同机房或同运营商的iperf服务器以测试机房内部连通性;要测到外网出口性能则选择外部测试机(例如大陆或海外节点)。如无自建服务端,可使用公开的iperf3服务器列表,但需确认可信与稳定性。
10. 问:脚本运行时遇到端口被阻塞或NAT导致测试不准确怎么办?
- 答:采用HTTP下载测速(curl)作为补充,因为HTTP走标准80/443端口;同时使用speedtest-cli测试多个server以交叉验证。必要时在防火墙上临时放通iperf端口或通过VPN/内网链路做对端测试。
11. 问:如何把测试数据长期保存并做趋势分析?
- 答:推荐将CSV数据导入时序数据库(InfluxDB/Prometheus)并用Grafana建面板;保留原始JSON(压缩存档)便于回溯;定期做月度/季度报告并设置异常检测规则触发工单。
来源:运维必备 香港服务器带宽测试方法的自动化脚本参考与模板