准备一台越南VPS(Ubuntu 20.04/22.04推荐);准备一台接收端(可为同地域或云DB)。
需要账户有sudo权限;建议准备SSH密钥对(私钥保存在安全主机)、开启防火墙并允许必要端口(22/80/443或API端口)。
安装基础工具:curl、jq、rsync、git。命令示例:sudo apt update && sudo apt install -y curl jq rsync git
明确要采集的“状态”:CPU、内存、磁盘、网络速率、服务端口状态或自定义应用健康。
选择传输方式:A) HTTP(S) POST 到中心API;B) scp/rsync 推文件到接收端;C) MQTT/消息中间件。本文用HTTP POST与rsync两种示例并行说明。
确定数据格式:JSON,包含timestamp、host、metrics字段,便于后续聚合与监控。
在越南VPS上创建脚本 /usr/local/bin/vn_fetch.sh 并赋可执行权限:sudo nano /usr/local/bin/vn_fetch.sh && sudo chmod +x /usr/local/bin/vn_fetch.sh
脚本核心(示例)内容要点:采集命令、组装JSON、两种同步方式的条件分支。示例简要流程:
- host=$(hostname -f)
- cpu=$(top -bn1 | grep "Cpu(s)" | awk '{print $2+$4}')
- mem=$(free -m | awk '/Mem:/ {printf("%.2f", $3/$2*100)}')
- json="{\"timestamp\":\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\",\"host\":\"$host\",\"cpu\":$cpu,\"mem\":$mem}"
- 若用HTTP:curl -s -X POST -H "Content-Type: application/json" -d "$json" https://collector.example.com/api/v1/ingest
- 若用rsync:echo "$json" > /tmp/status_$host.json && rsync -avz /tmp/status_$host.json user@receiver:/data/status/
若采集来自应用的JSON输出,可用jq过滤并重组:cat app_status.json | jq '{host: .name, up: .up, latency: .latency}'
在脚本中加入错误处理:判断命令退出码($?),失败时写日志 /var/log/vn_fetch.log 并返回非0。示例:if [ $? -ne 0 ]; then echo "$(date) fetch failed" >> /var/log/vn_fetch.log; fi
HTTP方式建议使用HTTPS并在请求中加入API KEY(放在环境变量或受限文件),示例:curl -H "Authorization: Bearer $API_KEY" ...
rsync/scp方式使用SSH密钥,且禁止密码登录:在接收端/etc/ssh/sshd_config设置PasswordAuthentication no;限定公钥仅允许rsync命令(authorized_keys中指定command=)。
限制脚本权限:chown root:root && chmod 700,使其他用户无法读取API Key。
推荐使用systemd timer或cron定时任务:cron示例每5分钟执行:sudo crontab -e 添加 */5 * * * * /usr/local/bin/vn_fetch.sh >> /var/log/vn_fetch.log 2>&1
更可靠的做法是创建systemd service与timer,便于重试与日志管理:创建 /etc/systemd/system/vn_fetch.service 与 vn_fetch.timer,启用并启动:sudo systemctl enable --now vn_fetch.timer
答:在VPS上手动运行脚本并观察输出与日志:/usr/local/bin/vn_fetch.sh;检查返回码echo $?;若使用HTTP,启用抓包工具tcpdump或在接收端查看API日志;若使用rsync,登录接收端查看文件是否到达并检查文件内容。
答:使用HTTPS与API Key或JWT进行认证;传输使用SSH密钥并禁用密码;接收端限制IP白名单与最小权限;对存储的数据做权限控制并定期清理历史文件或采用加密存储;日志中避免泄露密钥。
答:统一制作配置化脚本并用配置管理工具(Ansible)批量部署;每台VPS写入唯一host标签,集中接收端使用时间序列数据库(InfluxDB/Prometheus pushgateway)或消息队列聚合;监控接收端负载并水平扩展Collector实例。