ので雑感とか気付いたところをいくつか書いておく。
巨大なchangelog
予習はこのへん
PromConはあまり見れてない、native histgramの関連セッションもうちょいみないとなあ。
リリースノートのボリュームはあるけど全体としては3.0.0ですごい大きな機能が入ったというより、近辺で入った機能のfeatureフラグが外されたりデフォルトが変わったりというのが多い印象。
上記のPodcastでJuliusさんも言っていたけどBreaking Changesはそんなにないので移行自体はそんなに大変ではないはず。
近辺の機能追加も含めて全体で大きなとこ
- UIの変更とPromLens由来のクエリのExplain機能
- OTELまわりのサポートが本格的に入ったしRemoteWrite Recieverもデフォルトになった
- UTF8サポートとか、Out of OrderサンプルのIngest(これ自体は2.39.0 / 2022-10-05からあったが、Native Histgramの対応など)対応とか
- Native Histgramサポート
- Remote Write2.0、に関する直接的なアップデートは3にはないけど近辺で色々入っている、これもNative Histgramの対応含め
所感としてはPrometheus自体がRemote Writeの受け側となるユースケースが増えたり、Otelへの対応の流れもあり、Out of Orderサンプルの受け入れ対応などが本格的に使われはじめるからそれにもろもろ対応していっている、当初のPrometheusは自身がScrapeして記録するというシンプルな設計でOut of Orderサンプルのことなど気にしなくて良いアーキテクチャだったけど、そうもいかなくなったきたなという。
Native Histgramはいよいよ使われてくるかな・・という感じで、これも今までの素朴なテキストフォーマットのメトリクス開示からprotobufになり(テキストフォーマットをサポートするかの議論はまだあるようだが)、便利そうだが各々のexporterが対応するのはちょっと敷居が高そう。
client_golang使っているところは早く対応しそうだけど、個人的にはこれingestされる側のtimeseries数どうなるんだろうね、費用的な意味で・・というところが気になっている。
k8sの世界も結構レイテンシ取ってるところでヒストグラム使われてるのでここのコストが減ると嬉しい人は多そう。
Explain機能
Prometheus3.0のexplainよい(PromLensのアレ pic.twitter.com/aJNaUD6uWz
— EG (@EGMC) 2024年11月15日
最近はGrafana側でクエリ書く機能というか、クエリをそもそも手で書かない機能みたいなのが強化されていたけど、PromQLを手で書くぜ!という人にはこれはとてもよさそう。
文脈としてはもともとPromLensが2022にOSS化されていて
これが本体に入ってきた感じかなと。
metadataの結合とか集計とかちょっと複雑なことやるのにとても便利。
細かいとこ
--enable-feature=promql-experimental-functionsしてdouble_exponential_smoothingにしたら動いたけど、これGrafana Cloud=Mimir側ではholt_wintersで動いてるんだよね、どうするんだろう(PromQL compatibilityな意味で pic.twitter.com/thW7M2cZUd
— EG (@EGMC) 2024年11月15日
holt_wintersがなくなった(名前が変わってexperimentalに落とされた。
まあなくなるということはあまりプロダクションで使われてなかったんだろうと思いつつ、Prometheusとの仕様互換性チェックは関数のサポートもみられてるのでここらへんの変更の扱いはどうなるのかなーというのがちょっと気になったところ。
(ユーザー的にはPrometheus Compatibleっていってるところで環境ごとに使える/使えないみたいなのが出てくるめんどくさいので、メジャーバージョン単位に対する互換性みたいなことになるならまあいいけどな・・という
(個人的にはホビーな環境でネットの速度の予測値だしたりして遊んでた、プロダクションでは使ってない)
あとdeprecatedになってたstorage.tsdb.retentionみたいなフラグが消されたので、古いオプションで動かしていた人は移行注意というのとclassic histgramの記録方法がtext/protobufで違っていたものが正規化されたりするらしい。
leを直接クエリで使っていない限りはあまり関係なさそうではある。
雑なテキストベースのexporterを利用しているところは、Content-Typeの厳密なチェックは結構危ないかも、fallback_scrape_protocol明示しといた方が無難そう。