Cloudflare 正在把日志、分布式追踪、分析、告警、仪表盘、查询和遥测导出收拢到同一个可观测性平台,并尝试用更简单、可预测的方式计费。真正值得关注的并不是菜单里多了几个入口,而是故障排查链路可能从“跨多个系统拼证据”变成“围绕一次请求连续下钻”。
来源摘要没有列出八项更新各自的产品名称、API 参数或可用区域,因此下面重点分析这些能力组合后会怎样影响工程实践;配置示例采用标准 OpenTelemetry 组件,接入时需要根据 Cloudflare 最新文档替换端点和认证信息。
八项变化可以看成一条完整的排障链路
按摘要中的能力划分,这轮更新覆盖了八个相互关联的方向:
| 方向 | 解决的问题 | 团队应关注的指标 |
|---|---|---|
| 日志 | 查看请求、边缘服务和应用产生的离散事件 | 每日摄入量、保留期、索引成本 |
| 追踪 | 还原请求跨服务、跨网络节点的调用路径 | 采样率、Trace ID 贯通率、尾延迟 |
| 分析 | 从聚合数据中识别流量、错误和性能趋势 | 聚合维度、数据延迟、基数限制 |
| 告警 | 在用户集中报障前发现异常 | 误报率、通知延迟、告警归属人 |
| 仪表盘 | 让运维、开发和安全团队共享同一视图 | 模板复用、权限、刷新频率 |
| 查询 | 对日志、追踪和分析数据进行交互式调查 | 查询时延、扫描量、字段一致性 |
| 遥测导出 | 将数据送往现有 SIEM、数据湖或其他观测后端 | 开放格式、出口成本、重试机制 |
| 平台与计费简化 | 降低多套工具带来的预算和管理复杂度 | 单位成本、预算上限、超额行为 |
这些能力的组合比单项功能更重要。例如,告警发现某个接口的 P99 延迟升高后,值班人员应当能够进入对应仪表盘,按区域或状态码切分,再打开相关 Trace,最后用 Trace ID 查询日志。若每一步都需要切换平台、转换时间范围或手工复制字段,平均修复时间仍然不会明显下降。
统一平台的关键是上下文,而不只是数据集中存放
日志、追踪和分析数据放在同一个供应商处,并不自动等于统一可观测性。团队还需要统一上下文字段,至少包括:
service.name:服务名称,避免同一个服务出现多种拼写。deployment.environment:区分生产、预发布和开发环境。service.version:把异常与具体发布版本关联起来。trace_id与span_id:让日志能够跳转到追踪数据。cloud.region或等价区域字段:识别区域性故障。- HTTP 路由模板:使用
/users/{id},不要把真实用户 ID 当成指标标签。
最后一点尤其重要。把用户 ID、订单号或完整 URL 放入指标标签,会制造高基数数据,既拖慢查询,也可能迅速放大费用。敏感字段还会带来隐私和合规风险。统一平台减少了工具数量,但不会替团队自动完成数据治理。
可以这样实践:用 OpenTelemetry Collector 做可回退的接入层
如果现有系统已经使用 OpenTelemetry,可以先让应用把遥测数据发送到本地 Collector,再由 Collector 转发到目标平台。这样做的好处是应用代码不必直接绑定某个后端,还可以在迁移期同时保留旧平台。
下面是一个可直接改造的 otel-collector.yaml。假设目标平台提供兼容 OTLP/HTTP 的遥测入口;实际地址、请求头和信号支持范围需要以当前 Cloudflare 文档为准。
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
http:
endpoint: 0.0.0.0:4318
processors:
memory_limiter:
check_interval: 1s
limit_mib: 256
batch:
timeout: 5s
send_batch_size: 512
resource:
attributes:
- key: deployment.environment
value: production
action: upsert
exporters:
debug:
verbosity: basic
otlphttp/cloudflare:
endpoint: ${env:CF_OTLP_ENDPOINT}
headers:
Authorization: Bearer ${env:CF_OTLP_TOKEN}
compression: gzip
timeout: 10s
retry_on_failure:
enabled: true
initial_interval: 1s
max_interval: 30s
max_elapsed_time: 300s
service:
pipelines:
traces:
receivers: [otlp]
processors: [memory_limiter, resource, batch]
exporters: [debug, otlphttp/cloudflare]
metrics:
receivers: [otlp]
processors: [memory_limiter, resource, batch]
exporters: [debug, otlphttp/cloudflare]
logs:
receivers: [otlp]
processors: [memory_limiter, resource, batch]
exporters: [debug, otlphttp/cloudflare]
保存文件后,可以用容器启动 Collector。运行前请替换两个环境变量;如果目标入口分别提供 traces、metrics 和 logs 端点,则应拆成多个 exporter。
export CF_OTLP_ENDPOINT='https://REPLACE-WITH-YOUR-OTLP-ENDPOINT'
export CF_OTLP_TOKEN='REPLACE-WITH-YOUR-TOKEN'
docker run --rm \
-p 4317:4317 \
-p 4318:4318 \
-e CF_OTLP_ENDPOINT \
-e CF_OTLP_TOKEN \
-v "$PWD/otel-collector.yaml:/etc/otelcol-contrib/config.yaml:ro" \
otel/opentelemetry-collector-contrib:0.119.0 \
--config=/etc/otelcol-contrib/config.yaml
应用随后可以把 OTLP 数据发送到 http://localhost:4318,或者通过 gRPC 发送到 localhost:4317。生产环境还应为 Collector 配置 TLS、资源限制、持久队列和受控的网络出口;不要把长期令牌直接写入 YAML 或镜像。
如果需要低风险迁移,可以再增加一个旧平台 exporter,让同一批遥测数据短期双写。对比两边的事件数量、追踪完整率、查询结果和告警触发时间后,再决定是否切换。双写会增加网络流量和数据费用,因此应设置明确的结束日期。
更简单的价格仍然需要容量测试
“更可预测的计费”对值班和财务团队都很重要,但价格模型越简单,并不代表总成本一定越低。评估时至少要询问以下问题:
- 日志、指标和追踪是分别计费,还是共享统一额度?
- 查询扫描、保留时间、仪表盘刷新和告警执行是否额外收费?
- 遥测导出是否产生出口费用或速率限制?
- 高基数字段和较长 Trace 会怎样影响用量?
- 超出预算后是停止摄入、降低保留期,还是继续产生费用?
可以从一周真实流量中采样,分别估算正常工作日、发布窗口和事故期间的数据量。不要只用平均值,因为一次异常重试风暴就可能同时推高日志量、Span 数量和告警次数。
采用前的工程检查清单
这组更新适合希望减少观测工具碎片、缩短排障路径,并保留遥测数据流动能力的团队。正式迁移前建议完成以下检查:
- 用一个非核心服务验证日志、追踪和指标是否能够通过同一请求标识关联。
- 确认查询语言、时间范围、聚合函数和导出格式能覆盖现有排障手册。
- 对令牌、个人信息、请求正文和 URL 参数建立脱敏规则。
- 使用真实流量测试摄入延迟、查询延迟、告警延迟和成本上限。
- 为遥测入口不可用准备缓冲、重试和丢弃策略,避免反向拖垮业务。
- 保留开放标准或导出路径,避免统一平台演变成无法退出的平台锁定。
Cloudflare 这轮更新传递出的方向很清楚:可观测性正在从若干孤立产品,转向覆盖采集、调查、告警、展示和导出的完整工作流。团队不应只比较功能列表,更应验证一次真实事故能否在更少的上下文切换中被发现、定位和复盘。