Prometheus 3.0 の発表

2024年11月14日筆者: Prometheus チーム

ベルリンで開催された PromCon での Prometheus 3.0 ベータ版の最近のリリースに続き、Prometheus チームは Prometheus バージョン 3.0 の即時提供を発表できることを嬉しく思います!

この最新バージョンは、7年ぶりのメジャーリリースとなるため、重要な節目となります。Prometheus はその間に大きく進化し、アーリーアダプター向けのプロジェクトから、クラウドネイティブな監視スタックの標準的な一部へと成長しました。Prometheus 3.0 は、以前のバージョンとの安定性と互換性を大部分維持しつつ、いくつかのエキサイティングな新機能を追加することで、その旅を続けることを目指しています。

完全な 3.0 リリースでは、ベータ版に加えていくつかの新機能が追加され、この記事で説明するいくつかの追加の破壊的変更も導入されています。

新機能

ベータ版の一部としてリリースされたエキサイティングな変更点の概要と、その後に追加された変更点です。

新しいUI

Prometheus 3.0 のハイライトの1つは、デフォルトで有効になっている真新しい UI です。

New UI query page

UI は完全に書き直され、煩雑さが減り、よりモダンなルック&フィール、PromLens スタイルのツリービューなどの新機能が追加され、よりモダンな技術スタックを使用することで、今後のメンテナンスが容易になります。

新しい UI 全般の詳細については、Julius の PromLabs ブログの詳細記事 をご覧ください。ユーザーは、old-ui 機能フラグを使用して、一時的に古い UI を有効にすることができます。

新しい UI はまだ実戦でテストされていないため、バグが残っている可能性も十分にあります。もしバグを発見された場合は、GitHub で報告してください。

ベータ版以降、ユーザーインターフェースは UTF-8 メトリックとラベル名をサポートするように更新されました。

New UTF-8 UI

リモート書き込み 2.0

Remote-Write 2.0 は、メタデータ、エグザンプラー、作成タイムスタンプ、ネイティブヒストグラムを含む多数の新しい要素のネイティブサポートを追加することで、以前のプロトコルバージョンを改善しています。また、文字列インターニングを使用して、圧縮および解凍時のペイロードサイズと CPU 使用率を削減します。部分的な書き込みに対するより良い処理により、このような状況でクライアントに詳細情報を提供します。詳細については、こちらをご覧ください。

UTF-8 サポート

Prometheus は、バージョン 2.x でそうであったように、デフォルトで、すべての有効な UTF-8 文字をメトリックおよびラベル名、およびラベル値で使用できるようになりました。

ユーザーは、メトリック生成ツールが UTF-8 名を渡すように構成されていることを確認する必要があります。どちらかの側が UTF-8 をサポートしていない場合、メトリック名は従来のアンダースコア置換方法を使用してエスケープされます。PromQL クエリは、新しい引用構文を使用して UTF-8 メトリックを取得するか、ユーザーが __name__ ラベル名を手動で指定することができます。

現在、Go クライアントライブラリのみが UTF-8 をサポートするように更新されていますが、他の言語のサポートも近日中に追加される予定です。

OTLP サポート

OpenTelemetry へのコミットメントに合わせ、Prometheus 3.0 は OpenTelemetry との相互運用性を向上させるためのいくつかの新機能を備えています。

OTLP インジェスト

Prometheus は、OTLP Metrics プロトコルのネイティブレシーバーとして構成でき、/api/v1/otlp/v1/metrics エンドポイントで OTLP メトリックを受信できます。

Prometheus に OTLP メトリックトラフィックを取り込むためのベストプラクティスについては、ガイドを参照してください。

UTF-8 正規化

Prometheus 3.0 では、UTF-8 サポートのおかげで、ユーザーは OpenTelemetry メトリックを、ドットをアンダースコアに変更するといったメトリック名やラベル名の煩わしい変更なしに保存およびクエリできるようになりました。

これにより、OpenTelemetry のセマンティック規約や SDK で定義されているものと、実際にクエリできるものとの間の不一致に関して、ユーザーやツールにとって**混乱が少なく**なることが注目されます。

OTLP インジェストでこれを実現するために、Prometheus 3.0 はさまざまな変換戦略の実験的なサポートを提供します。詳細については、Prometheus 設定の OTLP セクションを参照してください。

注意「NoUTF8EscapingWithSuffixes」戦略では特殊文字が許可されますが、最高の体験のために必要なサフィックスが追加されます。Prometheus でサフィックスなしを有効にする将来の作業に関する提案を参照してください。

ネイティブヒストグラム

ネイティブヒストグラムは、従来のヒストグラムよりも効率が高く、コストの低い代替手段を提供する Prometheus メトリックタイプです。データセットに基づいてバケット境界を選択(そして更新する必要がある可能性もある)代わりに、ネイティブヒストグラムは指数関数的成長に基づいた事前設定されたバケット境界を持ちます。

ネイティブヒストグラムはまだ実験段階であり、デフォルトでは有効になっていません。--enable-feature=native-histograms を渡すことで有効にできます。ネイティブヒストグラムのいくつかの側面(テキスト形式やアクセサー関数/演算子など)は、まだ活発に設計中です。

破壊的変更

Prometheus コミュニティは、メジャーリリース内で既存の機能を破壊しないよう努めています。しかし、新しいメジャーリリースでは、いくつかの小さな長年の問題を整理する機会を得ました。言い換えれば、Prometheus 3.0 にはいくつかの破壊的変更が含まれています。これには、機能フラグ、設定ファイル、PromQL、スクレイププロトコルへの変更が含まれます。

お使いのセットアップが影響を受けるかどうか、またどのような措置を講じるべきかについては、移行ガイドをお読みください。

パフォーマンス

Prometheus 2.0 以降、コミュニティで達成してきたことには目を見張るものがあります。私たちは皆、数字が好きなので、TSDB モードにおける CPU とメモリ使用量の両方で達成した効率改善を祝いましょう。以下に、8 CPU と 49 GB の割り当て可能なメモリを持つノード上での 3 つの Prometheus バージョン間のパフォーマンス数値を示します。

  • 2.0.0 (7年前)
  • 2.18.0 (4年前)
  • 3.0.0 (現在)

Memory bytes

CPU seconds

さらに印象的なのは、これらの数値が、Prometheus 3.0 であっても、コア機能の互換性と安定性を強調するために、同じ PromQL クエリ、設定、環境を使用するプロムベンチ・マクロベンチマークを使用して取得されたことです。

次は何?

Prometheus とそのエコシステムには、まだまだエキサイティングな機能や改善点がたくさんあります。皆さんの興味を引き、そして願わくば貢献を促すような、網羅的ではないリストを以下に示します。

  • 新しい、より包括的なガバナンス
  • より多くの **OpenTelemetry** 互換性と機能
  • OpenMetrics 2.0、Prometheus のガバナンス下へ!
  • ネイティブヒストグラムの安定性(およびカスタムバケットも!)
  • さらなる最適化!
  • より多くの SDK とツールでの UTF-8 サポートの範囲

試してみる!

Prometheus 3.0 は、公式バイナリコンテナイメージからダウンロードして試すことができます。

Prometheus 2.x からアップグレードする場合は、調整が必要な場合の詳細については、移行ガイドを確認してください。v3.0 にアップグレードする前に v2.55 にアップグレードすることを強くお勧めします。v3.0 から v2.55 へのロールバックは可能ですが、それ以前のバージョンへのロールバックはできません。

いつものように、コミュニティからのフィードバックと貢献を歓迎します!