Skip to main content

kingbase-log-analyzer

作为 KingbaseES(金仓)DBA 专家,输入金仓实例的日志目录路径与需要分析的时间段(绝对时间范围或相对时间如「最近3天」、「昨晚8点到今早8点」),对该时间段内的日志文件进行深度解析,识别错误/致命错误、慢查询、锁等待与死锁、checkpoint 与后台写入、autovacuum、临时文件、连接与认证异常、复制/WAL 问题、崩溃恢复以及金仓特有的审计/安全日志(sysaudit、sysmac、sys_hm),并输出图文并茂(含时间线图与统计表格)的 Markdown 分析报告。触发条件:用户提到「分析金仓日志」、「分析KingbaseES日志」、「分析KES日志」、「帮我看看金仓数据库日志」、「日志目录」、「sys_log」、「金仓log 目录」、「数据库日志诊断」、「这段时间金仓出了什么问题」、「帮我查一下慢查询」、「帮我看看有没有死锁」、「checkpoint是不是太频繁」、「autovacuum有没有问题」、「金仓这段时间为什么变慢」,或用户提供了一个日志目录路径 + 时间段并希望得到诊断报告。即使用户只说「帮我看看这个目录下的日志,最近有没有问题」,也应使用本 skill。

Quellinformationen

Repository
digoal/skills
Letzte Quellaktivität
9. August 2026 um 13:01
Erkannte Sprache von SKILL.md
Chinesisch
Sterne
39
Forks
10

Installationsoptionen

Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.

Quelldateien prüfen

Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.

Datei-Explorer
7 Dateien

SKILL.md wird angezeigt

SKILL.md
Quellanweisungen · Schreibgeschützte Vorschau
name
kingbase-log-analyzer
description
作为 KingbaseES(金仓)DBA 专家,输入金仓实例的日志目录路径与需要分析的时间段(绝对时间范围或相对时间如「最近3天」、「昨晚8点到今早8点」),对该时间段内的日志文件进行深度解析,识别错误/致命错误、慢查询、锁等待与死锁、checkpoint 与后台写入、autovacuum、临时文件、连接与认证异常、复制/WAL 问题、崩溃恢复以及金仓特有的审计/安全日志(sysaudit、sysmac、sys_hm),并输出图文并茂(含时间线图与统计表格)的 Markdown 分析报告。触发条件:用户提到「分析金仓日志」、「分析KingbaseES日志」、「分析KES日志」、「帮我看看金仓数据库日志」、「日志目录」、「sys_log」、「金仓log 目录」、「数据库日志诊断」、「这段时间金仓出了什么问题」、「帮我查一下慢查询」、「帮我看看有没有死锁」、「checkpoint是不是太频繁」、「autovacuum有没有问题」、「金仓这段时间为什么变慢」,或用户提供了一个日志目录路径 + 时间段并希望得到诊断报告。即使用户只说「帮我看看这个目录下的日志,最近有没有问题」,也应使用本 skill。
tags
["KingbaseES","金仓","sys_log","日志分析","csvlog"]
platform
["claude-code","cursor"]
author
digoal
version
1.0.0
# KingbaseES 日志诊断专家 对 KingbaseES(金仓)实例在指定时间段内的日志文件进行系统性解析与根因分析,产出一份可直接用于故障复盘或健康巡检的 Markdown 报告。本 skill 以只读日志文件为主;可选地只读连接数据库来确认日志相关参数与时区假设,但不修改任何配置。 > **KingbaseES 适配要点**:金仓默认采用 **PG 兼容模式**,日志体系与 PostgreSQL 高度一致(`log_*` 系列参数、stderr/csvlog 输出、时间戳格式),但存在若干金仓特有差异(`sys_log` 目录、`sys_hba.conf`、日志文件名 `kingbase-*`、审计日志 `sysaudit`、安全策略日志 `sysmac`、健康监控 `sys_hm`、崩溃自动恢复消息等),已在 Step 2 / 分类维度 / Pitfalls 中逐条说明。金仓实测默认参数与常见日志消息模式见 `references/kb-log-format.md`。 ## 前置要求 - Agent 具备读取目标日志目录的文件系统权限(无需 root,普通只读权限即可;若日志属于 kingbase 用户且当前用户无权限,需提示用户 `sudo -u kingbase` 或调整权限后重试) - 基础命令行工具:`grep`、`awk`、`sed`、`zcat/zgrep`(处理压缩轮转日志)、`python3`(用于 csvlog 结构化解析,标准库即可,无需联网安装包) - **可选**:`ksql` 或 `psql` 客户端(采集日志相关配置参数),或 `psycopg2`(等价 Python 版,见 `scripts/collect_log_settings.py`) - 不需要网络访问(官方文档 URL 仅供核对术语,不构成依赖) ## 连接约定(仅当需要连库确认参数/时区时) 按优先级解析: 1. **用户明确提供的连接参数**(host/port/user/password/dbname,或连接串); 2. **环境变量** `PGHOST` `PGPORT` `PGUSER` `PGPASSWORD`,库名变量**同时兼容** `PGDBNAME`(用户指定)与 `PGDATABASE`(PG 惯例)——即使 KingbaseES 手册把这些变量写作 `KINGBASEHOST`/`KINGBASE_HOST` 等,本 skill **一律沿用 PG 风格环境变量**; 3. **缺省值**:`PGHOST=127.0.0.1 PGPORT=5432 PGUSER=kingbase PGPASSWORD=123456 PGDATABASE=kingbase`(金仓默认库名是 `kingbase` 而非 `postgres`,注意 Pitfall)。 连接方式二选一,结果等价: - **psql/ksql shell**:`scripts/collect_log_settings.sql` - **Python SDK**:`scripts/collect_log_settings.py`(依赖 `psycopg2`,`pip install psycopg2-binary`) ## 工作流程 ### Step 1: 捕获输入,缺失则询问 必需两个输入: 1. **日志目录路径**——金仓默认日志目录是 `<data_directory>/sys_log/`(相对路径,`SHOW log_directory` 可确认,如 `/home/kingbase/userdata/data/sys_log` 或本机挂载路径);用户给的是绝对路径时直接使用 2. **分析时间段**——支持绝对区间(`2026-07-10 14:00` 到 `2026-07-10 18:00`)或相对表达("最近3天"、"昨晚到今早"),Agent 需先用 `date` 换算成绝对时间区间,并在报告开头写明换算结果 若用户只给了目录没给时间段,默认使用该目录下**最新日志文件覆盖的最后 24 小时**,并在报告中明确注明"未指定时间段,默认分析最近 24 小时"。 若目录不存在或无可读日志文件,直接告知用户,不要臆造分析结果。 ### Step 2: 探测日志格式与时区 ```bash ls -la <log_dir> | head -50 # 判断格式:stderr 文本 / csvlog(.csv) head -5 <log_dir>/kingbase-*.log 2>/dev/null head -5 <log_dir>/kingbase-*.csv 2>/dev/null ``` - 金仓默认(PG 兼容模式)`log_destination = stderr`,`logging_collector = on`,`log_directory = sys_log`,`log_filename = kingbase-%Y-%m-%d_%H%M%S.log`,`log_line_prefix = %m [%p]`(即 `2026-08-09 09:00:45.981 UTC [92] LOG: ...`) - 若用户提供了连接信息,运行 `scripts/collect_log_settings.sql` 或 `.py` 采集 `log_destination`、`log_filename`、`log_line_prefix`、`log_timezone`、`log_min_duration_statement`、`log_checkpoints` 等参数,用实测值替代假设;无法连库时则以日志内时间戳自带时区/系统本地时区为准,并在报告"数据说明"中注明假设 - csvlog 每行是标准 CSV(含内嵌换行的字段,如 SQL 语句本身可能跨行),**禁止直接用 `grep`/`awk` 按行硬切,必须用 Python `csv` 模块解析**,否则会因内嵌逗号/换行导致字段错位。直接使用 `scripts/parse_csvlog.py`(自动读表头列名、支持 .csv/.csv.gz、时间段过滤、分类统计与脱敏)即可:`python3 scripts/parse_csvlog.py <日志目录> --since "..." --until "..."`;若实例尚未开启 csvlog,用 `scripts/enable_csvlog.sql`(psql/ksql)或 `scripts/enable_csvlog.py --enable`(Python)开启(需超级用户,`stderr,csvlog` 并存,reload 即生效,可随时回滚) - 传统 stderr 文本格式中,一条日志事件可能横跨多行(`ERROR:` 主行 + 紧随其后的 `STATEMENT:`/`DETAIL:`/`CONTEXT:`/`HINT:` 续行,续行与主行**同时间戳同 PID**),解析时要把这些续行归并回它所属的事件,不能拆散统计 ### Step 3: 筛选时间段内的日志文件 - 一个绝对时间段可能跨越多个日志文件(金仓按 `log_rotation_age`(默认1440分钟)/`log_rotation_size`(默认10MB) 轮转,含 `.gz` 压缩文件),按文件名时间戳或 `mtime` 排序后,选出**所有与目标区间有交集**的文件,而不是只挑一个最接近的文件 - 大文件(>200MB)优先用流式命令(`zgrep`/`grep` + 管道)过滤,禁止一次性读入内存后再处理 - 对每个候选文件,先用时间戳做粗筛(取文件内第一条和最后一条日志的时间戳,判断是否与区间有交集),再精确过滤落在区间内的行 ### Step 4: 分类提取与统计 对区间内的日志事件,按以下维度提取并统计,每类都要给出**次数、代表性样例(脱敏后)、Top N 排序**: | 维度 | 关键字/模式 | 需要统计的内容 | |------|------------|----------------| | 致命/错误 | `PANIC`、`FATAL`、`ERROR` | 按 SQLSTATE 或错误消息模板聚类去重,列 Top 10 出现频率最高的错误 | | 崩溃/恢复(金仓常见) | `database system was interrupted`、`automatic recovery in progress`、`redo starts at`、`database system is ready to accept connections` | 崩溃次数、崩溃时刻、恢复耗时、redo 段数;区分"正常关闭"(`was shut down`) 与"异常中断"(`was interrupted`,可能被 kill/断电/主机重启) | | 慢查询 | `duration: ... ms statement:` / `duration: ... ms plan:` | 耗时分布(P50/P95/最大值)、最慢 Top 10 语句(**对字面量做脱敏**,只保留 SQL 结构) | | 锁与死锁 | `deadlock detected`、`process ... still waiting for` | 死锁次数、涉及的表/关系、锁等待最长时长 | | 连接与认证 | `connection authorized`、`connection received`、`password authentication failed`、`too many connections`、`terminating connection` | 认证失败次数与来源 IP、连接数峰值时段、异常断连次数 | | Checkpoint/后台写入 | `checkpoint starting`、`checkpoint complete` | 触发原因分布、平均耗时、写入 buffer 数、检查是否比 `checkpoint_timeout` 更频繁触发 | | Autovacuum/Autoanalyze | `automatic vacuum of table`、`automatic analyze of table`、`to prevent wraparound` | 涉及表清单、耗时 Top、dead tuples 数量趋势,判断是否有表长期未被有效清理 | | 临时文件 | `temporary file:` | 出现次数、总大小,提示可能 `work_mem` 不足 | | 复制/WAL/归档 | `streaming replication`、`could not receive data from WAL stream`、`archive command failed`、`config the real archive_command string` | 复制中断次数、WAL 归档失败次数(`config the real archive_command string as soon as possible` 是金仓特有提示,表示 archive_command 尚未配置真实值) | | 配置变更 | `ALTER SYSTEM`、`received SIGHUP, reloading configuration files`、`parameter ... changed to` | 谁在何时改了什么参数(如金仓日志中 `attention:superuser kingbase is modifying ... by ALTER SYSTEM SET statement`),判断是否与异常窗口相关 | | 金仓特有:审计/安全 | `sysaudit`、`sysmac`、`sys_hm`、`security` | 审计策略告警、MAC 策略拒绝、健康监控告警(如开启时) | | 其他告警 | `WARNING`、`could not`、`skipping` | 归类展示,避免遗漏未预期的问题类型 | 若某一类在该时间段内完全没有记录,在报告中明确写"未发现",不要跳过不提,也不要编造。 ### Step 5: 关联分析(时间维度交叉) 把上述所有关键事件按时间排序,构建一条时间线,重点检查以下关联模式(有则指出,没有就不要牵强附会): - 慢查询集中爆发的时间段是否与 checkpoint、autovacuum 的执行窗口重叠 - 连接错误/认证失败暴增是否伴随 `too many connections` 或应用侧重连风暴 - 死锁频发是否集中在特定表或特定时段(如批量任务窗口) - 临时文件暴增是否与某类慢查询的语句结构一致(提示同一 SQL 反复触发外部排序/哈希) - **金仓特有**:崩溃恢复(`was interrupted`)后是否紧接认证失败风暴/连接堆积(应用侧重连);`ALTER SYSTEM` 或 `pg_reload_conf` 之后是否出现计划/行为变化 对每一条关联结论,给出**支持证据**(引用具体时间点和事件计数),并明确这是"相关性观察"而非确诊,附上"如何进一步验证"的建议(如开启 `auto_explain`、检查具体表的统计信息等)。 ### Step 6: 生成并保存报告 用 Markdown 输出,保存到当前项目 `markdown/` 目录(不存在则创建),文件名格式:`kingbase-log-analysis_{开始时间}_{结束时间}.md`(时间用 `YYYYMMDD-HHMM`)。报告需包含时间线图(Mermaid `timeline` 或简单的 ASCII 时间轴均可)和统计表格,让 DBA 一眼看出这段时间数据库经历了什么。 ## 输出格式 ```markdown # KingbaseES 日志分析报告 ## 数据说明 - 实例日志目录:... - 分析时间段:... 至 ...(如为默认/推算得出的时间段需注明) - 涉及日志文件:文件名列表 - 日志格式:stderr / csvlog - 时区假设:...(连库采集到的 log_timezone 或推断值) ## 健康度摘要 一句话结论 + 3-5 条关键发现(按严重程度排序) ## 关键发现 Top 5 1. ...(含证据:次数、时间点) ## 时间线 (Mermaid timeline 或时间轴表格,标出致命错误/崩溃恢复/死锁/连接风暴等关键节点) ## 分类明细 ### 错误与致命错误 表格:错误类型 | 次数 | 首次出现 | 最近一次 | 代表样例(脱敏) ### 崩溃与恢复 表格:崩溃时刻 | 恢复耗时 | redo 段数 | 是否正常关闭 ### 慢查询 表格:语句结构(脱敏) | 出现次数 | 平均耗时 | 最大耗时 ### 锁与死锁 ... ### Checkpoint / 后台写入 ... ### Autovacuum / Autoanalyze ... ### 临时文件 ... ### 连接与认证 ... ### 复制 / WAL / 归档 ... ### 配置变更 ... ### 审计 / 安全日志(金仓特有) ... ## 关联分析与根因假设 每条假设附证据与验证建议 ## 优化建议 按优先级(P0/P1/P2)列出可执行的参数调整或运维动作,每条建议说明"解决什么问题" ## 附录:原始日志片段引用 关键事件的原始行(脱敏后),供人工复核 ``` ## Pitfalls & Solutions | 坑点 | 解决方案 | |------|----------| | 日志轮转导致时间段横跨多个文件,只看最新文件会漏掉信息 | 先按文件时间范围筛选出所有相交文件再处理 | | csvlog 内嵌逗号/换行用 grep/awk 按行切割会导致字段错位 | 必须用 Python csv 模块或专用解析器读取 | | stderr 文本格式的多行日志(ERROR + STATEMENT/DETAIL)被当成独立行统计,导致重复计数 | 解析时先做"事件归并"(同时间戳同 PID 的续行拼回主事件)后再统计 | | 慢查询语句里可能包含手机号、身份证、密码等敏感字面量 | 报告中一律用占位符替换字面量(如 `$1`、`'***'`),只保留 SQL 结构 | | 大文件一次性读入内存导致 OOM 或极慢 | 用 `grep`/`zgrep` 流式过滤后再精细处理,避免一次性 `read()` 整个文件 | | 时间戳时区与系统本地时区不一致,导致筛选区间偏移 | 优先确认 `log_timezone`(金仓实测常见 UTC),找不到时明确注明假设的时区,不要默默假定 UTC | | **金仓特有**:`log_min_duration_statement = -1`(默认**不记慢 SQL**)、`log_checkpoints = off`、`log_autovacuum_min_duration = -1` | 慢查询/checkpoint/autovacuum 类目日志缺失时,提示用户检查相关参数是否开启,而不是直接判定"无问题"(这是金仓默认比 PG 更保守的一处) | | **金仓特有**:客户端默认连 `postgres` 库报 `FATAL: database "postgres" does not exist` | 金仓默认库名是 `kingbase`(或安装时指定的库),报告应点明这是客户端习惯性问题而非数据库故障 | | **金仓特有**:认证失败消息里出现 `Connection matched sys_hba.conf line 63` | 金仓的 host 认证配置文件叫 `sys_hba.conf`(不是 `pg_hba.conf`),引用时注意名称 | | **金仓特有**:`2pc are not enabled` / `the prepared transaction ... does not exist` | 金仓默认未开启 2PC(`max_prepared_transactions` 相关),涉及 PREPARE TRANSACTION 的运维/SQL 需要先确认参数 | | **金仓特有**:`sys_stat_statements` 同名对象在不同 schema(`public` 扩展视图 vs `sys_catalog` 内部对象)列结构可能不同 | 查询前用 `\dn`/`information_schema.columns` 确认目标对象,报 `column ... does not exist` 时先检查 search_path | | **金仓特有**:`ALTER SYSTEM` 触发 `attention:superuser kingbase is modifying ...` 日志 | 这是金仓对超级用户改参数的审计提示,属正常行为,但应纳入"配置变更"维度关联到异常窗口 | | **金仓特有**:`config the real archive_command string as soon as possible to archive WAL files` | 金仓提示 archive_command 尚未配置真实值(可能默认占位),报告应提醒确认归档配置 | | 把相关性当因果,给出过度确定的根因结论 | 所有关联分析必须标注为"观察到的相关性",并给出证据和进一步验证方法 | ## 注意事项 - 本 skill 仅读取日志文件;如需连库(只读)确认参数,只执行 SELECT/SHOW,不执行任何 SQL 写操作、不修改任何配置或系统文件 - 日志中的字面量数据(用户输入、SQL 参数)在报告中一律脱敏,不得原样透出 - 若日志目录权限不足,提示用户调整权限或使用有权限的账户重试,不要尝试提权 - 若关键日志类别(如慢查询、checkpoint)因参数未开启而缺失数据,必须在报告中明确说明"数据不可得",不得凭经验编造结论 - 报告中的所有优化建议需说明适用前提(如"若确认瓶颈在 IO,可考虑..."),不做无条件的参数修改建议 - 连接信息解析:用户提供 > 环境变量(PG 风格,即使金仓手册写作 KINGBASE*;库名兼容 `PGDBNAME`/`PGDATABASE`)> 缺省值 `127.0.0.1:5432/kingbase/kingbase/123456` ## 脚本与参考 - `scripts/collect_log_settings.sql` — psql/ksql 版:只读采集日志相关配置(格式、轮转、内容开关、时区) - `scripts/collect_log_settings.py` — Python SDK(psycopg2)版:与 .sql 等价 - `scripts/parse_csvlog.py` — csvlog 结构化日志解析器(Python 标准库 csv/gzip,只读):动态读表头、支持 .csv/.csv.gz、`--since/--until/--json`,按 skill Step 4 维度分类统计并脱敏 - `scripts/enable_csvlog.sql` — psql/ksql 版:开启 csvlog(`stderr,csvlog` 并存 + reload,需超级用户,含回滚方法) - `scripts/enable_csvlog.py` — Python SDK 版:`--check`(只读查看,默认)/ `--enable` / `--revert` - `references/kb-log-format.md` — 金仓日志格式细节、实测默认参数、特有消息模式、csvlog 字段说明、官方文档链接 - 官方文档:[错误报告和日志(运行时配置-日志)](https://docs.kingbase.com.cn/cn/KES-V9R1C10/administration/Config_Mgmt/runtime-config-logging)(说明:docs.kingbase.com.cn 为 JS 渲染站点,`curl` 只能拿到导航壳,正文需用浏览器渲染或直接以本 skill 的实测/经验内容为准)
Auf GitHub ansehen