UTF-8 指標和標籤名稱轉義方案

摘要

本文件詳細說明了 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 名稱時使用。

本頁內容