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

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

フラグの変更

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

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

レコーディングルールの変更

アラートとレコーディングルールは、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自体は別のルールによって生成されています。instance:network_bytes:rate1mの現在の値が記録された後に、アラートHighNetworkTrafficが実行された場合にのみ、期待通りの結果を得ることができます。

  • ルールとアラートでは、ユーザーがさらに別の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の安定版リリースに向けて取り組むお手伝いをお願いします!バグは問題トラッカーで報告し、一般的なフィードバックはコミュニティチャネルから提供してください。