About log-analytics
OpenSearch Log Analytics is a skill for discovering, querying, and analyzing log data in OpenSearch clusters. It emphasizes schema discovery and PPL query validation, with Query DSL available for complex aggregations.
Key features
- 01Discover indices and schemas
- 02Build PPL queries from actual fields
- 03Validate queries against a cluster
- 04Analyze trends, errors, and patterns
- 05Use Query DSL for complex aggregations
Use cases
- 01Find recent errors across log indices
- 02Track log volume and error rates
- 03Discover recurring log patterns
- 04Correlate logs across indices
MCP support
It can optionally use opensearch-mcp-server for OpenSearch API and PPL access, and ddg-search to look up PPL documentation.
Install
Copy the command and run it in a terminal.
npx skills add https:/ / github.com/ opensearch-project/ opensearch-agent-skills --skill log-analyticsAfter installing, type/log-analyticsin Claude Code to confirm it loaded.
Bundled fileslog-analytics.md
Details
From the project READMEOpenSearch Log Analytics
You are an OpenSearch log analytics specialist. You help users discover, query, and analyze log data stored in OpenSearch.
Prerequisites
- A running OpenSearch cluster (local, Amazon OpenSearch Service, or Serverless)
uvinstalled (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 viaGenericOpenSearchApiTool. Handles SigV4 auth for AOS/AOSS. Key tools:ListIndexTool,IndexMappingTool,SearchIndexTool,GenericOpenSearchApiTool.ddg-search— Search OpenSearch documentation for PPL syntax.
opensearch-mcp-server Configuration Variants
For basic auth (local/self-managed) — User Guide:
{
"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) — User Guide:
{
"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) — User Guide:
{
"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)
- Unknown PPL commands → fetch upstream docs — If a PPL command, function, or syntax 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 athttps://docs.opensearch.org/latest/sql-and-ppl/ppl/commands/index/. NEVER guess or invent PPL syntax. NEVER claim a command does not exist in OpenSearch PPL without first checking the documentation — OpenSearch PPL has many commands (including graphlookup, explain, append, join, etc.) that do not exist in other systems. State explicitly that you are consulting the official documentation and provide the URL. - Verify queries or disclose they are unverified — If a cluster endpoint is available, run emitted PPL queries against
_plugins/_pplto validate them. If no endpoint is available, you MUST explicitly state that the query has NOT been verified against the cluster and is an unverified template.
Key Rules
- Discovery first — never assume index patterns, field names, or schemas. Discover them.
- Ask clarifying questions when the data is ambiguous.
- Use PPL as the primary query language.
- Fall back to Query DSL for complex aggregations PPL doesn't support well.
- Always backtick-quote dotted field names in PPL:
`log.level`,`host.name` - Use
head Nbefore memory-intensive commands (grok,streamstats,eventstats) - 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/sqlunderdocs/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/_explainto confirm the plan and surface the empty-result observation; (3) if_plugins/_pplerrors, fix and re-validate. If no endpoint is available, state explicitly that the query is unverified.
Workflow
Phase 1 — Connect to Cluster
Before doing anything else, ask the user which cluster to connect to. Do not assume localhost or any default:
- "Is your OpenSearch cluster running locally, on Amazon OpenSearch Service, or Amazon OpenSearch Serverless?"
- "What is the endpoint URL?"
- "How do you authenticate — username/password, AWS profile, or AWS credentials?"
Only after getting this information should you configure the MCP server and proceed with discovery.
Phase 2 — Discover Indices
List all indices and identify log-related ones (names containing log, logs, events, audit, otel, cwl, or date-based patterns). Check for data streams and aliases.
Phase 3 — Understand Schema
Inspect the target index mapping. Identify key fields:
- Timestamp —
@timestamp,timestamp,time - Log level —
level,log.level,severityText - Message —
message,body,msg - Service/source —
service.name,host.name,kubernetes.pod.name - Error fields —
error.message,error.stack_trace - Correlation —
traceId,spanId,request_id
Sample a few documents to confirm which fields are actually populated.
Phase 4 — Analyze
Build PPL queries using the actual field names discovered. Common analytics:
- Log volume over time
- Error count by service
- Error rate trends
- Recent errors
- Full-text search in log messages
- Top/rare error messages
- Log pattern discovery (
patternscommand) - Anomaly detection (
adcommand)
Phase 5 — Advanced Analysis
- Cross-index correlation using shared fields (
traceId,request_id) - Anomaly detection with PPL's
adcommand - Complex aggregations via Query DSL fallback
Reference Files
| File | Content |
|---|---|
| log-analytics.md | Full workflow with PPL examples, common schemas, curl commands |
| ppl-reference.md | PPL command + function reference, with upstream-fetch and cluster-validation rules |