7.11. モニタリング関連の問題の調査
OpenShift Container Platform には、コアプラットフォームコンポーネントのモニタリングを提供する事前に設定され、事前にインストールされた自己更新型のモニタリングスタックが含まれます。OpenShift Container Platform 4.19 では、クラスター管理者は必要に応じてユーザー定義プロジェクトのモニタリングを有効にできます。
次の問題が発生した場合は、このセクションの手順に従ってください。
- 独自のメトリクスが利用できない。
- Prometheus が大量のディスク容量を消費している。
- 
						Prometheus に対して KubePersistentVolumeFillingUpアラートが発生している。
7.11.2. Prometheus が大量のディスク領域を消費している理由の特定
					開発者は、キーと値のペアの形式でメトリクスの属性を定義するためにラベルを作成できます。使用できる可能性のあるキーと値のペアの数は、属性に使用できる可能性のある値の数に対応します。数が無制限の値を持つ属性は、バインドされていない属性と呼ばれます。たとえば、customer_id 属性は、使用できる値が無限にあるため、バインドされていない属性になります。
				
割り当てられるキーと値のペアにはすべて、一意の時系列があります。ラベルに多数のバインドされていない値を使用すると、作成される時系列の数が指数関数的に増加する可能性があります。これは Prometheus のパフォーマンスに影響する可能性があり、多くのディスク領域を消費する可能性があります。
Prometheus が多くのディスクを消費する場合、以下の手段を使用できます。
- どのラベルが最も多くの時系列データを作成しているか詳しく知るには、Prometheus HTTP API を使用して時系列データベース (TSDB) のステータスを確認 します。これを実行するには、クラスター管理者権限が必要です。
- 収集されている スクレイプサンプルの数を確認 します。
- ユーザー定義メトリクスに割り当てられるバインドされていない属性の数を減らすことで、作成される一意の時系列の数を減らします。 注記- 使用可能な値の制限されたセットにバインドされる属性を使用すると、可能なキーと値のペアの組み合わせの数が減ります。 
- ユーザー定義のプロジェクト全体で スクレイピングできるサンプルの数に制限を適用 します。これには、クラスター管理者の権限が必要です。
前提条件
- 
							cluster-adminクラスターロールを持つユーザーとしてクラスターにアクセスできる。
- 
							OpenShift CLI (oc) がインストールされている。
手順
- 
							OpenShift Container Platform Web コンソールで、Observe Metrics に移動します。 
- Expression フィールドに、Prometheus Query Language (PromQL) クエリーを入力します。次のクエリー例は、ディスク領域の消費量の増加につながる可能性のある高カーディナリティメトリクスを識別するのに役立ちます。 - 次のクエリーを実行すると、スクレイプサンプルの数が最も多いジョブを 10 個特定できます。 - topk(10, max by(namespace, job) (topk by(namespace, job) (1, scrape_samples_post_metric_relabeling))) - topk(10, max by(namespace, job) (topk by(namespace, job) (1, scrape_samples_post_metric_relabeling)))- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のクエリーを実行すると、過去 1 時間に最も多くの時系列データを作成したジョブを 10 個特定して、時系列のチャーンを正確に特定できます。 - topk(10, sum by(namespace, job) (sum_over_time(scrape_series_added[1h]))) - topk(10, sum by(namespace, job) (sum_over_time(scrape_series_added[1h])))- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- 想定よりもサンプルのスクレイプ数が多いメトリクスに割り当てられたラベルで、値が割り当てられていないものの数を確認します。 - メトリクスがユーザー定義のプロジェクトに関連する場合、ワークロードに割り当てられたメトリクスのキーと値のペアを確認します。これらのライブラリーは、アプリケーションレベルで Prometheus クライアントライブラリーを使用して実装されます。ラベルで参照されるバインドされていない属性の数の制限を試行します。
- メトリクスが OpenShift Container Platform のコアプロジェクトに関連する場合、Red Hat サポートケースを Red Hat カスタマーポータル で作成してください。
 
- クラスター管理者としてログインしてから、次の手順に従い Prometheus HTTP API を使用して TSDB ステータスを確認します。 - 次のコマンドを実行して、Prometheus API ルート URL を取得します。 - HOST=$(oc -n openshift-monitoring get route prometheus-k8s -ojsonpath='{.status.ingress[].host}')- $ HOST=$(oc -n openshift-monitoring get route prometheus-k8s -ojsonpath='{.status.ingress[].host}')- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のコマンドを実行して認証トークンを抽出します。 - TOKEN=$(oc whoami -t) - $ TOKEN=$(oc whoami -t)- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のコマンドを実行して、Prometheus の TSDB ステータスのクエリーを実行します。 - curl -H "Authorization: Bearer $TOKEN" -k "https://$HOST/api/v1/status/tsdb" - $ curl -H "Authorization: Bearer $TOKEN" -k "https://$HOST/api/v1/status/tsdb"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
7.11.3. Prometheus に対する KubePersistentVolumeFillingUp アラートの解決
					クラスター管理者は、Prometheus に対してトリガーされている KubePersistentVolumeFillingUp アラートを解決できます。
				
					openshift-monitoring プロジェクトの prometheus-k8s-* Pod によって要求された永続ボリューム (PV) の合計残り容量が 3% 未満になると、重大アラートが発生します。これにより、Prometheus の動作異常が発生する可能性があります。
				
						KubePersistentVolumeFillingUp アラートは 2 つあります。
					
- 
								重大アラート: マウントされた PV の合計残り容量が 3% 未満になると、severity="critical"ラベルの付いたアラートがトリガーされます。
- 
								警告アラート: マウントされた PV の合計空き容量が 15% 未満になり、4 日以内にいっぱいになると予想される場合、severity="warning"ラベルの付いたアラートがトリガーされます。
この問題に対処するには、Prometheus 時系列データベース (TSDB) のブロックを削除して、PV 用のスペースを増やすことができます。
前提条件
- 
							cluster-adminクラスターロールを持つユーザーとしてクラスターにアクセスできる。
- 
							OpenShift CLI (oc) がインストールされている。
手順
- 次のコマンドを実行して、すべての TSDB ブロックのサイズを古いものから新しいものの順にリスト表示します。 - oc debug <prometheus_k8s_pod_name> -n openshift-monitoring \ -c prometheus --image=$(oc get po -n openshift-monitoring <prometheus_k8s_pod_name> \ -o jsonpath='{.spec.containers[?(@.name=="prometheus")].image}') \ -- sh -c 'cd /prometheus/;du -hs $(ls -dtr */ | grep -Eo "[0-9|A-Z]{26}")'- $ oc debug <prometheus_k8s_pod_name> -n openshift-monitoring \- 1 - -c prometheus --image=$(oc get po -n openshift-monitoring <prometheus_k8s_pod_name> \- 2 - -o jsonpath='{.spec.containers[?(@.name=="prometheus")].image}') \ -- sh -c 'cd /prometheus/;du -hs $(ls -dtr */ | grep -Eo "[0-9|A-Z]{26}")'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 出力例 - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 削除できるブロックとその数を特定し、ブロックを削除します。次のコマンド例は、 - prometheus-k8s-0Pod から最も古い 3 つの Prometheus TSDB ブロックを削除します。- oc debug prometheus-k8s-0 -n openshift-monitoring \ -c prometheus --image=$(oc get po -n openshift-monitoring prometheus-k8s-0 \ -o jsonpath='{.spec.containers[?(@.name=="prometheus")].image}') \ -- sh -c 'ls -latr /prometheus/ | egrep -o "[0-9|A-Z]{26}" | head -3 | \ while read BLOCK; do rm -r /prometheus/$BLOCK; done'- $ oc debug prometheus-k8s-0 -n openshift-monitoring \ -c prometheus --image=$(oc get po -n openshift-monitoring prometheus-k8s-0 \ -o jsonpath='{.spec.containers[?(@.name=="prometheus")].image}') \ -- sh -c 'ls -latr /prometheus/ | egrep -o "[0-9|A-Z]{26}" | head -3 | \ while read BLOCK; do rm -r /prometheus/$BLOCK; done'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- 次のコマンドを実行して、マウントされた PV の使用状況を確認し、十分な空き容量があることを確認します。 - oc debug <prometheus_k8s_pod_name> -n openshift-monitoring \ --image=$(oc get po -n openshift-monitoring <prometheus_k8s_pod_name> \ -o jsonpath='{.spec.containers[?(@.name=="prometheus")].image}') -- df -h /prometheus/- $ oc debug <prometheus_k8s_pod_name> -n openshift-monitoring \- 1 - --image=$(oc get po -n openshift-monitoring <prometheus_k8s_pod_name> \- 2 - -o jsonpath='{.spec.containers[?(@.name=="prometheus")].image}') -- df -h /prometheus/- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - 次の出力例は、 - prometheus-k8s-0Pod によって要求されるマウントされた PV に、63% の空き容量が残っていることを示しています。- 出力例 - Starting pod/prometheus-k8s-0-debug-j82w4 ... Filesystem Size Used Avail Use% Mounted on /dev/nvme0n1p4 40G 15G 40G 37% /prometheus Removing debug pod ... - Starting pod/prometheus-k8s-0-debug-j82w4 ... Filesystem Size Used Avail Use% Mounted on /dev/nvme0n1p4 40G 15G 40G 37% /prometheus Removing debug pod ...- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow