Install
openclaw skills install @1447443432/hap-mongodb-slowlog-analysisAnalyze MongoDB 4.4.x slow logs from pasted slow-log text, uploaded log files, or mongodb.log content and produce practical query optimization advice, index...
openclaw skills install @1447443432/hap-mongodb-slowlog-analysis默认优先由 AI 直接在对话中分析慢日志,不依赖本地 PowerShell。这个 skill 的主体能力是:
mongodb.log、.log、.txt、.jsonl 等文件内容ns)归类,并按“查询形态”去重汇总也就是说,这个 skill 的核心不是“运行脚本”,而是“AI 直接分析并输出结构化结果”。
默认模式是“纯 AI 分析优先”:
createIndex(...) 命令md 或 html,优先由 AI 直接生成对应内容在这个模式下:
按优先级使用下面这套策略:
对话分析
Markdown
HTML
DOCX / PDF
默认不要把脚本当作分析入口。
只有在下面场景下,才可以考虑使用本地工具或脚本:
mongodb.log如果只是单条、少量、临时分析,或者上传文件后只需要直接分析,优先用 AI 完成。
mongodb.log 文件路径或一段日志文件内容ns 归类operation (find / aggregate)nsfilter 的字段结构和操作符结构sortprojectionlimitpipeline 的阶段结构planSummarynsplanSummarykeysExamineddocsExaminednreturneddurationMillisfind / aggregatefiltersortprojectionlimit$group$or$regex$ne/$nin/$not/$sizeCOLLSCANlimit: 1 但扫描很多文档$or 不同分支需要不同索引$ne、$nin、$not、$size 这类负向条件拖慢查询$match 不够收敛$group 放大上游扫描成本默认输出顺序如下:
摘要 / Summary归类与去重摘要 / Grouping & Dedup Summary(批量日志时必须出现)处理优先级 / Action Priority证据 / Evidence查询条件 / Query Shape为什么慢 / Why It Is Slow索引建议 / Index Advice索引创建命令 / Index Commands可执行优化路径 / Practical Optimization Paths查询优化建议 / Query Advice验证建议 / Validation参考文档 / References\r\n\r\n报告中应尽量解释:可执行优化路径 / Practical Optimization Paths不改写入逻辑可做项、允许改写写入默认值时可做项每次完整报告都应固定带一个“参考文档 / References”小节,至少包含:
如果是 HTML 输出,应把这个链接做成可点击超链接。
如果用户要求 HTML 内容或 HTML 文件,输出应尽量满足这些要求:
声明:内容由 AI 生成。尽管已努力确保信息的合理性,但 AI 模型仍可能产生不准确、过时或存在偏差的内容。请在执行关键操作前,务必对照 官方文档 进行核实校验。生成 HTML 时,目录(TOC)必须满足以下所有要求,否则视为不合格输出:
锚点完整性:每个 TOC 链接的 href(如 #g2)必须在正文中存在对应的 id 属性。
href 去掉 # 后都能在 DOM 中找到对应元素。<div class="group-section" id="g2">)加上对应 id。id 而遗漏其余分组。平滑滚动:CSS 必须包含:
html {
scroll-behavior: smooth;
scroll-padding-top: 20px;
}
TOC 滚动高亮兼容性:
position: sticky 布局。getBoundingClientRect().top 而非 element.offsetTop,因为 offsetTop 在 sticky 容器下会返回错误值。sections.forEach(s => {
if (s.getBoundingClientRect().top <= 120) {
current = s.id;
}
});
目标元素间距:被跳转到的目标元素应设置 scroll-margin-top,确保不会被页面顶部遮挡:
h2[id], h3[id], .group-section[id] {
scroll-margin-top: 20px;
}
自检清单:生成 HTML 后,在最终写入文件前,用以下清单自检:
<a href="#xxx"> 是否都有对应的 id="xxx" 元素scroll-behavior: smoothscroll-padding-top 或 scroll-margin-topgetBoundingClientRect 而非 offsetTop如果 HTML 已写入文件,任务完成时可以提供一个最小化交付提示,但不要默认增加单独的“交付结果 / Deliverables”小节。\r\n\r\n默认只需要:\r\n\r\n- 在最终回复里给出最重要产物的可点击文件路径\r\n- 如有必要,再补一个可点击目录路径\r\n- 如果是 HTML,可选补一个本地打开示例\r\n\r\n如果用户没有要求展示目录或打开方式,不要额外展开太多交付说明。\r\n\r\n在 Codex 桌面环境里,优先使用简洁的可点击路径。
批量日志分析时,不能因为做了“按表归类 + 查询形态去重”就丢掉老的细节输出。必须同时满足这两层:
汇总层 / Summary Layerns 归类、按查询形态去重后的总览细节层 / Detail Layer证据 / Evidence查询条件 / Query Shape为什么慢 / Why It Is Slow索引建议 / Index Advice索引创建命令 / Index Commands查询优化建议 / Query Advice查询条件 / Query Shape 不允许省略;优先展示格式化 JSONfind,至少展示:
filtersortprojection(如果存在)limit(如果存在)aggregate,至少展示:
pipeline$match,应单独展示 match JSON也就是说:
先汇总,再按分组展开细节当输入是整份日志文件、长文本、或多条慢日志时,默认按下面方式处理:
ns 归类createIndex(...) 或“当前不建议直接执行 createIndex”的模板如果用户上传了日志文件,默认应:
如果用户上传文件后又要求导出结果:\r\n\r\n- 默认把结果写到工作区内可访问目录\r\n- 输入来源在报告中默认只显示文件名,不显示完整本地路径\r\n- 例如应显示 mongodb.log,而不是 C:\\Users\\admin\\Downloads\\mongodb.log\r\n- 完成后默认只返回最重要产物的可点击路径;除非用户要求,否则不要额外展开“交付结果”说明\r\n\r\n## Index Recommendation Rules
统一遵循这些规则:
$or 且不同分支走不同字段,优先考虑“每个分支一套可命中的索引”。_id 字段默认已有索引。看到 planSummary: IXSCAN { _id: 1 } 或 IXSCAN { _id: -1 } 时,不要说“缺少 _id 索引”。ws 开头),默认认为单字段索引 { "_id": 1 }、{ "utime": 1 }、{ "rowid": 1 }、{ "ctime": 1 } 已存在。ws* 集合建议重复创建单字段 _id、utime、rowid、ctime 索引;如果需要使用这些字段,只能作为复合索引中的排序键或辅助键来解释。sort: { _id: 1/-1 },且日志显示 IXSCAN { _id: ... }、docsExamined 很高、nreturned 很低,应说明:当前 _id 默认索引主要在服务排序,不能同时高效完成业务字段过滤。{ "_id": 1 } 索引,也不要把建议表述成“给 _id 建索引”。_id 路径导致大量扫描时,才建议把 _id 作为复合索引的尾部排序键,例如 { "业务过滤字段": 1, "_id": 1 }。$or / 空值混合查询,改写后候选索引默认先给业务等值字段和范围字段,不要默认把 _id 放进候选索引;只补充说明“如 explain 证明仍需按 _id 保序,再评估把 _id 作为复合索引尾部排序键”。$or 条件,通常不走索引或索引收益很差null、空字符串 ""、空数组 $size: 0、字段不存在、$ne/$nin/$not、不包含、开头不是、普通包含正则等不走索引或索引收益差的查询时,优先建议在写入侧给原字段写入统一默认值。"__EMPTY__"、"未填写"、0、false 或业务认可的枚举值,然后查询改成 { "原字段": 默认值 }。null、""、[]、字符串默认值和数组值;如果历史数据已混用,应建议先做一次数据归一化,再建索引和改查询。{ "$or": [ { field: null }, { field: "" }, { field: { "$size": 0 } } ] } 时,优先建议改为写入统一默认值后查询 { field: 默认值 },再基于该等值条件设计索引。_id 单字段索引ctimeutime 单字段索引rowid 单字段索引statusstatus,可以解释它是业务过滤条件,但不要把它纳入推荐索引定义。_id、utime、rowid、ctime,要说明 ws* 集合默认已有这些单字段索引,不需要重复建议。background: true如果日志格式不完整、JSON 不标准、或过滤条件无法完全结构化提取:
$group、$or、$regex、$not、$size 等特征本 skill 可以带脚本,但脚本只是可选增强:
scripts/extract-slowlog-signals.ps1
scripts/generate-slowlog-report.ps1
如果用户只是贴一段慢日志,或者上传一个日志文件需要直接分析,不需要主动调用这些脚本。
直接 AI 分析:
用 $mongodb-slowlog-analysis 分析下面这段 MongoDB 4.4 慢日志,中文输出分析这条慢日志,告诉我为什么慢、索引怎么加、查询条件怎么改分析这个上传的 mongodb.log,按表归类并对重复查询去重汇总不要生成文件,直接在对话里分析直接让 AI 生成 Markdown / HTML 内容:
用 $mongodb-slowlog-analysis 生成一份 markdown 报告内容用 $mongodb-slowlog-analysis 生成 html 报告内容,不依赖本地脚本如果用户明确要求尝试真实文件导出,再说明:
md/html 可以直接由 AI 生成并保存docx/pdf 通常需要本地转换工具,这属于可选增强需要复查规则时,读取 references/mongodb-4.4-slowlog-guidelines.md。重点关注:
ctime 和 status$or、正则查询和后台创建索引的经验规则索引相关输出必须走下面两种模板之一,不要混用,也不要只给一个孤立的 use 库名:
可直接建索引
索引建议:给出候选索引形态索引创建命令:给出完整 Mongo Shell 命令,至少包含:
use 库名db.getCollection("集合名").createIndex(..., { background: true })暂不建议直接建索引
索引建议:明确写“当前不建议直接创建普通索引”索引创建命令:明确写“当前不建议直接执行 createIndex,请先改写查询条件”use 库名补充规则:
createIndex(...) 命令来凑模板。use 库名。如果当前结论是“暂不建议直接建索引”,但日志里仍然能看出较明确的正向过滤字段、范围字段或排序字段,则报告应额外给出一个:
改写后候选索引 / Post-Rewrite Candidate Indexes这一节的作用是:
输出要求:
$or 场景,可以额外给出“分支索引”示例主候选索引 / Primary candidate index$or 分支拆分后的候选,应标记为 分支候选索引 / Branch candidate indexes索引创建命令 之后、查询优化建议 之前对于这类 MongoDB 动态业务字段,默认视为:
因此在给建议时必须遵守:
$size/$not/$ne 等复杂谓词,应把它标记为“混合约束字段”,不要把它直接当作可建索引前缀在 aggregate 场景下尤其要注意:
regex$ne/$nin/$not/$size$or
这些场景应优先建议“在原字段上统一默认值并改成精确查询”,不能建议“改原字段 key”。只有用户明确允许新增字段且不允许改原字段值时,才把辅助字段作为备选。