CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/Prometheus/UTF-8 指标和标签名称转义方案
文档目录
客户端库编写客户端库推送指标Exporter 和集成编写 exporter暴露格式UTF-8 指标和标签名称转义方案抓取协议内容协商

Prometheus

UTF-8 指标和标签名称转义方案

本文档规定了 Prometheus 在生成文本暴露时,对包含旧版字符集之外字符的指标和标签名称所使用的不同转义方案。这些方案在抓取过程中通过 Accept 和 Content-Type 头中的 escaping 参数进行协商。 Prometheus...

摘要

本文档规定了 Prometheus 在生成文本暴露时,对包含旧版字符集之外字符的指标和标签名称所使用的不同转义方案。这些方案在抓取过程中通过 Accept 和 Content-Type 头中的 escaping 参数进行协商。

简介

Prometheus 支持多种转义方案来处理文本暴露中包含旧版字符集(a-zA-Z0-9_:)之外字符的指标和标签名称。转义方案在抓取期间进行协商,并影响指标生产者应如何格式化其指标名称。

转义方案

无转义(allow-utf-8)

头部值:escaping=allow-utf-8

行为:

  • 指标和标签名称 MUST 是有效的 UTF-8 字符串。
  • 当名称在暴露格式中出现在双引号内时,\、\n 和 " MUST 用反斜杠转义。
  • 当名称在暴露格式中以非引号形式出现时,\ 和 \n MUST 用反斜杠转义。
  • 此方案 MUST 仅在生产者和消费者都支持 UTF-8 名称时使用。

下划线转义(underscores)

头部值:escaping=underscores

行为:

  • 不在旧版字符集(a-zA-Z0-9_:)中的任何字符 MUST 被替换为下划线。
  • 第一个字符 MUST 是字母、下划线或冒号。
  • 后续字符 MUST 是字母、数字、下划线或冒号。
  • 示例:metric.name/with/slashes 变为 metric_name_with_slashes。

点转义(dots)

头部值:escaping=dots

行为:

  • 点(.)MUST 被替换为 _dot_。
  • 现有的下划线 MUST 被替换为双下划线(__)。
  • 其他非旧版字符 MUST 被替换为单个下划线。
  • 第一个字符 MUST 是字母、下划线或冒号。
  • 后续字符 MUST 是字母、数字、下划线或冒号。
  • 示例:metric.name.with.dots 变为 metric_dot_name_dot_with_dot_dots。

值编码转义(values)

头部值:escaping=values

行为:

  • 名称 MUST 以 U__ 为前缀。
  • 不属于旧版字符集(a-zA-Z0-9_:)的每个字符 MUST 被替换为其十六进制的 Unicode 码点,用下划线包围。
  • 单个下划线 MUST 被替换为双下划线。
  • 示例:metric.name 变为 U__metric_2E_name(其中 2E 是 '.' 的十六进制 Unicode 码点)。

默认行为

如果 Accept 头中未指定转义方案,SHOULD 使用 underscores 转义。

安全考虑

  1. 目标 MUST 在应用转义之前验证输入名称。
  2. 转义方案 MUST 经过验证以防止注入攻击。
  3. allow-utf-8 方案 MUST 仅在生产者和消费者都支持 UTF-8 名称时使用。

文章大纲