本页面介绍如何使用 MongoDB Controllers for Kubernetes 操作符 监控您托管的 MongoDB Search 和向量搜索部署。mongot pod 上提供以下可观测表面:
与 Prometheus 兼容的
/metrics终结点。曝露
/health和/ready的健康检查终结点。写入到 Pod 的 stdout 和 stderr 的结构化 JSON 日志。
用于支持和事后分析的 FTDC(全时诊断数据捕获)文件。
通过 spec.clusters[].loadBalancer.managed 启用操作符托管的负载均衡器时,Kubernetes 操作符还会预配 Envoy 代理,该代理会显示其自己的管理和指标界面。
有关此页面上提及的每个 MongoDBSearch 设置的完整模式,请参阅 MongoDB Search 和向量搜索设置。要诊断和解决特定的运行时间问题,请参阅 疑难排解 mongot 部署。
监控 mongot Pod 和资源状态
mongot 可用性的最直接信号是其 Pod 的状态和 MongoDBSearch 资源的状态。
检查 Pod 状态和重启计数:
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
终结点在 Pod 内部暴露,并可通过配置端口上的 mongot 容器的 Pod IP 访问。Kubernetes 操作符 不会验证指标终结点。
使用 Prometheus 抓取指标
如果集群运行 Prometheus 操作符,则使用 PodMonitor (推荐用于每个 pod 爬取)或 ServiceMonitor (当前端有服务时)从 mongot 指标终结点爬取数据。匹配 Kubernetes 操作符应用于 mongot pod 的标签,并定位到在 spec.observability.prometheus.port 中配置的端口。
有关使用 ServiceMonitor 部署 MongoDB 资源的示例,请参阅部署资源以供 Prometheus 使用。
可用指标
mongot Prometheus 界面公开以下类别的指标:
Java虚拟机(JVM) — 堆和非堆内存、垃圾回收计数和暂停时间、线程计数、类加载器状态。
系统 —
mongot进程的 CPU 使用率、系统内存、磁盘使用率、网络 I/O。每索引-索引大小、Lucene 文档和字段计数、索引状态、最后更新时间戳。
搜索引擎 — 查询计数、失败查询计数、查询延迟直方图。
将指标转发到 MongoDB Ops Manager
指标转发器将 mongot 指标发送到 MongoDB Ops Manager,以便您可以将其与其他部署指标一起查看。Kubernetes Operator 将转发器部署为单独的 Kubernetes Deployment,该单独的 Kubernetes 会抓取 mongot 指标终结点并将指标推送到 MongoDB Ops Manager。
指标转发器需要 MongoDB Ops Manager 8.0.25 或更高版本,不支持 Cloud Manager。
要配置转发器,请在 MongoDBSearch 资源上的 spec.observability.metricsForwarder 下设置以下字段:
mode控制 Kubernetes 操作符是否部署转发器。将其设置为以下值之一:auto(默认)会自动部署内部 MongoDB 源的转发器,并在设置opsManager时部署外部源的转发器。enabled始终部署转发器。disabled从不部署转发器。
opsManager.projectConfigMapRef命名包含 MongoDB Ops Manager 项目配置的 ConfigMap。使用以下密钥填充 ConfigMap:baseUrl: MongoDB Ops Manager 实例的 URL。projectName: Ops Manager 项目的名称。orgId: MongoDB Ops Manager 组织的 ID。
opsManager.agentCredentials命名保存 Ops Manager API 密钥的 Secret。使用以下密钥填充 Secret:publicKey: Ops Manager API 密钥的公钥。privateKey: Ops Manager API 密钥的私钥。
resourceRequirements设置转发器容器的 CPU 和内存。
如果未设置 opsManager,Kubernetes 操作符将从源 MongoDB 资源衍生 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 上曝露带有两个终结点的 HTTP 健康服务器:
端点 | 健康响应 | 不健康响应 |
|---|---|---|
|
|
|
|
|
|
终结点反映 mongot 启动、活跃性和索引复制的初始化。终结点不能被禁用。
Kubernetes 操作符会自动将 /health 和 /ready 连接到 mongot 容器的活蹦检查和就绪检查。您通常无需要覆盖这些检查;kubectl describe pod <mongot-pod> 显示了操作符应用的检查配置。
FTDC 诊断
mongot 将全时诊断数据捕获 (FTDC) 文件写入挂载在 Pod 数据路径下 diagnostic.data/ 子目录中的持久卷。FTDC 在默认情况下启用,旨在协助 MongoDB 支持团队分类性能和稳定性问题。
FTDC 文件包含的关联基数高于 Prometheus 表面,包括每索引大小、索引和查询的延迟分解、请求目录统计信息、序列化延迟和 Lucene 性能计数器。
要为支持用例收集 FTDC 文件,请使用 kubectl cp 从 mongot 实例复制 diagnostic.data/ 目录:
kubectl cp <mongot-pod>:/mongot/data/diagnostic.data ./mongot-ftdc
无论 spec.clusters[].persistence 配置如何,Pod 内的挂载路径固定为 /mongot/data。持久化设置控制 PVC 大小和存储类,而不是挂载位置。
托管的 Envoy 可观测性
当您设置 spec.clusters[].loadBalancer.managed 时,Kubernetes 操作符预配一个 Envoy L7 代理,该代理作为 mongot 容器组的前端。Envoy 容器暴露两个可观测表面:
用于统计信息和运行时控制(日志级别、监听器排空)的端口
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)。