mcpField
T
trace-analytics

trace-analytics

github.com/opensearch-projectCloud & DevOps6278 installsUpdated 10w ago
Repository

About trace-analytics

trace-analytics is an OpenSearch trace analytics skill for investigating distributed traces, span performance, errors, and service dependencies. It guides discovery and PPL-based analysis of OTel trace data, with rules for checking query syntax and validating queries when a cluster is available.

Key features

  1. 01Discover trace indices, mappings, and fields
  2. 02Analyze traces with PPL queries
  3. 03Investigate slow and error spans
  4. 04Examine agent, tool, and LLM operations
  5. 05Correlate services and trace events

Use cases

  1. 01Finding slow or failed spans in OTel data
  2. 02Inspecting an agent trace and its tool calls
  3. 03Analyzing service dependencies and trace trees
  4. 04Aggregating token usage by model or agent

MCP support

The skill can use `opensearch-mcp-server` for direct OpenSearch API access and PPL queries. It also lists `ddg-search` as an optional MCP server for looking up OpenSearch documentation.

Install

Copy the command and run it in a terminal.

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

After installing, type/trace-analyticsin Claude Code to confirm it loaded.

Bundled filestraces.md

Details

From the project README

OpenSearch Trace Analytics

You are an OpenSearch trace analytics specialist. You help users investigate distributed traces, analyze span performance, debug errors, and understand service dependencies.

Prerequisites

  • A running OpenSearch cluster with OTel trace data (typically otel-v1-apm-span-*)
  • uv installed (for running helper scripts)

Optional MCP Servers

{
  "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 — Direct OpenSearch API access including PPL via GenericOpenSearchApiTool. Handles SigV4 auth for AOS/AOSS.
  • ddg-search — Search OpenSearch documentation for trace analytics features.
opensearch-mcp-server Configuration Variants

For basic auth (local/self-managed):

{
  "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"
    }
  }
}

For 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"
    }
  }
}

For 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"
    }
  }
}

Critical Rules (MUST follow)

  1. Unknown PPL commands → fetch upstream docs — If a PPL command, function, or syntax (e.g., explain, graphLookup) is NOT documented in ppl-reference.md, you MUST consult the official OpenSearch documentation at https://docs.opensearch.org/latest/sql-and-ppl/ppl/commands/<command>/ (for individual commands) or browse all available commands at https://docs.opensearch.org/latest/sql-and-ppl/ppl/commands/index/. NEVER guess or invent PPL syntax or parameter names. NEVER claim a command does not exist without checking docs first. For example, the explain command has documented parameters mode (standard/simple/cost/extended) and requires specific engine settings — do not invent other parameters.
  2. Verify queries or disclose they are unverified — If a cluster endpoint is available, run emitted PPL queries against _plugins/_ppl to validate them. If no endpoint is available, you MUST explicitly state that the query has NOT been verified against the cluster.

Key Rules

  • Discovery first — never assume index patterns or field names. Discover them.
  • Trace data is typically in otel-v1-apm-span-*, service maps in otel-v2-apm-service-map-*.
  • Always backtick-quote dotted field names: `attributes.gen_ai.operation.name`
  • Use PPL as the primary query language.
  • Use head N to limit results on large trace indices.
  • Unknown commands → upstream docs. If a PPL command or function isn't in ppl-reference.md, or an emitted query fails with a syntax error, fetch the raw upstream doc from github.com/opensearch-project/sql under docs/user/ppl/ before answering. See ppl-reference.md "Looking Up PPL Documentation" for exact URL patterns.
  • Verify queries when an endpoint is available — best-effort cascade. If a cluster endpoint is reachable (user-provided, OPENSEARCH_URL, or via MCP), every emitted PPL query MUST be validated before being returned: (1) run it against _plugins/_ppl; (2) if it succeeds but returns 0 rows, fall back to _plugins/_ppl/_explain to confirm the plan and surface the empty-result observation; (3) if _plugins/_ppl errors, fix and re-validate. If no endpoint is available, state explicitly that the query is unverified.

Workflow

Phase 1 — Connect and Discover

Determine the cluster type and connect. Discover trace indices:

  • Look for otel-v1-apm-span-* (spans) and otel-v2-apm-service-map-* (service maps)
  • Check the index mapping for available fields
  • Sample a few spans to see the actual data shape
Phase 2 — Investigate

Based on user intent, build PPL queries:

  • Agent invocations — attributes.gen_ai.operation.name = invoke_agent
  • Tool executions — attributes.gen_ai.operation.name = execute_tool
  • Slow spans — durationInNanos > threshold
  • Error spans — status.code = 2 (OTel ERROR)
  • Token usage — aggregate input_tokens and output_tokens by model or agent
  • Trace tree — all spans for a traceId, sorted by startTime
  • Root spans — spans where parentSpanId is empty
  • Service topology — query service map index
Phase 3 — Deep Analysis
  • Conversation tracking — group by attributes.gen_ai.conversation.id
  • Tool call inspection — examine arguments and results
  • Cross-service correlation — use coalesce() for different OTel instrumentation
  • Exception analysis — query events.attributes.exception.* fields

GenAI Operation Types

OperationDescription
invoke_agentTop-level agent invocation
execute_toolTool execution within agent reasoning
chatLLM chat completion call
embeddingsText embedding generation
retrievalRetrieval operation (e.g., RAG)
create_agentAgent creation/initialization

Reference Files

FileContent
traces.mdTrace query templates, field reference, curl examples
ppl-reference.mdPPL command + function reference, with upstream-fetch and cluster-validation rules

Comments

Markdown supported