Prometheus 2.0 Alpha.3 新しいルールフォーマット

2017年6月22日筆者: Goutham Veeramachaneni

本日、Prometheus 2.0 の 3 番目のアルファ版をリリースします。新しいストレージレイヤーの様々なバグ修正に加え、いくつかの計画された破壊的変更が含まれています。

フラグの変更

まず、新しいフラグライブラリに移行しました。これにより、これまで Prometheus が使用していた単一ダッシュの代わりに、より一般的なダブルダッシュ -- プレフィックスがフラグに使用されます。デプロイメントはそれに応じて適応させる必要があります。さらに、このアルファ版ではいくつかのフラグが削除されました。Prometheus 1.0.0 以降の完全なリストは次のとおりです。

  • web.telemetry-path
  • すべての storage.remote.* フラグ
  • すべての storage.local.* フラグ
  • query.staleness-delta
  • alertmanager.url

レコーディングルール(Recording Rules)の変更

アラートとレコーディングルールは Prometheus の重要な機能の 1 つです。しかし、それらにはいくつかの設計上の問題や機能不足も伴います。具体的には以下の通りです。

  • すべてのルールが同じ間隔で実行されていました。10 分間隔で実行する方が良い負荷の高いルールや、15 秒間隔で実行できるルールなどがある場合がありました。

  • すべてのルールが並列で評価されていました。これは実際には Prometheus で最も古い オープンバグ です。これにはいくつかの問題があります。明白なのは、多くのルールがある場合、評価間隔ごとに負荷が急増することです。もう 1 つは、互いに依存するルールが古いデータで供給される可能性があることです。例えば

instance:network_bytes:rate1m = sum by(instance) (rate(network_bytes_total[1m]))

ALERT HighNetworkTraffic
  IF instance:network_bytes:rate1m > 10e6
  FOR 5m

ここでは instance:network_bytes:rate1m についてアラートを発していますが、instance:network_bytes:rate1m 自体は別のルールによって生成されています。HighNetworkTraffic アラートが instance:network_bytes:rate1m の現在の値が記録された後に実行された場合にのみ、期待される結果を得ることができます。

  • ルールとアラートは、ユーザーがさらに別の DSL を学習する必要がありました。

上記の課題を解決するために、ルールのグループ化は 以前から提案されていましたが、最近になって Prometheus 2.0 の 一部として実装されたばかりです。この実装の一環として、ルールはよく知られた YAML フォーマットに移行しました。これにより、ユーザーの環境の一般的なパターンに基づいてアラートルールを生成することも容易になります。

新しいフォーマットは以下のようになります。

groups:
- name: my-group-name
  interval: 30s   # defaults to global interval
  rules:
  - record: instance:errors:rate5m
    expr: rate(errors_total[5m])
  - record: instance:requests:rate5m
    expr: rate(requests_total[5m])
  - alert: HighErrors
    # Expressions remain PromQL as before and can be spread over
    # multiple lines via YAML’s multi-line strings.
    expr: |
      sum without(instance) (instance:errors:rate5m)
      /
      sum without(instance) (instance:requests:rate5m)
    for: 5m
    labels:
      severity: critical
    annotations:
      description: "stuff's happening with {{ $labels.service }}"

各グループのルールは順次実行され、グループごとに評価間隔を設定できます。

この変更は破壊的であるため、2.0 リリースでリリースします。移行のために promtool にコマンドを追加しました: promtool update rules <filenames> 変換されたファイルには .yml サフィックスが追加されます。Prometheus 設定の rule_files 句を適応させる必要があります。

この新しいアルファバージョンをテストして、Prometheus 2.0 の安定版リリースへの移行にご協力ください!バグは issue tracker に報告し、一般的なフィードバックは コミュニティチャンネル で提供してください。