3.16. ユーザー定義プロジェクトでバインドされていないメトリクス属性の影響の制御
開発者は、キーと値のペアの形式でメトリクスの属性を定義するためにラベルを作成できます。使用できる可能性のあるキーと値のペアの数は、属性について使用できる可能性のある値の数に対応します。数が無制限の値を持つ属性は、バインドされていない属性と呼ばれます。たとえば、customer_id
属性は、使用できる値が無限にあるため、バインドされていない属性になります。
割り当てられるキーと値のペアにはすべて、一意の時系列があります。ラベルに多数のバインドされていない値を使用すると、作成される時系列の数が指数関数的に増加する可能性があります。これは Prometheus のパフォーマンスに影響する可能性があり、多くのディスク領域を消費する可能性があります。
クラスター管理者は、以下の手段を使用して、ユーザー定義プロジェクトでのバインドされていないメトリクス属性の影響を制御できます。
- ユーザー定義プロジェクトでターゲットスクレイピングごとの許容可能なサンプル数を制限する
- スクレイピングするラベルの数、ラベル名の長さ、ラベル値の長さを制限する
- 連続するスクレイピング間および Prometheus ルール評価間の間隔を設定する
- スクレイピングサンプルのしきい値に達した場合、またはターゲットをスクレイピングできない場合に発するアラートを作成する
スクレイピングサンプル数を制限すると、ラベルにバインドされない属性を多数追加することによって発生する問題を防ぐことができます。さらに開発者は、メトリクスに定義するバインドされていない属性の数を制限することにより、根本的な原因を防ぐことができます。使用可能な値の制限されたセットにバインドされる属性を使用すると、可能なキーと値のペアの組み合わせの数が減ります。
3.16.1. ユーザー定義プロジェクトのスクレイピング間隔、評価間隔、および制限適用の設定
ユーザー定義プロジェクトに対して、次のスクレイピングおよびラベルの制限を設定できます。
- ターゲットスクレイピングごとの許容可能なサンプル数を制限する
- スクレイピングするラベルの数を制限する
- ラベル名とラベル値の長さを制限する
連続するスクレイピング間および Prometheus ルール評価間の間隔を設定することもできます。
サンプルまたはラベルの制限を設定している場合、制限に達した後にそのターゲット収集に関する追加のサンプルデータは取得されません。
前提条件
-
cluster-admin
クラスターロールを持つユーザーとして、またはopenshift-user-workload-monitoring
プロジェクトのuser-workload-monitoring-config-edit
ロールを持つユーザーとして、クラスターにアクセスできる。 - クラスター管理者は、ユーザー定義プロジェクトのモニタリングを有効にしている。
-
OpenShift CLI (
oc
) がインストールされている。
手順
openshift-user-workload-monitoring
プロジェクトでuser-workload-monitoring-config
ConfigMap
オブジェクトを編集します。$ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config
適用する制限と時間間隔の設定を
data/config.yaml
に追加します。apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | prometheus: enforcedSampleLimit: 50000 1 enforcedLabelLimit: 500 2 enforcedLabelNameLengthLimit: 50 3 enforcedLabelValueLengthLimit: 600 4 scrapeInterval: 1m30s 5 evaluationInterval: 1m15s 6
- 1
- このパラメーターが指定されている場合は、値が必要です。この
enforcedSampleLimit
の例では、ユーザー定義プロジェクトのターゲット収集ごとに受け入れ可能なサンプル数を 50,000 に制限します。 - 2
- 収集ごとのラベルの最大数を指定します。デフォルト値は
0
で、制限は指定されません。 - 3
- ラベル名の最大文字長を指定します。デフォルト値は
0
で、制限は指定されません。 - 4
- ラベル値の最大文字長を指定します。デフォルト値は
0
で、制限は指定されません。 - 5
- 連続するスクレイピング間の間隔を指定します。間隔は 5 秒から 5 分の間で設定する必要があります。デフォルト値は
30s
です。 - 6
- Prometheus ルールの評価間隔を指定します。間隔は 5 秒から 5 分の間で設定する必要があります。Prometheus のデフォルト値は
30s
です。
注記data/config.yaml/thanosRuler
フィールドを通じて Thanos Ruler のevaluationInterval
プロパティーを設定することもできます。Thanos Ruler のデフォルト値は15s
です。- 変更を適用するためにファイルを保存します。制限は自動的に適用されます。
3.16.2. 収集サンプルアラートの作成
以下の場合に通知するアラートを作成できます。
-
ターゲットを収集できず、指定された
for
の期間利用できない -
指定された
for
の期間、収集サンプルのしきい値に達するか、この値を上回る
前提条件
-
cluster-admin
クラスターロールを持つユーザーとして、またはopenshift-user-workload-monitoring
プロジェクトのuser-workload-monitoring-config-edit
ロールを持つユーザーとして、クラスターにアクセスできる。 - クラスター管理者は、ユーザー定義プロジェクトのモニタリングを有効にしている。
-
enforcedSampleLimit
を使用して、ユーザー定義プロジェクトのターゲット収集ごとに受け入れ可能なサンプル数を制限している。 -
OpenShift CLI (
oc
) がインストールされている。
手順
ターゲットがダウンし、実行されたサンプル制限に近づく際に通知するアラートを指定して YAML ファイルを作成します。この例のファイルは
monitoring-stack-alerts.yaml
という名前です。apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: labels: prometheus: k8s role: alert-rules name: monitoring-stack-alerts 1 namespace: ns1 2 spec: groups: - name: general.rules rules: - alert: TargetDown 3 annotations: message: '{{ printf "%.4g" $value }}% of the {{ $labels.job }}/{{ $labels.service }} targets in {{ $labels.namespace }} namespace are down.' 4 expr: 100 * (count(up == 0) BY (job, namespace, service) / count(up) BY (job, namespace, service)) > 10 for: 10m 5 labels: severity: warning 6 - alert: ApproachingEnforcedSamplesLimit 7 annotations: message: '{{ $labels.container }} container of the {{ $labels.pod }} pod in the {{ $labels.namespace }} namespace consumes {{ $value | humanizePercentage }} of the samples limit budget.' 8 expr: (scrape_samples_post_metric_relabeling / (scrape_sample_limit > 0)) > 0.9 9 for: 10m 10 labels: severity: warning 11
- 1
- アラートルールの名前を定義します。
- 2
- アラートルールのデプロイ先であるユーザー定義プロジェクトを指定します。
- 3
TargetDown
アラートは、ターゲットを収集できず、for
期間中に使用できない場合に実行されます。- 4
TargetDown
アラート実行時に表示されるメッセージ。- 5
- アラートが実行される前に、
TargetDown
アラートの条件がこの期間中 true である必要があります。 - 6
TargetDown
アラートの重大度を定義します。- 7
ApproachingEnforcedSamplesLimit
アラートは、定義された収集サンプルしきい値を超えると実行され、指定されたfor
期間を通して継続します。- 8
ApproachingEnforcedSamplesLimit
アラート実行時に表示されるメッセージ。- 9
ApproachingEnforcedSamplesLimit
アラートのしきい値。この例では、取り込まれたサンプル数が設定された制限の 90% を超えるとアラートが発生します。- 10
- アラートが実行される前に、
ApproachingEnforcedSamplesLimit
アラートの条件がこの期間中 true である必要があります。 - 11
ApproachingEnforcedSamplesLimit
アラートの重大度を定義します。
設定をユーザー定義プロジェクトに適用します。
$ oc apply -f monitoring-stack-alerts.yaml
ターゲットが設定された制限に達したかどうかも確認できます。
Web コンソールの Administrator パースペクティブで Observe
Targets に移動し、確認する Down
ステータスのエンドポイントを選択します。サンプル制限を超えたためにエンドポイントが失敗した場合は、Scrape failed: sample limit exceeded メッセージが表示されます。
関連情報
- ユーザー定義のワークロードモニタリング config map の作成
- ユーザー定義プロジェクトのモニタリングの有効化
- 最高数の収集サンプルを持つメトリクスをクエリーする手順は、Prometheus が大量のディスク領域を消費している理由の特定 を参照してください。