高可用性(HA)設定でPrometheusリモート書込みインテグレーションを使用している場合、Prometheusサーバーが同じメトリクスの複数のコピーをNew Relicに送信していないことを確認する必要があります。本ドキュメントでは、New Relicが重複したメトリックスを保存しないようリモート書込みインテグレーションを設定する方法について説明しています。
ヒント
このページは、独自のPrometheusサーバーを高可用性設定で実行し、リモートライトを使用してメトリクスを転送する場合にのみ適用されます。まだPrometheusを実行していない場合、Kubernetes向けPrometheusエージェントは、HA重複排除を必要としない、完全にNew Relicが管理する代替手段です;オプションを比較するには、New RelicへのPrometheusメトリクスデータの送信をご覧ください。
クイックリファレンス
New Relicは、3つの値を使用してHAレプリカの重複を排除します。高可用性クラスタ内のすべてのレプリカに3つすべてを設定してください:
価値観 | 設定場所 | 同じHAクラスタ内のレプリカ間の値 | 例 |
|---|---|---|---|
| Prometheus 外部ラベル | すべてのレプリカで同じ |
|
| Prometheus 外部ラベル | レプリカごとに一意 |
|
|
| すべてのレプリカで同じ |
|
仕組み: New Relicは、アカウント、prometheusラベル、およびprometheus_serverパラメーターに基づいて、レプリカをHAクラスタに編成します。各クラスタで、New Relicは1つのレプリカをリーダーとして指定し、そのリーダーからのデータのみを保存します。リーダーはprometheus_replicaラベルによって識別されます。
重複排除を設定する
Prometheus Operator
オペレーターを直接使用する場合でも、 helm chartPrometheus Operator 経由で使用する場合でも、バージョン0.19.0以上のprometheus prometheus_replicaは、 および の外部ラベルを追加します:
prometheus<prometheus deployment namespace>/<prometheus deployment name>に設定されます。たとえば、monitoringネームスペースにあるprometheus-cluster1という名前のデプロイメントは、monitoring/prometheus-cluster1を生成します。prometheus_replica各レプリカのポッド名に、replica-<replica number>の形式で設定されます(たとえば、replica-1)。
すべてのレプリカに同じ値を使用して、PrometheusリソースのremoteWrite設定でprometheus_serverを自分で設定します。たとえば、このリソースは単一のremoteWriteブロックを持つ2つのレプリカのHAペアを実行するため、prometheus_serverは両方のレプリカ間で一貫性を保ちます:
apiVersion: monitoring.coreos.com/v1kind: Prometheusmetadata: name: monitoring-cluster namespace: monitoringspec: replicas: 2 remoteWrite: - url: https://metric-api.newrelic.com/prometheus/v1/write?prometheus_server=prod-monitoring authorization: credentials: name: nr-license-key key: licenseKeyその後、オペレーターは自動的にprometheusをmonitoring/monitoring-clusterに、prometheus_replicaを各レプリカのポッド名に設定します — 指定する必要があるのはprometheus_serverのみです。kube-prometheus-stack helmチャートを使用する場合は、prometheus.prometheusSpecの下に同じremoteWriteブロックを設定してください。
スタンドアロンのPrometheus
各レプリカの設定ファイルに外部ラベルを追加し、すべてのレプリカで同一のremote_writeURL — prometheus_serverパラメーターを含む — を使用します。
Replica 1 ( prometheus.yml )
global: external_labels: prometheus: monitoring-cluster prometheus_replica: replica-1
remote_write: - url: https://metric-api.newrelic.com/prometheus/v1/write?prometheus_server=prod-monitoring authorization: credentials: YOUR_LICENSE_KEYReplica 2 ( prometheus.yml )
global: external_labels: prometheus: monitoring-cluster prometheus_replica: replica-2
remote_write: - url: https://metric-api.newrelic.com/prometheus/v1/write?prometheus_server=prod-monitoring authorization: credentials: YOUR_LICENSE_KEY2つのレプリカ間で異なるのはprometheus_replicaのみです;prometheusとprometheus_serverは同一です。
制限
レプリカ間でprometheus_serverを同一に保ちます。New Relicはprometheus_serverを使用してレプリカをグループ化するため、レプリカに異なる値を与えると — たとえばホストごとやポッドごとなど — それぞれが独自のHAグループに配置されます。各レプリカはそのグループの唯一のメンバーとなり、常にリーダーとして選出され、すべてのデータを保持します。各レプリカは正常なスタンドアロンのリーダーとして表示されるため、結果としてエラーや警告なしにNew Relicに重複データが生成されます。個々のレプリカを区別するには、代わりにprometheus_replicaラベルを使用します。
1つのアカウントにつき最大1,500の固有のPrometheus HAクラスタを持つことができ、アカウント、prometheusラベル、およびprometheus_serverパラメーターの固有の組み合わせごとにカウントされます。この制限を超えると、追加のHAクラスタからのデータが破棄され、New RelicはPrometheusHAClusterLimitNrIntegrationErrorイベントを生成します。レプリカ間でprometheus_serverを一貫させることで、単一のHAグループがこの制限に対して複数のスロットを消費することも防ぎます。
トラブルシューティング
Prometheus Operator prometheus_serverを設定しません — その値は完全にPrometheusリソースのremoteWrite設定から取得されます。すべてのレプリカが単一のremoteWriteブロックを共有する場合(通常の場合)、これはデフォルトで一貫しています。レプリカごとのremoteWriteのオーバーライドを挿入する場合は、すべてのレプリカでprometheus_serverが同じであることを確認してください。
それでもレプリカデータのコピーが重複して表示される場合、replicaExternalLabelNameまたはprometheusExternalLabelNameはラベル名の変更を上書きするため、これらがPrometheusの仕様またはチャート設定にないことを確認します。
最も一貫した重複排除を行うには、Prometheus scrape_intervalを60秒以下に維持してください。New Relicは、最後に受信したデータから各HAクラスタ内のアクティブなレプリカを識別し、Prometheusリモート書き込みはスクレイプごとに約1回新しいサンプルを転送します。クラスタがそれより低い頻度でデータを送信する場合、New Relicは同じリーダーを一貫して認識できない可能性があり、エラーが表示されることなく、複数のレプリカからの重複したデータやインターリーブされたデータを保持する可能性があります。