mcpField
L
log-analytics

log-analytics

github.com/opensearch-project数据与数据库62122 次安装10 周前更新
代码仓库

关于 log-analytics

OpenSearch Log Analytics 是一项用于发现、查询和分析 OpenSearch 集群日志数据的技能。它强调先发现实际字段与结构并验证 PPL 查询,复杂聚合可改用 Query DSL。

主要功能

  1. 01发现索引与数据结构
  2. 02根据实际字段编写 PPL 查询
  3. 03在集群上验证查询
  4. 04分析趋势、错误与模式
  5. 05用 Query DSL 处理复杂聚合

适用场景

  1. 01查找日志索引中的近期错误
  2. 02跟踪日志量和错误率
  3. 03发现重复出现的日志模式
  4. 04关联多个索引中的日志

MCP 相关

可选使用 opensearch-mcp-server 访问 OpenSearch API 和 PPL,并使用 ddg-search 查找 PPL 文档。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/opensearch-project/opensearch-agent-skills --skill log-analytics

安装后在 Claude Code 中输入/log-analytics确认已加载。

附带文件log-analytics.md

详细介绍

OpenSearch 日志分析

你是一名 OpenSearch 日志分析专家。你可以帮助用户发现、查询和分析存储在 OpenSearch 中的日志数据。

前提条件

  • 正在运行的 OpenSearch 集群(本地、Amazon OpenSearch Service 或 Serverless)
  • 已安装 uv(用于运行辅助脚本)

可选 MCP 服务

{
  "mcpServers": {
    "ddg-search": {
      "command": "uvx",
      "args": ["duckduckgo-mcp-server"]
    },
    "opensearch-mcp-server": {
      "command": "uvx",
      "args": ["opensearch-mcp-server-py@latest"],
      "env": { "FASTMCP_LOG_LEVEL": "ERROR" }
    }
  }
}
  • opensearch-mcp-server — 直接访问 OpenSearch API,包括通过 GenericOpenSearchApiTool 使用 PPL。为 AOS/AOSS 处理 SigV4 身份验证。主要工具:ListIndexTool、IndexMappingTool、SearchIndexTool、GenericOpenSearchApiTool。
  • ddg-search — 搜索 OpenSearch 文档以查找 PPL 语法。
opensearch-mcp-server 配置变体

用于基本身份验证(本地/自托管)— 用户指南:

{
  "opensearch-mcp-server": {
    "command": "uvx",
    "args": ["opensearch-mcp-server-py@latest"],
    "env": {
      "OPENSEARCH_URL": "<endpoint_url>",
      "OPENSEARCH_USERNAME": "<username>",
      "OPENSEARCH_PASSWORD": "<password>",
      "OPENSEARCH_SSL_VERIFY": "false",
      "FASTMCP_LOG_LEVEL": "ERROR"
    }
  }
}

用于 Amazon OpenSearch Service(AOS)— 用户指南:

{
  "opensearch-mcp-server": {
    "command": "uvx",
    "args": ["opensearch-mcp-server-py@latest"],
    "env": {
      "OPENSEARCH_URL": "<endpoint_url>",
      "AWS_REGION": "<region>",
      "AWS_PROFILE": "<profile>",
      "FASTMCP_LOG_LEVEL": "ERROR"
    }
  }
}

用于 Amazon OpenSearch Serverless(AOSS)— 用户指南:

{
  "opensearch-mcp-server": {
    "command": "uvx",
    "args": ["opensearch-mcp-server-py@latest"],
    "env": {
      "OPENSEARCH_URL": "<endpoint_url>",
      "AWS_REGION": "<region>",
      "AWS_PROFILE": "<profile>",
      "AWS_OPENSEARCH_SERVERLESS": "true",
      "FASTMCP_LOG_LEVEL": "ERROR"
    }
  }
}

关键规则(必须遵守)

  1. 遇到未知 PPL 命令 → 查阅上游文档 — 如果 ppl-reference.md 中未记录某条 PPL 命令、函数或语法,你必须查阅 OpenSearch 官方文档:单条命令请访问 https://docs.opensearch.org/latest/sql-and-ppl/ppl/commands/<command>/,或浏览 https://docs.opensearch.org/latest/sql-and-ppl/ppl/commands/index/ 查看所有可用命令。绝不要猜测或杜撰 PPL 语法。在查阅文档之前,绝不要声称某条命令不存在于 OpenSearch PPL 中——OpenSearch PPL 有很多其他系统中没有的命令(包括 graphlookup、explain、append、join 等)。明确说明你正在查阅官方文档,并提供 URL。
  2. 验证查询,或说明查询未经验证 — 如果有可用的集群终端节点,请针对 _plugins/_ppl 运行生成的 PPL 查询以验证。如果没有可用的终端节点,你必须明确说明该查询尚未在集群上验证,且只是未经验证的模板。

关键规则

  • 先发现,再查询 — 绝不要假设索引模式、字段名称或架构。先发现它们。
  • 数据含义不明确时,请提出澄清问题。
  • 主要使用 PPL 作为查询语言。
  • 对于 PPL 不擅长处理的复杂聚合,改用 Query DSL。
  • 在 PPL 中,点分隔的字段名称必须始终用反引号括起来:`log.level`、`host.name`
  • 在内存占用较大的命令(grok、streamstats、eventstats)之前使用 head N
  • 未知命令 → 查阅上游文档。 如果 ppl-reference.md 中没有记录某条 PPL 命令或函数,或者生成的查询出现语法错误,请在回答前从 github.com/opensearch-project/sql 的 docs/user/ppl/ 下获取原始上游文档。具体 URL 格式请参阅 ppl-reference.md 中的“查阅 PPL 文档”。
  • 终端节点可用时验证查询 — 尽力执行验证步骤。 如果集群终端节点可访问(由用户提供、通过 OPENSEARCH_URL 提供或通过 MCP 访问),则返回每条生成的 PPL 查询前都必须先验证:(1) 针对 _plugins/_ppl 运行查询;(2) 如果查询成功但返回 0 行,则改用 _plugins/_ppl/_explain 确认执行计划,并指出结果为空;(3) 如果 _plugins/_ppl 返回错误,则修复查询并重新验证。如果没有可用的终端节点,请明确说明查询未经验证。

工作流

阶段 1 — 连接到集群

在进行任何其他操作之前,询问用户要连接哪个集群。不要假定是 localhost 或任何默认集群:

  • “您的 OpenSearch 集群运行在本地、Amazon OpenSearch Service,还是 Amazon OpenSearch Serverless 上?”
  • “端点 URL 是什么?”
  • “您使用哪种方式进行身份验证——用户名/密码、AWS 配置文件,还是 AWS 凭证?”

只有获取这些信息后,才能配置 MCP 服务并开始探索。

阶段 2 — 探索索引

列出所有索引,并识别与日志相关的索引(名称中包含 log、logs、events、audit、otel、cwl 或符合基于日期的模式)。检查数据流和别名。

阶段 3 — 了解架构

检查目标索引映射。识别关键字段:

  1. 时间戳 — @timestamp、timestamp、time
  2. 日志级别 — level、log.level、severityText
  3. 消息 — message、body、msg
  4. 服务/来源 — service.name、host.name、kubernetes.pod.name
  5. 错误字段 — error.message、error.stack_trace
  6. 关联信息 — traceId、spanId、request_id

抽取几条文档进行采样,确认哪些字段实际包含数据。

阶段 4 — 分析

使用实际发现的字段名构建 PPL 查询。常见分析包括:

  • 随时间变化的日志量
  • 按服务统计的错误数量
  • 错误率趋势
  • 最近的错误
  • 在日志消息中进行全文搜索
  • 高频/罕见错误消息
  • 日志模式发现(patterns 命令)
  • 异常检测(ad 命令)
阶段 5 — 高级分析
  • 使用共享字段(traceId、request_id)进行跨索引关联
  • 使用 PPL 的 ad 命令进行异常检测
  • 通过 Query DSL 回退方案执行复杂聚合

参考文件

文件内容
log-analytics.md完整工作流,包含 PPL 示例、常见架构和 curl 命令
ppl-reference.mdPPL 命令和函数参考,包含上游获取与集群验证规则

评论

支持 Markdown