采集与上报的分工
采集负责在目标侧取数:本机负载、磁盘水位、已装包清单、关键配置文件、服务状态;上报负责把取到的内容送到中心端汇总。传输方向有两种基本形态:推送(目标侧主动发出,适合大规模、跨防火墙、结果需要及时到达)与拉取(中心按节奏逐个取,节拍由中心控制,适合规模不大或临时排查)。混合做法是目标侧先落本地快照,再批量压缩推送,兼顾失败可补传与中心压力可控。
基本信息
| 采集对象 | 指标、资产清单、配置内容与指纹、服务状态、日志摘要 |
|---|---|
| 传输通道 | 推送(代理主动发出)、拉取(中心按节拍取)、混合(本地快照加批量推送) |
| 幂等键 | 主机名加 UTC 时间戳,或用内容指纹,避免重复计数 |
| 关键约束 | 时钟需同步;采集动作应只读;上报失败要能补传 |
典型使用场景
- 资产盘点:定期回收已装软件、监听端口、挂载点清单
- 合规抽查:取回关键配置项取值作为证据材料
- 容量评估:采集水位与增长趋势,支撑扩容决策
- 故障取样:快速从整批主机取回同口径的现场数据
- 配置备份:把设备与主机的运行配置定期收回归档
- 灰度验证:收集试点批次的运行结果,与全量对比
采集与上报骨架
采集与上报骨架
#!/bin/bash
# 采集:只读取本机信息,落本地快照,不修改任何系统状态
stamp=$(date -u +%Y%m%dT%H%M%SZ)
host=$(hostname -f)
out=/var/lib/collect/$host-$stamp.json # 幂等键:主机名 + UTC 时间戳
mkdir -p /var/lib/collect
{
printf '{"host":"%s","ts":"%s",' "$host" "$stamp"
printf '"load":"%s",' "$(cut -d' ' -f1 /proc/loadavg)"
printf '"disk":"%s"}' "$(df -P / | awk 'NR==2{print $5}')"
} > "$out"
# 上报:压缩后推送,失败留在本地等下一轮补传
gzip -f "$out" || exit 0
for i in 1 2 3; do
curl -fsS --max-time 10 -T "$out.gz" "https://center.example.com/collect/" && rm -f "$out.gz" && break
sleep $((i*5)) # 退避重试,避免整批同时打爆中心
done
# 中心侧按幂等键去重:同一主机同一时间戳只入账一次推送与拉取对照
| 模式 | 方向 | 优点 | 代价 | 适用规模 |
|---|---|---|---|---|
| 推送 | 目标到中心 | 及时,能穿防火墙 | 需目标侧有凭据与网络出口 | 数百到数万台 |
| 拉取 | 中心到目标 | 节拍可控,无需目标出网 | 中心需凭据,规模大时耗时长 | 数十到数百台 |
| 混合 | 本地快照加推送 | 失败可补传,中心压力可控 | 需要目标侧暂存空间 | 弹性规模 |
| 人工抽采 | 人工触发 | 零常驻成本 | 无法持续,口径易不一致 | 临时排查 |
时间统一是采集能用的前提:所有主机与中心保持一致的时间源,时间戳建议用 UTC 记录,展示时再换本地时区。时钟错乱会让同一批数据看起来前后颠倒,趋势分析直接失效。
采集内容常含敏感信息:进程环境变量、连接串、配置文件里的口令。上报前按字段过滤或掩码,采集通道也要做鉴权与加密,避免把凭据复制到中心端。