このページでは、MongoDB Controllers for Kubernetes 演算子 を使用して管理する MongoDB Search とベクトル検索の配置をモニターする方法を説明します。mongot ポッド上では、次の可視化サーフェースが利用できます。
Prometheus 互換の
/metricsエンドポイント。/healthと/readyを公開するヘルスチェックエンドポイント。構造化された JSON ログがポッドの stdout および stderr に書き込まれます。
サポートと事後分析用のFTDC(Full-Time Diagnostic Data Capture)ファイル。
spec.clusters[].loadBalancer.managed を介して演算子マネージドロードバランサーを有効にすると、Kubernetes Operator は、独自の管理メトリクスサーフェースを公開する Envoy プロキシもプロビジョニングします。
このページで参照されている各 MongoDBSearch 設定の完全なスキーマについては、「MongoDB Search とベクトル検索の設定」を参照してください。特定のランタイムの問題を診断して解決するには、「mongot 配置のトラブルシューティング」を参照してください。
mongot ポッドとリソースのステータスをモニター
mongotの可用性を示す最も直接的なシグナルは、Pod の状態と MongoDBSearch リソースのステータスです。
ポッドの状態と再起動回数を確認します。
kubectl get pods -n <namespace> --context <context> | grep search
健康なmongot podは、すべてのコンテナが準備できており、再起動回数が増加しないRunning状態を報告します。再起動回数の増加は、メモリの圧力または構成エラーを示す可能性があります。詳細については、mongot配置のトラブルシューティングを参照してください。
MongoDBSearch リソースの状態と条件を調べます。
kubectl describe mongodbsearch <MongoDBSearch.metadata.name> \ -n <namespace> --context <context>
Prometheus メトリクスを有効にする
デフォルトでは、mongot Prometheus メトリクス エンドポイントは無効になっています。有効にするには、spec.observability.prometheus ブロックを MongoDBSearch リソースに追加します。空のブロックにより、デフォルト ポート 9946 でエンドポイントが有効になります。
spec: observability: prometheus: {}
デフォルト以外のポートを使用するには、spec.observability.prometheus.port を設定します。
spec: observability: prometheus: port: 9090
エンドポイントはポッド内部で公開され、設定されたポートでmongot コンテナのポッド IP を介してアクセスできます。Kubernetes Operator はメトリクス エンドポイントを認証しません。
Prometheus でのメトリクス収集
クラスターで Prometheus Operator が実行されている場合は、PodMonitor (ポッドごとのスクレイピングに推奨) または ServiceMonitor (サービスによってフロントエンドになっている場合) を使用してmongotメトリクス エンドポイントをスクレイピングします。Kubernetes 演算子が mongot ポッドに適用するラベルと一致させ、spec.observability.prometheus.portで構成したポートをターゲットにします。
Prometheus の ServiceMonitor を使用して MongoDB リソースを配置する例については、「Prometheus で使用するリソースの配置」を参照してください。
利用可能なメトリクス
mongot Prometheus サーフェースでは、次のカテゴリのメトリクスが公開されています。
JVM — ヒープメモリと非ヒープメモリ、ガーベージコレクションのカウントと一時停止時間、スレッドカウント、クラスローダーの状態。
システム —
mongotプロセスの CPU 使用率、システム メモリ、ディスク使用率、ネットワーク I/O。インデックス単位 — インデックス サイズ、Lucene ドキュメントとフィールドのカウント、インデックス ステータス、最終更新タイムスタンプ。
検索エンジン — クエリカウント、失敗したクエリカウント、クエリレイテンシヒストグラム。
メトリクスを Ops Manager に転送
メトリクスフォワーダーは、mongot メトリクスを MongoDB Ops Manager に送信し、他の配置メトリクスと一緒に表示できるようにします。Kubernetes 演算子は、フォワーダーを別の Kubernetes Deployment として配置します。この Kubernetes は、mongot メトリクスエンドポイントをスクレイピングし、メトリクスを MongoDB Ops Manager にプッシュします。
メトリクスフォワーダーには MongoDB Ops Manager 8.0.25 以降が必要ですが、Cloud Manager はサポートされていません。
フォワーダーを構成するには、MongoDBSearch リソースの spec.observability.metricsForwarder の下のフィールドを設定します。
modeKubernetes Operatorがフォワーダーを配置するかどうかを制御します。次のいずれかの値に設定します。auto(デフォルト)内部 MongoDB ソースの場合はフォワーダーを自動的に配置します。また、opsManagerを設定した場合は外部ソースの場合も自動的に配置します。enabled常にフォワーダーを配置します。disabledフォワーダーを配置しない。
opsManager.projectConfigMapRefMongoDB Ops Manager プロジェクト構成を保持する ConfigMap の名前を指定します。ConfigMap に次のキーを入力します。baseUrl: MongoDB Ops Manager インスタンスの URL。projectName: MongoDB Ops Managerプロジェクトの名前。orgId: MongoDB Ops Manager組織の ID。
opsManager.agentCredentialsOps Manager API キーを保持する Secret の名前。Secret に次のキーを入力します。publicKey: MongoDB Ops Manager APIキーの公開キー。privateKey。MongoDB Ops Manager API キーの秘密キー。
resourceRequirementsフォワーダー コンテナの CPU とメモリを設定します。
opsManagerを設定しない場合、Kubernetes 演算子はソース MongoDB リソースから Ops Manager 接続詳細を取得します。外部 MongoDB ソースの場合は、opsManagerを設定する必要があります。
spec: observability: metricsForwarder: mode: enabled opsManager: projectConfigMapRef: name: my-om-project-config agentCredentials: name: my-om-agent-api-key
Kubernetes 演算子は、 MongoDBSearch リソースの status.metricsForwarder の下にフォワーダーのステータスを報告します。
ログの冗長度の構成
mongot 構造化された JSON ログをコンテナの stdout ストリームと stderr ストリームに書き込みます。これにより、標準の Kubernetes ログ ツールで読み取ることができます。
kubectl logs statefulset/<MongoDBSearch.metadata.name>-search-0
ログをリアルタイムでストリームするには、--followフラグを追加します。再起動後に前のコンテナインスタンスからログを表示するには、--previousフラグを追加します。
ログの冗長を変更するには、MongoDBSearch リソースで spec.logLevel を設定します。有効な値は TRACE、DEBUG、INFO、WARN、ERROR です。省略すると、mongot は INFO でログを出力します。
spec: logLevel: DEBUG
mongot 自身のログをローテートしません。Kubernetes 配置では、ノード レベルでのログ ローテーションはコンテナ ランタイム(ほとんどのディストリビューションでは containerd または CRI-O)によって取り扱われます。ログを外部アグレゲータに転送する場合は、mongot プロセスではなく、そのシステムで保持を構成します。
ヘルスチェックエンドポイント
mongot ポッド内のポート 8080 で 2 つのエンドポイントを持つ HTTP ヘルスサーバーを公開します。
エンドポイント | 正常な応答 | 不健全な応答 |
|---|---|---|
|
|
|
|
|
|
エンドポイントには、mongot のスタートアップ、ライブネス、インデックスのレプリケーションの初期化が反映されます。エンドポイントを無効にすることはできません。
Kubernetes Operator は、/health と /ready を mongot コンテナのライブネス プローブとレディネス プローブに自動的に接続します。通常、これらのプローブを上書きする必要はありません。kubectl describe pod <mongot-pod> には、演算子によって適用されるプローブ構成が表示されます。
FTDC 診断
mongot Full-Time Diagnostic Data Capture (FTDC) ファイルを、ポッドのデータパスにマウントされた永続ボリュームの diagnostic.data/ サブディレクトリに書き込みます。FTDC はデフォルトで有効になっており、MongoDB サポートがパフォーマンスと安定性の問題を分類することを目的としています。
FTDC ファイルには、インデックスごとのサイズ計測、インデックスの作成とクエリのレイテンシ、リクエストカタログ統計、直列化レイテンシ、Lucene パフォーマンスカウンターなど、Prometheus の表面よりも高濃度のデータが含まれています。
サポート ケースの FTDC ファイルを収集するには、kubectl cp を使用して mongot ポッドから diagnostic.data/ ディレクトリをコピーします。
kubectl cp <mongot-pod>:/mongot/data/diagnostic.data ./mongot-ftdc
インポッドのマウントパスは、spec.clusters[].persistenceの構成に関わらず/mongot/dataに固定されています。持続性設定はマウントロケーションではなく、PVC サイズとストレージ クラスを制御します。
マネージド Envoy 可視性
spec.clusters[].loadBalancer.managed を設定すると、Kubernetes 演算子は mongot ポッドの前面に位置する Envoy L7 プロキシをプロビジョニングします。Envoy コンテナは 2 つの可視化サーフェースを公開します。
統計とランタイムコントロール (ログレベル、リスナードレインなど)用のポート
9901の管理エンドポイントとなる接続されたデバイス。演算子は管理インターフェースをパスの許可リストに制限します:/ready、/stats*、/drain_listeners、/logging*。このエンドポイントはkubectl port-forwardを使用したアドホックなトラブルシューティングに使用します。外部に公開することは意図されていません。標準の
/stats/prometheusパスの Envoy 管理ポートでのPrometheus メトリクス。このエンドポイントをmongotメトリクスとともにスクレイプして、リクエストフロー、アップストリームの状態、サーチトラフィックプレーンの接続状態についてエンドツーエンドの可視性を取得します。
演算子は、MongoDBSearchリソースのstatus.loadBalancer.phaseの下に高レベルのEnvoyステータスを報告します。
kubectl get mongodbsearch <name> -o jsonpath='{.status.loadBalancer.phase}'
フェーズは演算子マネージド Envoy Deployment ライフサイクルを反映します(例:Pending、Running、Failed)。