埋点埋什么
埋点分三层:作业层记录整体开始与结束、目标总数、成功失败跳过数、总耗时;批次层记录批次编号、并发度、批次耗时与是否被屏障等待阻塞;主机层记录单台执行开始与结束、退出码、重试次数与关键事件。所有记录都要带统一的关联标识——作业标识、批次标识、主机标识,时间统一用 UTC。埋点的产出形态通常是结构化日志(每行一个 JSON)加少量指标,前者便于逐条追溯,后者便于阈值告警。
基本信息
| 埋点层级 | 作业层、批次层、主机或执行单元层 |
|---|---|
| 关键字段 | 作业标识、批次标识、主机、开始与结束时间、耗时、退出码、重试次数 |
| 产出形态 | 结构化日志、指标暴露、事件流供告警与看板消费 |
| 关键约束 | 字段命名统一、时间统一 UTC、日志中不得出现凭据 |
典型使用场景
- 长时作业可见:中途能看出进度与卡在哪一步,不必等到结束
- 失败定位:直接从数据里筛出失败主机与退出码,无需逐台登录
- 耗时分析:按主机与步骤看耗时分布,指导并发与窗口设置
- 告警联动:失败率或耗时超阈值时自动告警
- 复盘取证:作业执行时间线与变更记录对齐,支撑事故复盘
- 演练对比:同一作业两次执行的指标对比,验证优化是否有效
结构化打点示例
结构化打点示例
#!/bin/bash
# 每行一个 JSON,字段名固定,便于后续聚合;时间一律用 UTC
log_event() { # 参数:主机 事件 退出码
printf '{"ts":"%s","job":"%s","batch":"%s","host":"%s","event":"%s","code":%s}\n' \
"$(date -u +%FT%TZ)" "$JOB_ID" "$BATCH_ID" "$1" "$2" "${3:-0}"
}
JOB_ID=publish-20261017 BATCH_ID=canary-1
log_event web-01 start
ssh -n web-01 'systemctl restart app'; rc=$?
log_event web-01 finish "$rc" # 结束事件带退出码,成功失败可一并统计
# 聚合示例:按退出码统计失败台数
# jq -r 'select(.event=="finish") | .code' /var/log/jobs/*.json | sort | uniq -c
# 聚合示例:找出耗时最长的十台(需在 start 与 finish 中带上同一主机标识)各层关注点与用途
| 层级 | 关注数据 | 典型阈值 | 用途 |
|---|---|---|---|
| 作业层 | 总数、成功失败数、总耗时 | 失败率超过设定比例即告警 | 判断作业整体是否可用 |
| 批次层 | 批次耗时、并发度、等待时长 | 单批耗时超预期即降速 | 调整节拍与并发 |
| 主机层 | 退出码、重试次数、步骤耗时 | 连续重试或非零退出即上报 | 定位到具体主机与步骤 |
| 对比层 | 两次执行差值 | 耗时或失败数显著上升 | 验证优化与发现劣化 |
关联标识是埋点能否用好分水岭:作业标识把一次批量串起来,批次标识区分灰度与全量批次,主机标识定位具体节点。三者齐备时,任何一条日志都能被还原到「哪次作业、哪一批、哪台机器、哪一步」。
埋点日志常在图省事时把认证信息、连接串或令牌一并打出,这些日志会被集中采集并长期保存,泄露面比配置文件更大。写入前过滤敏感字段。