7.11. モニタリング関連の問題の調査
OpenShift Container Platform には、コアプラットフォームコンポーネントのモニタリングを提供する事前に設定され、事前にインストールされた自己更新型のモニタリングスタックが含まれます。OpenShift Container Platform 4.12 では、クラスター管理者はオプションでユーザー定義プロジェクトのモニタリングを有効にできます。
独自のメトリクスが利用できない場合や、Prometheus が多くのディスク領域を消費している場合、以下の手順を実行できます。
7.11.1. ユーザー定義のメトリクスが利用できない理由の調査
ServiceMonitor
リソースを使用すると、ユーザー定義プロジェクトでサービスによって公開されるメトリクスの使用方法を判別できます。ServiceMonitor
リソースを作成している場合で、メトリクス UI に対応するメトリクスが表示されない場合は、この手順で説明されるステップを実行します。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。 - ユーザー定義のワークロードのモニタリングを有効にし、設定している。
-
user-workload-monitoring-config
ConfigMap
オブジェクトを作成している。 -
ServiceMonitor
リソースを作成している。
手順
サービスおよび
ServiceMonitor
リソース設定で、対応するラベルの一致を確認 します。サービスに定義されたラベルを取得します。以下の例では、
ns1
プロジェクトのprometheus-example-app
サービスをクエリーします。$ oc -n ns1 get service prometheus-example-app -o yaml
出力例
labels: app: prometheus-example-app
ServiceMonitor
リソース設定のmatchLabels
app
ラベルが直前のステップのラベルの出力と一致することを確認します。$ oc -n ns1 get servicemonitor prometheus-example-monitor -o yaml
出力例
spec: endpoints: - interval: 30s port: web scheme: http selector: matchLabels: app: prometheus-example-app
注記プロジェクトの表示パーミッションを持つ開発者として、サービスおよび
ServiceMonitor
リソースラベルを確認できます。
openshift-user-workload-monitoring
プロジェクトの Prometheus Operator のログを検査します。openshift-user-workload-monitoring
プロジェクトの Pod を一覧表示します。$ oc -n openshift-user-workload-monitoring get pods
出力例
NAME READY STATUS RESTARTS AGE prometheus-operator-776fcbbd56-2nbfm 2/2 Running 0 132m prometheus-user-workload-0 5/5 Running 1 132m prometheus-user-workload-1 5/5 Running 1 132m thanos-ruler-user-workload-0 3/3 Running 0 132m thanos-ruler-user-workload-1 3/3 Running 0 132m
prometheus-operator
Pod のprometheus-operator
コンテナーからログを取得します。以下の例では、Pod はprometheus-operator-776fcbbd56-2nbfm
になります。$ oc -n openshift-user-workload-monitoring logs prometheus-operator-776fcbbd56-2nbfm -c prometheus-operator
サービスモニターに問題がある場合、ログには以下のようなエラーが含まれる可能性があります。
level=warn ts=2020-08-10T11:48:20.906739623Z caller=operator.go:1829 component=prometheusoperator msg="skipping servicemonitor" error="it accesses file system via bearer token file which Prometheus specification prohibits" servicemonitor=eagle/eagle namespace=openshift-user-workload-monitoring prometheus=user-workload
OpenShift Container Platform Web コンソール UI の Metrics targets ページで、エンドポイントのターゲットステータスを確認 します。
- OpenShift Container Platform の Web コンソールにログインし、管理者 パースペクティブの Observe → Targets に移動します。
- リストでメトリクスのエンドポイントを探し、Status 列でターゲットのステータスを確認します。
- Status が Down の場合、エンドポイントの URL をクリックすると、そのメトリクスターゲットの Target Details ページで詳細情報を見ることができます。
openshift-user-workload-monitoring
プロジェクトで Prometheus Operator のデバッグレベルのロギングを設定 します。openshift-user-workload-monitoring
プロジェクトでuser-workload-monitoring-config
ConfigMap
オブジェクトを編集します。$ oc -n openshift-user-workload-monitoring edit configmap user-workload-monitoring-config
prometheusOperator
のlogLevel: debug
をdata/config.yaml
に追加し、ログレベルをdebug
に設定します。apiVersion: v1 kind: ConfigMap metadata: name: user-workload-monitoring-config namespace: openshift-user-workload-monitoring data: config.yaml: | prometheusOperator: logLevel: debug
変更を適用するためにファイルを保存します。
注記openshift-user-workload-monitoring
プロジェクトのprometheus-operator
は、ログレベルの変更時に自動的に再起動します。debug
ログレベルがopenshift-user-workload-monitoring
プロジェクトのprometheus-operator
デプロイメントに適用されていることを確認します。$ oc -n openshift-user-workload-monitoring get deploy prometheus-operator -o yaml | grep "log-level"
出力例
- --log-level=debug
debug レベルのロギングにより、Prometheus Operator によって行われるすべての呼び出しが表示されます。
prometheus-operator
Pod が実行されていることを確認します。$ oc -n openshift-user-workload-monitoring get pods
注記認識されない Prometheus Operator の
loglevel
値が設定マップに含まれる場合、prometheus-operator
Pod が正常に再起動されない可能性があります。-
デバッグログを確認し、Prometheus Operator が
ServiceMonitor
リソースを使用しているかどうかを確認します。ログで他の関連するエラーの有無を確認します。
関連情報
- ユーザー定義のワークロードモニタリング設定マップの作成
- サービスモニターまたは Pod モニターの作成方法に関する詳細は、Specifying how a service is monitored を参照してください。
- Administrator パースペクティブでメトリクスターゲットにアクセスする を参照してください。
7.11.2. Prometheus が大量のディスク領域を消費している理由の特定
開発者は、キーと値のペアの形式でメトリクスの属性を定義するためにラベルを作成できます。使用できる可能性のあるキーと値のペアの数は、属性について使用できる可能性のある値の数に対応します。数が無制限の値を持つ属性は、バインドされていない属性と呼ばれます。たとえば、customer_id
属性は、使用できる値が無限にあるため、バインドされていない属性になります。
割り当てられるキーと値のペアにはすべて、一意の時系列があります。ラベルに多数のバインドされていない値を使用すると、作成される時系列の数が指数関数的に増加する可能性があります。これは Prometheus のパフォーマンスに影響する可能性があり、多くのディスク領域を消費する可能性があります。
Prometheus が多くのディスクを消費する場合、以下の手段を使用できます。
- 収集される 収集サンプルの数を確認 します。
- Prometheus HTTP API を使用して時系列データベース (TSDB) の状態を確認して、どのラベルが最も多くの時系列を作成しているかについての詳細情報を得ることができます。これを実行するには、クラスター管理者権限が必要です。
ユーザー定義メトリクスに割り当てられるバインドされていない属性の数を減らすことで、作成される一意の時系列の数を減らします。
注記使用可能な値の制限されたセットにバインドされる属性を使用すると、可能なキーと値のペアの組み合わせの数が減ります。
- ユーザー定義プロジェクト間で 収集可能なサンプル数の数に制限を適用します。これには、クラスター管理者の権限が必要です。
前提条件
-
cluster-admin
ロールを持つユーザーとしてクラスターにアクセスできる。 -
OpenShift CLI (
oc
) がインストールされている。
手順
- Administrator パースペクティブで、Observe → Metrics に移動します。
Expression フィールドで、以下の Prometheus Query Language (PromQL) クエリーを実行します。これにより、収集サンプルの数が最も多い 10 メトリクスが返されます。
topk(10,count by (job)({__name__=~".+"}))
予想されるよりも多くの収集サンプルを持つメトリクスに割り当てられたバインドされていないラベル値の数を調査します。
- メトリクスがユーザー定義のプロジェクトに関連する場合、ワークロードに割り当てられたメトリクスのキーと値のペアを確認します。これらのライブラリーは、アプリケーションレベルで Prometheus クライアントライブラリーを使用して実装されます。ラベルで参照されるバインドされていない属性の数の制限を試行します。
- メトリクスが OpenShift Container Platform のコアプロジェクトに関連する場合、Red Hat サポートケースを Red Hat カスタマーポータル で作成してください。
クラスター管理者として以下のコマンドを実行して、Prometheus HTTP API を使用して TSDB ステータスを確認します。
$ oc login -u <username> -p <password>
$ host=$(oc -n openshift-monitoring get route prometheus-k8s -ojsonpath={.spec.host})
$ token=$(oc whoami -t)
$ curl -H "Authorization: Bearer $token" -k "https://$host/api/v1/status/tsdb"
出力例
"status": "success",
関連情報
- 収集サンプルの制限を設定し、関連するアラートルールを作成する方法についての詳細は、ユーザー定義プロジェクトの収集サンプル制限の設定 を参照してください。