Extract Error Patterns — 提取错误模式
v1.0.0在以下情况使用:(1)用户粘贴日志文件(应用程序日志、服务器日志、错误跟踪)并要求提取错误模式或堆栈跟踪。(2)用户提供一组错误消息,并希望按类型、严重程度或根本原因对其进行分组/分类。(3)用户希望解析特定格式的日志(JSON 日志、syslog、Apache 错误日志、Python 跟踪)并提取结构化字段。
运行时依赖
安装命令
点击复制技能文档
核心职位 该技能使用模式匹配、正则表达式提取和分类规则从非结构化文本中提取结构化的错误和日志数据。它可以处理多种日志格式(JSON、syslog、Apache、Nginx、Python traceback、Node.js stack trace、Docker、Kubernetes),并生成按错误类型、严重程度和频率分组的结构化输出。 主要职责: 自动检测日志格式通过检查结构(JSON 行、时间戳模式、键值对模式) 应用特定格式的正则表达式模式来提取:时间戳、级别、错误消息、堆栈跟踪、源文件、行号、请求 ID、会话 ID 将错误分类为类别:CRITICAL、ERROR、WARNING、INFO(根据严重程度映射) 对重复/近似重复的错误进行分组并报告频率计数 标记低置信度的提取和模糊格式以进行手动审查 模式 /extract-error-patterns --verbose 详细模式。返回每个匹配项,包括: matched_text:匹配的确切文本 confidence:基于模式强度的 0.0-1.0 之间的值 position:源代码中的行号 context:匹配项前后 2 行的日志条目 pattern_used:匹配此条目的正则表达式/规则 在调试、进行根因分析或审计提取质量时使用。 /extract-error-patterns --summary 摘要模式。返回聚合结果: total_errors:错误总数 by_severity:按严重程度分类的错误计数 {CRITICAL:N,ERROR:N,WARNING:N,INFO:N} by_type:按错误类型分组的错误消息,包括计数和示例 top_5_errors:最常见的 5 个错误,包括指纹和首次出现时间 time_range:首次到最后一次日志条目的时间范围 在获取监控仪表板的高级概述时使用。 /extract-error-patterns --json JSON 输出模式。预期输入为 JSON 格式的日志。从每个 JSON 对象中提取结构化字段:时间戳、级别、消息、错误、堆栈跟踪以及任何自定义字段。 /extract-error-patterns --stacktrace 堆栈跟踪模式。专注于从应用程序日志中提取堆栈跟踪(异常)。将多行堆栈跟踪解析为结构化记录,包括异常类型、消息、帧(文件、行、函数)以及 Git 提交哈希(如果存在)。 /extract-error-patterns --custom 自定义模式。通过 --patterns 标志接受用户提供的正则表达式模式: --patterns "ERROR.连接拒绝|CRITICAL.内存不足" --fields error_type、detail 使用提供的模式进行提取,并报告每个结果匹配的模式。 执行步骤 步骤 1:检测日志格式 读取输入的前 20 行。检查模式以识别格式: JSON 行(NDJSON):{"timestamp":"2024-01-15T10:23:45Z","level":"error","message":"连接拒绝"} {"timestamp":"2024-01-15T10:23:46Z","level":"warn","message":"重试..."} 模式:行以 { 开头并且可以单独解析为有效的 JSON。要提取的字段:每个 JSON 对象的所有键。 Syslog(RFC 3164 / RFC 5424): Jan 15 10:23:45 主机名 sshd[1234]:无效用户 admin 从 1.2.3.4 端口 54321 的 ssh2 失败 模式:^[A-Z][a-z]{2}\s+\d{1,2}\s+\d{2}:\d{2}:\d{2} RFC 5424:timestamp 主机名 process[pid]:message 字段:时间戳、主机名、进程、pid、消息。 Apache/Nginx 错误日志: [Thu Jan 15 10:23:45.123456 2024] [error] [client 1.2.3.4] PHP 致命错误:未捕获的异常:DB 连接失败在 /var/www/html/db.php:12 [Thu Jan 15 10:23:46.789012 2024] [warn] [pid 1234] 来自 1.2.3.4 的请求超时 模式:\[\w+ \w+ \d+ [\d:.]+ \d{4}\] \[(\w+)\] 字段:时间戳、级别(错误/警告/严重)、客户端 IP、消息。 Python 回溯: 回溯(最近一次调用最后): 文件 "app.py",第 123 行,main 中 db.query("SELECT * FROM users") 运行时错误:DB 连接失败 在处理上述异常时发生了另一个异常:... 模式:以 "回溯(最近一次调用最后):" 开头,包含 "文件"..." 行。 字段:异常类型、异常消息、帧(文件、行、函数)。 Node.js 堆栈跟踪: 错误:ENOENT:没有这样的文件或目录,打开 '/tmp/data.json' 在 Object.openSync(node:fs:914:3) 在 Object.readFileSync(node:fs:555:3) 在 main(app.js:45:10) 模式:以 "错误:" 或 "ReferenceError:" 开头,包含 "在" 行,引用 node: 或 .js。 字段:异常类型、异常消息、帧(文件、行、函数)。 Docker/Kubernetes 日志: 2024-01-15T10:23:45.123456789Z stdout F 应用程序在端口 3000 上启动 2024-01-15T10:23:46.123456789Z stderr F 错误:无法连接到数据库 模式:Kubernetes 结构化日志格式:时间戳 stdout/stderr 流标志 消息。 带有时间戳的纯文本: 2024-01-15 10:23:45 错误 [app] 连接到 db 失败:30 秒后超时 2024-01-15 10:23:46 警告 [api] 来自客户端 = 1.2.3.4 的请求超时 模式:^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2} → 检测时间戳前缀。 如果未检测到已知格式,则将其视为纯文本并应用通用提取(请参阅步骤 3)。 步骤 2:为格式特定提取定义正则表达式模式 对于检测到的格式,使用适当的模式: JSON 行提取: 导入 json、re # 每行都是一个 JSON 对象