KubeCon: Prometheus Intro, Deep Dive, and Open Q+Aをみる
https://youtu.be/81pbYzd6sNI?si=wrBTehev2p_chLYj
Prometheus 3.0 のマイルストーン
Prometheus 3.0および最新の3.7リリースにおいて、OpenTelemetryとの互換性強化
OpenTelemetry (OTel) との相互運用性
PrometheusサーバーはOTLPを標準でサポートしており、3.0からはメトリクスのプッシュ送信も受け入れ可能になった
OTelのメトリクス名はドット(.)区切りが標準だが、Prometheusは伝統的にアンダースコア(_)を使用。新しいオプション「no translation」を選択することで、OTelの元の名称構造を維持したまま取り込める。
https://scrapbox.io/files/694bb955fd7f06922274cc70.png
メトリクスにtypeとunitをラベルとして付与する機能が推奨されている。これにより、例えば秒とミリ秒のデータが混在しても、クエリ実行時にそれらを明確に区別し、誤った集計を防ぐことができる
https://scrapbox.io/files/694bb97f1e8361f0a8b3906d.png
初期段階だが、デルタ形式のカウンターの取り込みも始まっている。現在は「unknown」としてマークされる、今後ストレージやクエリ層での対応が進められる予定。
https://scrapbox.io/files/694bb99c44e31155e2af8828.png
OTelのリソース属性は非常に膨大で、50個以上の属性を持つことがある。
すべてをラベル化するとUIが煩雑になるため、promote_resource_attributesやignore_resource_attributesによって、必要な属性だけをPrometheusのラベルに変換できるようになった。
前はメタデータを結合するために長いjoinクエリを書く必要があったが、新機能のinfo()を使用することで、特定の情報(例:Kubernetesのクラスター名)を既存のメトリクスに結合する記述が非常に短く、読みやすくなる
Native Histograms
100個以上のバケットを持つような高密度なデータでも単一のComplex Sampleとして保存され、TSDBのパフォーマンスが向上した。
従来の_bucketラベルによる検索はできなくなるため、histogram_count()などの専用関数を用いてデータにアクセスするようにクエリを書き換える必要がある
PromQL
期間(Duration)の算術計算: クエリ内で9m + 2sのように、期間同士の足し算・引き算を直接記述できるようになった
補完・補外の制御
smoothed: 欠落したデータポイント間を線形補完する。データが断続的な場合に、グラフを滑らかな線で描画するのに適しているが、未来のデータポイントを必要とするため、最新時刻に近いアラート等での使用には注意が必要。
anchored: 推測による補完を行わず、データベースにある実際の変化量のみを返す。これにより、整数ベースのメトリクス(エラー数など)をクエリした際に、浮動小数点(例:3.75個のエラー)ではなく、必ず整数で結果を得ることができる