Prometheus 2.0 の主な変更点と移行するときのメモをまとめました。
主な変更点
- ストレージ部分がリライトされてパフォーマンスが大きく向上
- CPU、ディスク使用量、I/O のすべてが改善された
- オプションがシンプルになり
-storage.local.target-heap-size
のチューニングが不要に(後述) - v1.x からデータファイルの移行はできないので注意
- コードは prometheus/tsdb という独立したレポジトリで管理されている
- staleness の取扱が変わった
- staleness とはターゲットが消えたりして有効でなくなった time series を無視するための仕組み
- 1.x では直近 5 分間データがなければ time series が無効になったと判定していた
- 2.0 ではstaleness のマーカーが実装され timeseries が終了したことが明示的にわかるようになった
- オプション、設定ファイルにいくつか変更あり
- v1.x から起動オプション、設定ファイルを修正する必要あり
1.x から 2.0 への移行
移行については PROMETHEUS 2.0 MIGRATION GUIDE というドキュメントにまとまっています。設定ファイルは v1.x から大きくは変わっていないので一部の修正で移行することができました。移行の注意点は主に以下になります。
- 1.x とのデータの互換性はないのでデータ移行はできない
- 1.8 移行であれば scrape を止めた旧バージョンを並行して動かしておき新バージョンから remote_read で参照することは可能
- アラートルール、レコーディングルールの記述が yaml 形式に変わった
- コマンドライン引数のダッシュが一つから二つに変更
- 例:
-config.file
が--config.file
に - フラグライブラリが go 標準の
flag
から alecthomas/kingpinに変わったことに起因
- 例:
- 下記のコマンドライン引数が削除された
-
-alertmanager.url
: 設定ファイルで指定する -
-log.format
: stderr への出力だけになった。 -
-query.staleness-delta
:--query.lookback-delta
にリネームされた。 -
-storage.local.*
: ストレージエンジンが変わったことでなくなった。--storage.tsdb.*
で新しいストレージエンジンの設定を行う(後述) -
-storage.remote.*
: もともと deprecated だったフラグが削除された。
-
- PromQL から下記の関数が削除された
-
drop_common_labels
: 代わりにwithout
を使う -
keep_common
: 代わりにby
を使う -
count_scalar
: time series の存在をチェックしたい場合はabsent
を利用する
-
- 設定ファイルのリロード用エンドポイント
/-/reload
はセキュリティ上の理由でデフォルト無効になった-
--web.enable-lifecycle
で有効にできる
-
- prometheus の Docker イメージが non-root で実行されるようになった
- 80 番のような特権ポートを使いたい場合は指定が必要
ストレージのオプション
-storage.local.*
のオプションがなくなった代わりに --storage.tsdb.*
というオプションが追加されています。データの保持期間(retention)は v1 と同様存在しますが、メモリの使用量を指定する -storage.local.target-heap-size
に相当するものはなくなりオプションは非常にシンプルになりました。
-storage.local.target-heap-size
が不要になった理由
-storage.local.target-heap-size
による明示的なメモリの指定がいらなくなったのは Go のレイヤで行っていたチャンクデータのキャッシュの処理を、2.0 ではmmap を使いカーネル側に任せることで自前での退避(evict)処理が必要なくなったからだそうです。参考: Unable to deploy v2.0.0-beta.0 #480 のコメント
オプション
$ docker run prom/prometheus:v2.0.0 -h
--storage.tsdb.path="data/"
Base path for metrics storage.
--storage.tsdb.min-block-duration=2h
Minimum duration of a data block before being
persisted.
--storage.tsdb.max-block-duration=<duration>
Maximum duration compacted blocks may span.
(Defaults to 10% of the retention period)
--storage.tsdb.retention=15d
How long to retain samples in the storage.
--storage.tsdb.no-lockfile
Do not create lockfile in data directory.
promtool でのアラートルールの変換
promtool で下記のようにアラートルールを変換が可能です。
$ docker run -v $PWD:/current --entrypoint /bin/promtool prom/prometheus:v2.0.0 update rules /current/general.rule
Updating /current/general.rule
変換元のルール .yml
という prefix が付いたファイル名で変換されたものが保存されます
# 変換前
ALERT InstanceDown
IF up == 0
FOR 5m
LABELS { severity = "page" }
ANNOTATIONS {summary = "Instance {{ $labels.instance }} down"}
# 変換後
groups:
- name: /current/general.rule
rules:
- alert: InstanceDown
expr: up == 0
for: 5m
labels:
severity: page
annotations:
summary: Instance {{ $labels.instance }} down