5.3. CLI を使用した API のモニタリング
OpenShift Container Platform では、コマンドラインインターフェイス (CLI) から一部のモニタリングコンポーネントの Web サービス API にアクセスできます。
特定の状況では、特にエンドポイントを使用して大量のメトリクスデータを取得、送信、またはクエリーする場合、API エンドポイントにアクセスするとクラスターのパフォーマンスとスケーラビリティーが低下する可能性があります。
この問題を回避するには、次の推奨事項を考慮してください。
- エンドポイントに頻繁にクエリーを実行しないようにします。クエリーを 30 秒ごとに最大 1 つに制限します。
-
Prometheus の
/federate
エンドポイントを介してすべてのメトリクスデータを取得しないでください。このエンドポイントにクエリーを実行するのは、集約された限られたデータセットを取得する場合だけにしてください。たとえば、各要求で 1,000 未満のサンプルを取得すると、パフォーマンスが低下するリスクを最小限に抑えることができます。
5.3.1. モニタリング Web サービス API へのアクセスについて
次の監視スタックコンポーネントのコマンドラインから Web サービス API エンドポイントに直接アクセスできます。
- Prometheus
- Alertmanager
- Thanos Ruler
- Thanos Querier
Thanos Ruler および Thanos Querier サービス API にアクセスするには、要求元のアカウントが namespace リソースに対するアクセス許可を get
している必要があります。これは、アカウントに cluster-monitoring-view
クラスターロールをバインドして付与することで実行できます。
モニタリングコンポーネントの Web サービス API エンドポイントにアクセスする場合は、以下の制限事項に注意してください。
- Bearer Token 認証のみを使用して API エンドポイントにアクセスできます。
-
ルートの
/api
パスのエンドポイントにのみアクセスできます。Web ブラウザーで API エンドポイントにアクセスしようとすると、Application is not available
エラーが発生します。Web ブラウザーでモニタリング機能にアクセスするには、OpenShift Container Platform Web コンソールを使用して、モニタリングダッシュボードを確認します。
5.3.2. 監視 Web サービス API へのアクセス
次の例は、コアプラットフォームの監視で使用される Alertmanager サービスのサービス API レシーバーをクエリーする方法を示しています。同様の方法を使用して、コアプラットフォーム Prometheus の prometheus-k8s
サービスと Thanos Ruler の thanos-ruler
サービスにアクセスできます。
前提条件
-
openshift-monitoring
namespace のmonitoring-alertmanager-edit
ロールにバインドされているアカウントにログインしている。 Alertmanager API ルートを取得する権限を持つアカウントにログインしている。
注記アカウントに Alertmanager API ルートの取得権限がない場合、クラスター管理者はルートの URL を提供できます。
手順
次のコマンドを実行して認証トークンを抽出します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TOKEN=$(oc whoami -t)
$ TOKEN=$(oc whoami -t)
次のコマンドを実行して、
alertmanager-main
API ルート URL を抽出します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath='{.status.ingress[].host}')
$ HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath='{.status.ingress[].host}')
次のコマンドを実行して、サービス API レシーバーに Alertmanager をクエリーを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" -k "https://$HOST/api/v2/receivers"
$ curl -H "Authorization: Bearer $TOKEN" -k "https://$HOST/api/v2/receivers"
5.3.3. Prometheus のフェデレーションエンドポイントを使用したメトリクスのクエリー
Prometheus のフェデレーションエンドポイントを使用して、クラスターの外部のネットワークの場所からプラットフォームとユーザー定義のメトリクスを収集できます。これを実行するには、OpenShift Container Platform ルートを使用してクラスターの Prometheus /federate
エンドポイントにアクセスします。
メトリクスデータの取得の遅延は、フェデレーションを使用すると発生します。この遅延は、収集されたメトリクスの精度とタイムラインに影響を与えます。
フェデレーションエンドポイントを使用すると、特にフェデレーションエンドポイントを使用して大量のメトリクスデータを取得する場合に、クラスターのパフォーマンスおよびスケーラビリティーを低下させることもできます。これらの問題を回避するには、以下の推奨事項に従ってください。
- Prometheus のフェデレーションエンドポイントを介してすべてのメトリクスデータを取得しようとしないでください。制限された集約されたデータセットを取得する場合のみ、クエリーを実行します。たとえば、各要求で 1,000 未満のサンプルを取得すると、パフォーマンスが低下するリスクを最小限に抑えることができます。
- Prometheus のフェデレーションエンドポイントに対して頻繁にクエリーすることは避けてください。クエリーを 30 秒ごとに最大 1 つに制限します。
クラスター外に大量のデータを転送する必要がある場合は、代わりにリモート書き込みを使用します。詳細は、リモート書き込みストレージの設定 セクションを参照してください。
前提条件
-
OpenShift CLI (
oc
) がインストールされている。 cluster-monitoring-view
クラスターロールを持つユーザーとしてクラスターにアクセスできるか、namespace
リソースのget
権限を持つベアラートークンを取得している。注記Prometheus フェデレーションエンドポイントへのアクセスには、ベアラートークン認証のみを使用できます。
Prometheus フェデレーションルートを取得する権限を持つアカウントにログインしている。
注記アカウントに Prometheus フェデレーションルートを取得する権限がない場合、クラスター管理者はルートの URL を提供できます。
手順
次のコマンドを実行してベアラートークンを取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TOKEN=$(oc whoami -t)
$ TOKEN=$(oc whoami -t)
次のコマンドを実行して、Prometheus フェデレーションルート URL を取得します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOST=$(oc -n openshift-monitoring get route prometheus-k8s-federate -ojsonpath='{.status.ingress[].host}')
$ HOST=$(oc -n openshift-monitoring get route prometheus-k8s-federate -ojsonpath='{.status.ingress[].host}')
/federate
ルートからメトリクスをクエリーを実行します。次のコマンド例は、up
メトリクスをクエリーを実行します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -G -k -H "Authorization: Bearer $TOKEN" https://$HOST/federate --data-urlencode 'match[]=up'
$ curl -G -k -H "Authorization: Bearer $TOKEN" https://$HOST/federate --data-urlencode 'match[]=up'
出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TYPE up untyped
# TYPE up untyped up{apiserver="kube-apiserver",endpoint="https",instance="10.0.143.148:6443",job="apiserver",namespace="default",service="kubernetes",prometheus="openshift-monitoring/k8s",prometheus_replica="prometheus-k8s-0"} 1 1657035322214 up{apiserver="kube-apiserver",endpoint="https",instance="10.0.148.166:6443",job="apiserver",namespace="default",service="kubernetes",prometheus="openshift-monitoring/k8s",prometheus_replica="prometheus-k8s-0"} 1 1657035338597 up{apiserver="kube-apiserver",endpoint="https",instance="10.0.173.16:6443",job="apiserver",namespace="default",service="kubernetes",prometheus="openshift-monitoring/k8s",prometheus_replica="prometheus-k8s-0"} 1 1657035343834 ...
5.3.4. カスタムアプリケーションに関するクラスター外からのメトリクスへのアクセス
ユーザー定義プロジェクトを使用して独自のサービスを監視する場合は、クラスターの外部から Prometheus メトリクスをクエリーできます。このデータには、thanos-querier
ルートを使用してクラスターの外部からアクセスします。
このアクセスは、認証に Bearer Token を使用することのみをサポートします。
前提条件
- 「ユーザー定義プロジェクトのモニタリングの有効化」の手順に従い、独自のサービスをデプロイしている。
-
Thanos Querier API へのアクセス権限を持つ
cluster-monitoring-view
クラスターロールでアカウントにログインしている。 Thanos Querier API ルートの取得権限を持つアカウントにログインしています。
注記アカウントに Thanos Querier API ルートの取得権限がない場合、クラスター管理者はルートの URL を提供できます。
手順
次のコマンドを実行して、Prometheus に接続するための認証トークンを展開します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow TOKEN=$(oc whoami -t)
$ TOKEN=$(oc whoami -t)
次のコマンドを実行して、
thanos-querier
API ルート URL を展開します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow HOST=$(oc -n openshift-monitoring get route thanos-querier -ojsonpath='{.status.ingress[].host}')
$ HOST=$(oc -n openshift-monitoring get route thanos-querier -ojsonpath='{.status.ingress[].host}')
次のコマンドを使用して、サービスが実行されている namespace に namespace を設定します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NAMESPACE=ns1
$ NAMESPACE=ns1
次のコマンドを実行して、コマンドラインで独自のサービスのメトリクスに対してクエリーを実行します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow curl -H "Authorization: Bearer $TOKEN" -k "https://$HOST/api/v1/query?" --data-urlencode "query=up{namespace='$NAMESPACE'}"
$ curl -H "Authorization: Bearer $TOKEN" -k "https://$HOST/api/v1/query?" --data-urlencode "query=up{namespace='$NAMESPACE'}"
出力には、Prometheus がスクレイピングしている各アプリケーション Pod のステータスが表示されます。
フォーマット済み出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow { "status": "success", "data": { "resultType": "vector", "result": [ { "metric": { "__name__": "up", "endpoint": "web", "instance": "10.129.0.46:8080", "job": "prometheus-example-app", "namespace": "ns1", "pod": "prometheus-example-app-68d47c4fb6-jztp2", "service": "prometheus-example-app" }, "value": [ 1591881154.748, "1" ] } ], } }
{ "status": "success", "data": { "resultType": "vector", "result": [ { "metric": { "__name__": "up", "endpoint": "web", "instance": "10.129.0.46:8080", "job": "prometheus-example-app", "namespace": "ns1", "pod": "prometheus-example-app-68d47c4fb6-jztp2", "service": "prometheus-example-app" }, "value": [ 1591881154.748, "1" ] } ], } }
注記-
フォーマット済み出力例では、
jq
などのフィルタリングツールを使用して、フォーマット済みのインデントされた JSON を出力しています。jq
の使用に関する詳細は、jq Manual (jq ドキュメント) を参照してください。 - このコマンドは、ある時点でセレクターを評価する Thanos Querier サービスのインスタントクエリーエンドポイントを要求します。
-
フォーマット済み出力例では、
5.3.5. Cluster Monitoring Operator のリソースリファレンス
このドキュメントでは、Cluster Monitoring Operator (CMO) によってデプロイおよび管理される次のリソースを説明します。
メトリクスデータを取得、送信、または照会するために API エンドポイント接続を設定する場合は、この情報を使用します。
特定の状況では、特にエンドポイントを使用して大量のメトリクスデータを取得、送信、またはクエリーする場合、エンドポイントにアクセスするとクラスターのパフォーマンスとスケーラビリティーが低下する可能性があります。
これらの問題を回避するには、以下の推奨事項に従ってください。
- エンドポイントに頻繁にクエリーを実行しないようにします。クエリーを 30 秒ごとに最大 1 つに制限します。
-
/federate
エンドポイントを介してすべてのメトリクスデータを取得しようとしないでください。制限された集約されたデータセットを取得する場合のみ、クエリーを実行します。たとえば、各要求で 1,000 未満のサンプルを取得すると、パフォーマンスが低下するリスクを最小限に抑えることができます。
5.3.5.1. CMO ルートリソース
5.3.5.1.1. openshift-monitoring/alertmanager-main
ルーター経由で alertmanager-main
サービスの /api
エンドポイントを公開します。
5.3.5.1.2. openshift-monitoring/prometheus-k8s
ルーター経由で prometheus-k8s
サービスの /api
エンドポイントを公開します。
5.3.5.1.3. openshift-monitoring/prometheus-k8s-federate
ルーター経由で prometheus-k8s
サービスの /federate
エンドポイントを公開します。
5.3.5.1.4. openshift-user-workload-monitoring/federate
ルーター経由で prometheus-user-workload
サービスの /federate
エンドポイントを公開します。
5.3.5.1.5. openshift-monitoring/thanos-querier
ルーター経由で thanos-querier
サービスの /api
エンドポイントを公開します。
5.3.5.1.6. openshift-user-workload-monitoring/thanos-ruler
ルーター経由で thanos-ruler
サービスの /api
エンドポイントを公開します。
5.3.5.2. CMO サービスリソース
5.3.5.2.1. openshift-monitoring/prometheus-operator-admission-webhook
ポート 8443 で PrometheusRules
および AlertmanagerConfig
カスタムリソースを検証する受付 Webhook サービスを公開します。
5.3.5.2.2. openshift-user-workload-monitoring/alertmanager-user-workload
次のポートでクラスター内のユーザー定義の Alertmanager Web サーバーを公開します。
-
ポート 9095 は Alertmanager エンドポイントへのアクセスを提供します。アクセスを許可するには、
openshift-user-workload-monitoring
プロジェクトのmonitoring-alertmanager-api-reader
ロール (読み取り専用操作の場合) またはmonitoring-alertmanager-api-writer
ロールにユーザーをバインドする必要があります。 -
ポート 9092 は、特定のプロジェクトに制限された Alertmanager エンドポイントへのアクセスを提供します。アクセスを許可するには、ユーザーをプロジェクト内の
monitoring-rules-edit
クラスターロールまたはmonitoring-edit
クラスターロールにバインドする必要があります。 -
ポート 9097 は、
/metrics
エンドポイントへのアクセスのみを提供します。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.3. openshift-monitoring/alertmanager-main
次のポートでクラスター内の Alertmanager Web サーバーを公開します。
-
ポート 9094 は、すべての Alertmanager エンドポイントへのアクセスを提供します。アクセスを許可するには、ユーザーを
openshift-monitoring
プロジェクトのmonitoring-alertmanager-view
ロール (読み取り専用操作の場合) またはmonitoring-alertmanager-edit
ロールにバインドする必要があります。 -
ポート 9092 は、特定のプロジェクトに制限された Alertmanager エンドポイントへのアクセスを提供します。アクセスを許可するには、ユーザーをプロジェクト内の
monitoring-rules-edit
クラスターロールまたはmonitoring-edit
クラスターロールにバインドする必要があります。 -
ポート 9097 は、
/metrics
エンドポイントへのアクセスのみを提供します。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.4. openshift-monitoring/kube-state-metrics
次のポートでクラスター内の kube-state-metrics /metrics
エンドポイントを公開します。
- ポート 8443 は、Kubernetes リソースメトリクスへのアクセスを提供します。このポートは内部使用のためであり、他の用途では保証されません。
- ポート 9443 は、内部 kube-state-metrics メトリクスへのアクセスを提供します。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.5. openshift-monitoring/metrics-server
ポート 443 でメトリクス metrics-server Web サーバーを公開します。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.6. openshift-monitoring/monitoring-plugin
モニタリングプラグインサービスをポート 9443 で公開します。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.7. openshift-monitoring/node-exporter
ポート 9100 で /metrics
エンドポイントを公開します。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.8. openshift-monitoring/openshift-state-metrics
次のポートでクラスター内の openshift-state-metrics /metrics
エンドポイントを公開します。
- ポート 8443 は OpenShift リソースメトリクスへのアクセスを提供します。このポートは内部使用のためであり、他の用途では保証されません。
-
ポート 9443 は、内部
openshift-state-metrics
メトリクスへのアクセスを提供します。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.9. openshift-monitoring/prometheus-k8s
クラスター内の Prometheus Web サーバーを次のポートで公開します。
-
ポート 9091 は、すべての Prometheus エンドポイントへのアクセスを提供します。アクセスを許可するには、ユーザーを
cluster-monitoring-view
クラスターロールにバインドする必要があります。 -
ポート 9092 は、
/metrics
および/federate
エンドポイントへのアクセスのみを提供します。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.10. openshift-user-workload-monitoring/prometheus-operator
ポート 8443 で /metrics
エンドポイントを公開します。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.11. openshift-monitoring/prometheus-operator
ポート 8443 で /metrics
エンドポイントを公開します。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.12. openshift-user-workload-monitoring/prometheus-user-workload
クラスター内の Prometheus Web サーバーを次のポートで公開します。
-
ポート 9091 は、
/metrics
エンドポイントへのアクセスのみを提供します。このポートは内部使用のためであり、他の用途では保証されません。 -
ポート 9092 は
/federate
エンドポイントへのアクセスのみを提供します。アクセスを許可するには、ユーザーをcluster-monitoring-view
クラスターロールにバインドする必要があります。
これにより、ポート 10902 上の Thanos サイドカー Web サーバーの /metrics
エンドポイントも公開されます。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.13. openshift-monitoring/telemeter-client
ポート 8443 で /metrics
エンドポイントを公開します。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.14. openshift-monitoring/thanos-querier
次のポートでクラスター内の Thanos Querier Web サーバーを公開します。
-
ポート 9091 は、すべての Thanos Querier エンドポイントへのアクセスを提供します。アクセスを許可するには、ユーザーを
cluster-monitoring-view
クラスターロールにバインドする必要があります。 -
ポート 9092 は、特定のプロジェクトに制限された
/api/v1/query
、/api/v1/query_range/
、/api/v1/labels
、/api/v1/label/*/values
、および/api/v1/series
エンドポイントへのアクセスを提供します。アクセスを許可するには、ユーザーをプロジェクト内のview
クラスターロールにバインドする必要があります。 -
ポート 9093 は、特定のプロジェクトに制限された
/api/v1/alerts
および/api/v1/rules
エンドポイントへのアクセスを提供します。アクセスを許可するには、ユーザーをプロジェクトのmonitoring-rules-edit
、monitoring-edit
、またはmonitoring-rules-view
クラスターロールにバインドする必要があります。 -
ポート 9094 は、
/metrics
エンドポイントへのアクセスのみを提供します。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.15. openshift-user-workload-monitoring/thanos-ruler
次のポートでクラスター内の Thanos Ruler Web サーバーを公開します。
-
ポート 9091 は、すべての Thanos Ruler エンドポイントへのアクセスを提供します。アクセスを許可するには、ユーザーを
cluster-monitoring-view
クラスターロールにバインドする必要があります。 -
ポート 9092 は
/metrics
エンドポイントへのアクセスのみを提供します。このポートは内部使用のためであり、他の用途では保証されません。
これにより、ポート 10901 上の gRPC エンドポイントも公開されます。このポートは内部使用のためであり、他の用途では保証されません。
5.3.5.2.16. openshift-monitoring/cluster-monitoring-operator
ポート 8443 で /metrics
エンドポイントを公開します。このポートは内部使用のためであり、他の用途では保証されません。