UTF-8メトリクスおよびラベル名のエスケープスキーム

概要

このドキュメントでは、Prometheusが、レガシー文字セット以外の文字を含むメトリクス名およびラベル名を生成する際に使用するさまざまなエスケープスキームについて説明します。これらのスキームは、AcceptおよびContent-Typeヘッダーのescapingパラメータを介して、スクレイピング中にネゴシエートされます。

はじめに

Prometheusは、レガシー文字セット(a-zA-Z0-9_:)以外の文字を含むテキスト表示のメトリクス名とラベル名を処理するために、複数のエスケープスキームをサポートしています。エスケープスキームはスクレイピング中にネゴシエートされ、メトリクスプロデューサーがメトリクス名をどのようにフォーマットすべきかに影響します。

エスケープスキーム

エスケープなし (allow-utf-8)

ヘッダー値: escaping=allow-utf-8

動作:

  • メトリクス名およびラベル名は有効なUTF-8文字列である必要があります。
  • 名前が展示フォーマットで二重引用符内に現れる場合、\\n、および"はバックスラッシュでエスケープする必要があります。
  • 名前が展示フォーマットで引用符なしで現れる場合、\および\nはバックスラッシュでエスケープする必要があります。
  • このスキームは、プロデューサーとコンシューマーの両方がUTF-8名をサポートしている場合にのみ使用する必要があります。

アンダースコアエスケープ (underscores)

ヘッダー値: escaping=underscores

動作:

  • レガシー文字セット(a-zA-Z0-9_:)以外のすべての文字はアンダースコアに置き換える必要があります。
  • 最初の文字は、文字、アンダースコア、またはコロンのいずれかである必要があります。
  • 後続の文字は、文字、数字、アンダースコア、またはコロンのいずれかである必要があります。
  • 例: metric.name/with/slashesmetric_name_with_slashes になります。

ドットエスケープ (dots)

ヘッダー値: escaping=dots

動作:

  • ドット(.)は_dot_に置き換える必要があります。
  • 既存のアンダースコアは二重アンダースコア(__)に置き換える必要があります。
  • その他のレガシー以外の文字は単一のアンダースコアに置き換える必要があります。
  • 最初の文字は、文字、アンダースコア、またはコロンのいずれかである必要があります。
  • 後続の文字は、文字、数字、アンダースコア、またはコロンのいずれかである必要があります。
  • 例: metric.name.with.dotsmetric_dot_name_dot_with_dot_dots になります。

値エンコーディングエスケープ (values)

ヘッダー値: escaping=values

動作:

  • 名前はU__で始まる必要があります。
  • レガシー文字セット(a-zA-Z0-9_:)以外の各文字は、アンダースコアで囲まれた16進数形式のUnicodeコードポイントに置き換える必要があります。
  • 単一のアンダースコアは二重アンダースコアに置き換える必要があります。
  • 例: metric.nameU__metric_2E_name になります(ここで、2Eは'.'の16進数Unicodeコードポイントです)。

デフォルトの動作

Acceptヘッダーにエスケープスキームが指定されていない場合、underscoresエスケープを使用することを推奨します。

セキュリティに関する考慮事項

  1. ターゲットは、エスケープを適用する前に、入力名を検証する必要があります。
  2. インジェクション攻撃を防ぐために、エスケープスキームを検証する必要があります。
  3. allow-utf-8スキームは、プロデューサーとコンシューマーの両方がUTF-8名をサポートしている場合にのみ使用する必要があります。

このページの内容