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自体は別のルールによって生成されています。アラートHighNetworkTrafficinstance: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の安定版リリースに向けて私たちを助けてください!バグはイシュートラッカーで報告し、一般的なフィードバックはコミュニティチャネルを通じて提供できます。