mongot 暴露两个在主机诊断界面,可帮助您诊断 MongoDB Search 和 MongoDB 向量搜索的问题:
日志:
mongot活动的人可读记录,包括警告和错误。FTDC(全时诊断数据捕获):每秒捕获详细内部状态的二进制诊断流,用于支持交接。
使用日志调查事件,并在准备 MongoDB 支持案例时捕获两个界面。
日志
mongot 日志记录过程活动,包括警告和错误。使用日志验证启动完成、监控稳态状态健康并调查故障。
日志目标
mongot 写入日志的位置取决于您的部署类型:
部署类型 | 默认目的地 |
|---|---|
Linux tarball |
|
容器 |
|
|
|
Kubernetes Operator |
|
日志详细程度
mongot 配置文件中指定的 logging.verbosity 选项接受以下级别:
等级 | 何时使用 |
|---|---|
| 当您调查特定故障时。将此级别保持几小时,而不是几天。 |
| 很少适用于生产,因为会丧失 |
| 默认.适用于生产。 |
| 仅限工程和支持深入探讨。非常详细。 |
| 当您需要减少日志量并对错误进行单独报警时。 |
mongot 在启动时读取详细程度。要更改它,请重启 mongot。
日志格式
mongot 发出结构化 JSON 日志,每行一个 JSON 对象。此格式将 mongot 日志与 mongod 结构化日志记录格式对齐。
每个 mongot 日志条目都包括 t、s、svc、ctx、n、msg 等字段,以及可选的 attr。示例:
{"t":"2026-06-22T14:03:41.582+0000","s":"INFO","svc":"MONGOT","ctx":"indexing-lifecycle-0","n":"com.xgen.mongot.replication.mongodb.initialsync.BufferlessInitialSyncManager","msg":"Beginning initial sync.","attr":{"startTime":"2026-06-22T14:03:41.582+0000","indexGenerationId":"6857f3b6e4b04c2a9d1f0a12-f6-u0-a0"}}
每个日志对象包含以下字段:
字段 | 说明 |
|---|---|
| UTC 和 ISO-8601 格式的时间戳。 |
| 严重性。以下之一: |
| 发出条目的服务,例如 |
| 执行上下文,例如线程或任务名称。 |
| 记录器名称。 |
| 人类可读消息。 |
| 可选的事件特定结构化属性,例如 |
初创企业时要注意什么
健康的 mongot 启动会在默认 INFO 详细程度下发出一系列可识别事件。查找这些事件而不是特定的字符串:
事件 | 消息文本 |
|---|---|
索引的初始同步开始 |
|
初始同步队列活动 |
|
启动时的基于磁盘的重启检查 |
|
shutdown |
|
启动时存在其他信息行。上述事件是验证的承载事件。
以下指示表明启动未完成:
指示器 | 操作 |
|---|---|
即使集群已索引集合,也未出现 | 查看早期日志,以查找身份验证或复制 URI 错误。 |
事件 | 要进行修复,请参阅 疑难排查自管理 mongot 部署。 |
| 检查 |
稳态状态下的注意事项
在稳定状态下,健康的日志大多数时候是静默的。预计会收到来自背景任务(如合并和 FTDC 跳动)的周期信息消息,以及暂时客户端行为的偶尔 WARN 条目。不要预计 ERROR 或 Exception 条目。
以下稳态日志模式值得关注:
模式 | 含义 |
|---|---|
|
|
| oplog 在 |
|
|
文档映射爆炸 | 索引遇到的文档包含的字段过多,这通常是由于开启了动态映射,导致文档具有任意密钥。索引可能会停滞,或 |
要将这些模式映射到修复程序,请参阅 自管理 mongot 部署的疑难排查。
搜索日志
由于 mongot 日志是 JSON,因此 jq 是搜索它们的最自然工具。以下示例显示了常见查询:
# All errors jq 'select(.s == "ERROR")' mongot.log # Initial sync activity jq 'select(.msg | startswith("Beginning initial sync"))' mongot.log # Replication or sync from specific loggers jq 'select(.n | test("BufferlessInitialSyncManager|InitialSyncQueue|InitialSyncManager"))' mongot.log # Resync events jq 'select(.msg | test("requiring resync|InitialSyncException|SteadyStateException"))' mongot.log # Connection-pool churn jq 'select(.msg | test("Dropping all pooled connections|ShutdownInProgress"))' mongot.log # Embedding-related entries jq 'select(.msg | test("embedding|voyage"; "i"))' mongot.log
由于 JSON 是单行的,因此 grep 也可以使用:
grep '"s":"ERROR"' mongot.log grep '"msg":"Beginning initial sync\.' mongot.log grep -E '"n":"[^"]*(BufferlessInitialSyncManager|InitialSyncQueue)' mongot.log
对于 Elasticsearch、Splunk 和 DataDog 等日志平台,请对 s:ERROR、n:<logger> 或 attr.<key> 而不是文本进行过滤器。字段是稳定的,但全文模式可能会在不同版本之间移动。
对于运行多个 mongot 实例的部署,请在日志转发标签中包含实例标识符,以便您可以按实例进行过滤。
日志分析提示
分析 mongot 日志时,请记住以下几点:
日志并不总是在消息中包含索引名称。对于索引失败,相关日志行可能会在同一日志记录上下文中提前或推迟几行出现。捕获一个窗口,而不是单行。
在同一时间窗口中,将
mongot日志与mongod日志交叉引用。许多mongot错误都是mongod事件的下游。如果您打开 MongoDB 支持用例,请发送完整的日志文件或宽时间窗口,而不是过滤的
ERROR行集。
FTDC
FTDC 是一个二进制诊断流,每秒将详细内部状态捕获到磁盘。FTDC 是 MongoDB 技术服务团队用于诊断 mongot 问题的标准文物。
FTDC 包含的内容
FTDC 样本包含与 Prometheus 指标相同类别的数据,以及 mongot 不对外暴露的内部状态:
进程和 Java虚拟机(JVM)状态,包括堆、垃圾回收和线程
每个索引的索引统计信息
每个操作符的查询延迟
复制状态和 oplog 位置
执行程序池状态
Lucene 合并和缓存状态
配置和生命周期事件
连接池状态
FTDC 文件位置
默认情况下,mongot 会将 FTDC 文件写入 <storage.dataPath>/diagnostic.data/,这与 mongod 与 <storage.dbPath>/diagnostic.data/ 一起使用的规则相同。
对于 mongot 实例(其中 storage.dataPath 设置为 /var/lib/mongot),FTDC 文件位于 /var/lib/mongot/diagnostic.data/。
mongot 使用时间戳命名文件,并自动轮换这些文件。文件大小通常为:
每个文件几百 KB
负载下每小时几个文件
每个
mongot实例每天大约 1 GB,具体取决于负载
磁盘上 FTDC 存档目录的总大小受 advancedConfigs.ftdc.directorySizeMb 限制。
重要
mongot 自动轮换 FTDC 文件。事件发生时请勿手动删除 FTDC 文件。MongoDB 支持团队在诊断问题时会请求 FTDC 文件。
配置 FTDC
FTDC 默认处于启用状态。要覆盖默认值,请在 mongot YAML 配置中 advancedConfigs.ftdc 块下设置以下选项:
选项 | 默认 | 说明 |
|---|---|---|
|
| 启用 FTDC。当 |
|
| FTDC 存档目录的最大总大小,以兆字为单位。必须大于等于 |
|
| 单个 FTDC 存档文件的最大大小(以兆字为单位)。必须至少为 |
|
|
|
对于大多数部署,默认值都适合。仅在您有特定磁盘使用要求时才覆盖它们。要了解有关这些设置的更多信息,请参阅高级 FTDC 设置。
捕获 FTDC 以便获得支持
当您向 MongoDB 支持开启案例时,请发送受影响的 mongot 实例的整个 diagnostic.data/ 目录,包括问题发生期间。将目录打包并压缩。
对于 Linux tarball 部署,请将目录打包:
tar -czf mongot-ftdc-$(hostname)-$(date -u +%Y%m%dT%H%M%S).tar.gz <dataPath>/diagnostic.data/
对于容器部署,首先将目录复制到容器外:
docker cp <container>:/<dataPath>/diagnostic.data ./mongot-ftdc tar -czf mongot-ftdc.tar.gz ./mongot-ftdc
对于 Kubernetes 操作符 部署,请先将目录从舱中复制出来:
kubectl cp <namespace>/<pod>:<dataPath>/diagnostic.data ./mongot-ftdc tar -czf mongot-ftdc.tar.gz ./mongot-ftdc
在支持工单中包含以下内容:
FTDC 包。
覆盖相同时间窗口的
mongot日志文件,外加一小时的前缓冲。主节点 (primary node in the replica set) 上的
mongod日志文件涵盖了相同的时间窗口。mongot版本、mongod版本和 Kubernetes Operator 版本(如适用)。首次观察到问题的时间戳。
对部署中在该时间左右发生的变化的说明,例如配置、流量或升级。
FTDC 中的敏感数据
FTDC 包含运行指标和内部状态,而不是原始文档数据或用户查询字符串。FTDC 通常可以安全地发送给 MongoDB 支持团队,无需清理。如果您的合规政策更为严格,请先与安全团队一起查看所捕获的字段,然后再发送。
日志不是这样。日志行可能包括查询文本、文档标识符或其他应用程序级别数据,具体取决于日志级别。在限制性合规环境下发送日志文件之前,请先查看它们。