PromQL の互換性

Google Cloud Managed Service for Prometheus の PromQL クエリは、Monitoring Query Language(MQL)を使用して Monarch バックエンドで部分的に評価されます。クエリ結果には違いがいくつかあります。このドキュメントでは、その違いについて説明します。

このドキュメントに記載されている違いを除き、Managed Service for Prometheus の PromQL は Prometheus バージョン 2.44 で利用可能な PromQL と同等です。

Prometheus バージョン 2.44 より後に追加された PromQL 関数はサポートされません。

指標名の一致

指標名の完全一致のみがサポートされています。クエリには、指標名の完全一致を含める必要があります。

__name__ ラベルで正規表現マッチャーを使用する一般的なシナリオでは、次の回避策をおすすめします。

  • Prometheus アダプタの構成では、多くの場合、=~ 演算子を使用して複数の指標名を照合します。この使用方法を修正するには、構成を拡張して、指標ごとに個別のポリシーを使用し、各指標に明示的に名前を付けます。また、予期しない指標で誤って自動スケーリングが行われることもなくなります。
  • 正規表現は、複数の非ディメンション指標を同じグラフにグラフ化する際によく使用されます。たとえば、cpu_servicename_usage などの指標がある場合は、ワイルドカードを使用してすべてのサービスをまとめてグラフに表示できます。このような非ディメンション指標を使用することは、Cloud Monitoring では明示的に推奨されない方法であり、この方法はクエリのパフォーマンスを著しく低下させます。この使用方法を修正するには、ディメンションを指標名に埋め込むのではなく、すべてのディメンションを指標ラベルに移動します。
  • 複数の指標に対するクエリは、クエリ可能な指標を確認する際によく使用されます。代わりに、/labels/__name__/values 呼び出しを使用して指標を検出することをおすすめします。Cloud Monitoring の UI を使用して指標を検出することもできます。
  • 複数の指標を照合すると、指標ごとにスクレイピング、取り込み、課金されたサンプル数を確認できます。この情報は、Cloud Monitoring の [指標の管理] ページに表示されます。サンプルの取り込み指標またはアトリビューション ID によって書き込まれたサンプル指標を使用して、この情報を指標データとして利用することもできます。

Staleness

Staleness は Monarch バックエンドでサポートされていません。

irate の計算

irate 関数のルックバック ウィンドウがステップサイズよりも小さい場合、ステップサイズに合わせてウィンドウが大きくなります。Monarch では、すべての入力データが出力で完全に無視されないようにするため、この変更が必要になります。この違いは rate の計算にも適用されます。

rateincrease の計算

rate 関数のルックバック ウィンドウがステップサイズよりも小さい場合、ステップサイズに合わせてウィンドウが大きくなります。Monarch では、すべての入力データが出力で完全に無視されないようにするため、この変更が必要になります。この違いは irate の計算にも適用されます。

補間計算と外挿計算に違いがあります。Monarch では Prometheus とは異なる補間アルゴリズムが使用されるため、この違いによってわずかに異なる結果が生じる可能性があります。たとえば、Monarch カウンタのサンプルは、Prometheus が使用している単一のタイムスタンプではなく、時間範囲で保存されます。したがって、Prometheus のタイムスタンプは除外されますが、Monarch のカウンタ サンプルはレート計算に含めることができます。これによって、通常はより正確なレートの結果が得られます。特に、基になる時系列の開始位置または終了位置をまたいでクエリする際により正確な結果が得られます。

histogram_quantile の計算

サンプルのないヒストグラムに対する PromQL の histogram_quantile 計算では、NaN 値が生成されます。内部クエリ言語の計算では値は生成されません。代わりに、タイムスタンプのデータポイントがドロップされます。

レートの計算の違いは、histogram_quantile クエリへの入力にも影響します。

特定の型の関数を異なる型の指標に対して実行する場合

アップストリームの Prometheus では弱い型付けが使用されるのに対し、Monarch では強い型付けが使用されます。そのため、ある特定の型の関数を、異なる型の指標に対して実行する場合(たとえば、GAUGE 指標に対して rate() を実行する場合や、COUNTER または型指定なしの指標に対して histogram_quantile() を実行する場合など)、それらの関数はアップストリームの Prometheus では機能しますが、Managed Service for Prometheus では機能しません。