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 を提供できます。
手順
次のコマンドを実行して認証トークンを抽出します。
$ TOKEN=$(oc whoami -t)
次のコマンドを実行して、
alertmanager-main
API ルート URL を抽出します。$ HOST=$(oc -n openshift-monitoring get route alertmanager-main -ojsonpath={.status.ingress[].host})
次のコマンドを実行して、サービス API レシーバーに Alertmanager をクエリーします。
$ 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 を提供できます。
手順
次のコマンドを実行してベアラートークンを取得します。
$ TOKEN=$(oc whoami -t)
次のコマンドを実行して、Prometheus フェデレーションルート URL を取得します。
$ HOST=$(oc -n openshift-monitoring get route prometheus-k8s-federate -ojsonpath={.status.ingress[].host})
/federate
ルートからメトリクスをクエリーします。次のコマンド例は、up
メトリクスをクエリーします。$ curl -G -k -H "Authorization: Bearer $TOKEN" https://$HOST/federate --data-urlencode 'match[]=up'
出力例
# 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 に接続するための認証トークンを展開します。
$ TOKEN=$(oc whoami -t)
次のコマンドを実行して、
thanos-querier
API ルート URL を展開します。$ HOST=$(oc -n openshift-monitoring get route thanos-querier -ojsonpath={.status.ingress[].host})
次のコマンドを使用して、サービスが実行されている namespace に namespace を設定します。
$ NAMESPACE=ns1
次のコマンドを実行して、コマンドラインで独自のサービスのメトリクスに対してクエリーを実行します。
$ curl -H "Authorization: Bearer $TOKEN" -k "https://$HOST/api/v1/query?" --data-urlencode "query=up{namespace='$NAMESPACE'}"
出力には、Prometheus がスクレイピングしている各アプリケーション Pod のステータスが表示されます。
フォーマット済み出力例
{ "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 サービスのインスタントクエリーエンドポイントを要求します。
-
フォーマット済み出力例では、