Observability LLM Obs
ElasticOfficialCreated by elastic
- Skill
- Tool integration
- Data and AI
- Apache-2.0
- No issues found
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a structured methodology for investigating LLM and agentic application behavior by querying telemetry data already stored in Elastic. It focuses on four key areas: performance (latency and error rates), resource utilization (token and cost metrics), response quality (guardrails and finish reasons), and agentic orchestration (call-chain reconstruction). The skill emphasizes empirical discovery of field names and ingestion paths to ensure accurate analysis, providing a rigorous process for diagnosing bottlenecks and failures in GenAI workflows.
What it does
- Identifies active LLM ingestion paths including OTel traces and integration metrics.
- Discovers deployment-specific field names for GenAI attributes to ensure accurate queries.
- Reports on latency, throughput, and error rates segmented by model or service.
- Calculates token utilization and reports cost metrics where instrumented.
- Investigates response quality by analyzing finish reasons, content filters, and guardrail events.
- Reconstructs agentic call chains using trace hierarchies to identify bottleneck spans.
When to use it
- When investigating high latency or unexpected error rates in LLM-powered applications.
- When analyzing token consumption patterns or verifying AI cost utilization.
- When debugging agentic workflows to understand how tool-call chains are executing.
- When evaluating response quality, such as identifying blocked prompts or content filter triggers.
- When correlating LLM performance issues with existing SLOs or alerting rules.
Advantages
- Provides a consistent, evidence-based approach to GenAI observability.
- Avoids speculation by requiring empirical discovery of field mappings.
- Enables deep-dive analysis of complex agentic call chains via trace reconstruction.
- Maintains strict output discipline to ensure clear, actionable findings.
- Operates entirely within the Elastic ecosystem without requiring external UI access.
Usage examples
- “How many tokens are we consuming per model?”
- The agent will identify the correct token attributes, cast them to long integers to avoid mapping conflicts, and return a time-series breakdown of input and output tokens per model.
- “Why is our agentic workflow slow?”
- The agent will analyze trace data to reconstruct the call chain, identify the span with the highest duration, and pinpoint the specific bottleneck in the multi-step workflow.
- “Are our prompts being blocked by guardrails?”
- The agent will query for finish-reason attributes or guardrail log events to report the frequency and nature of blocked requests.
- “What is our current LLM spend?”
- The agent will check for the existence of a cost field; if found, it will report the total spend, otherwise it will report token usage and clarify that cost is not instrumented.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/elastic/observability-llm-obs/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip observability-llm-obs.zip -d .agents/skills
Documentation by elastic
LLM and Agentic Observability
Answer questions about monitoring LLMs and agentic components using data actually ingested into Elastic — nothing else. The four questions this skill answers are LLM performance, cost and token utilization, response quality, and call chaining or agentic workflow orchestration.
A given deployment typically uses one or more ingestion paths: APM/OTLP traces, and/or integration metrics and logs. Which one exists is a discovery result, not an assumption — never assume both are present. For ES|QL syntax, commands, and query patterns, use the elasticsearch-esql skill. For service-level latency and error triage that is not LLM-specific, use the observability-sre-triage skill.
<!-- begin-partial: preamble -->
Environment Configuration
This skill executes Elasticsearch operations through the elastic CLI. If the
elastic CLI is not installed, tell the user what it is needed for. Do
not guess credentials, call the HTTP API directly, or attempt other workarounds.
This skill references operations in HTTP-shorthand form (e.g., GET /, GET /_cat/indices, GET /{index}/_mapping,
GET /{index}/_settings/index.mode, POST /_query). The Operations table at the end of this document
maps each shorthand to the equivalent elastic CLI command — always use the CLI rather than calling the HTTP API
directly.
<!-- end-partial: preamble -->
Analysis without cluster access
The CLI check above gates querying the cluster — it does not gate analysis. When the user has already supplied the evidence in their question (metric values, counts, status reasons, log lines, alert payloads, configuration), reason from that evidence and deliver the conclusion.
When you genuinely do need data the user has not provided, still say what you would check and how — name the specific query, index, and field that would settle the question — and then ask for CLI setup. An answer that names the check is useful without a cluster; one that only asks for setup is not.
Jobs to be done
Discover which LLM ingestion path a deployment actually uses before querying anything
Discover the real LLM field names in this deployment, because GenAI attribute naming is not consistent
Report LLM latency, throughput, and error rate by model, service, or time
Report token utilization, and report cost only when a cost field genuinely exists
Investigate response quality: failures, timeouts, finish reasons, content filters, and guardrail events
Reconstruct agentic call chains and find the bottleneck span in a multi-step workflow
Correlate findings with SLOs and alerting rules defined on LLM-related data
Output discipline
Applies to every response produced under this skill.
Commit to the best-supported conclusion. When the evidence points one way, say so. Do not downgrade confidence to sound cautious — hedging on unambiguous evidence is a defect, not humility.
State confidence once, in the conclusion. Do not restate it per bullet.
Do not speculate past the evidence. If a cause was not observed, it does not go in the answer. Say what is unknown and stop.
Report absence as absence. Zero rows means the data is missing or not collected; it never means the underlying condition is healthy. In particular, if no cost field exists, say cost is not instrumented — do not multiply token counts by a guessed per-token price and present the product as a cost figure.
Report the numbers actually found. Quote the token counts, latencies, and error rates the query returned. Do not round them into vague characterizations, and do not carry forward a number from an example in this skill.
Do not pad. No restating the question, no narrating which queries were run unless the result mattered, no summarizing the summary.
End on the finding. No trailing offers such as "want me to dig deeper?". Actionable follow-ups belong in a recommendations list, phrased as recommendations, not as questions.
Where the data lives
| Ingestion path | Index patterns | What it can answer |
|---|---|---|
| OTel / EDOT traces via OTLP | traces-*.otel-*, or the generic traces-* | Per-request latency, tokens, models, finish reasons, and call chains |
| Elastic APM agent traces | traces-apm*, or the generic traces-* | Per-request latency and outcome; GenAI attributes if the SDK adds them |
| APM/OTel metrics | metrics-apm*, metrics-*.otel-* | Aggregated service-level rates and latencies |
| Elastic LLM integration metrics | metrics-<integration>.* (for example metrics-aws_bedrock_agentcore.*) | Aggregate token counts, invocations, latency, sometimes cost |
| Elastic LLM integration logs | logs-<integration>.* | Prompt/response records, guardrail and content-filter events |
Use the generic traces-* pattern to find trace data regardless of whether an Elastic APM agent or OpenTelemetry
collected it. Instrumentation can come from EDOT, OpenLLMetry, OpenLIT, or Langtrace exporting to OTLP — all of them
land LLM and agent spans in the trace data streams.
Only traces can reconstruct a call chain. trace.id, span.id, and parent.id are the only way to rebuild an
agentic call chain. Integration metrics are pre-aggregated and cannot do it — if the question is about orchestration and
only integration metrics exist, say the chain cannot be reconstructed from the available data.
Background reading: LLM and agentic AI observability, EDOT LLM use cases, Observability Labs — LLM Observability.
Process: determine what data is available
Run these in order. Do not skip to step 5.
Verify the connection and detect the version. Call
GET /. The decision this drives is which query language surface is available:build_flavor: "serverless"means all ES|QL features includingTS,TRANGE, andTBUCKETare available. Otherwise useversion.number: on Stack,TSis preview in 9.2 and GA in 9.4, andTRANGEis GA in 9.3.0, so treat Stack 9.4 as the floor for the whole time-series path and fall back toFROMwithBUCKET(@timestamp, ...)below it. Getting this wrong produces a query that fails to parse.Determine which ingestion paths exist. The decision is whether this deployment has traces, integration data, or both — and it changes which questions are answerable at all. List data streams with
GET /_data_stream/<name>(passtraces-*,metrics-*,logs-*) or resolve patterns withGET /_resolve/index/<pattern>. Look for trace data streams,metrics-apm*, and anymetrics-*orlogs-*matching a known LLM integration dataset. If neither path has LLM data, say so and stop — do not answer from general knowledge about the model provider.Discover the real LLM field names. The decision is which exact field paths to write into ES|QL, and it cannot be guessed. Naming differs across instrumentations:
gen_ai.*versusllm.*versus integration-specific names, and the semantic conventions themselves have shifted (older instrumentation emitsgen_ai.system, newer emitsgen_ai.provider.name). UseGET /_field_capswith a field pattern such as*gen_ai*,*llm*,*token*,*cost*, or readGET /<index>/_mapping, then sample a document to confirm the values are populated. Attribute nesting differs by ingestion path — OTel-native trace data streams expose span attributes asattributes.<name>(and often as a bare passthrough<name>), not asspan.attributes.<name>. Confirm which form resolves before writing a query. See references/genai-fields.md for the attribute catalog and the resolution rules.Decide whether a cost field exists. Cost is not part of the OpenTelemetry GenAI specification. Some instrumentations add a custom attribute such as
llm.response.cost.usd_estimate, and some integrations expose a cost metric, but many deployments have neither. Look for it explicitly in step 3. If it is absent, the answer to a cost question is that cost is not instrumented — report token counts instead and name the gap.Choose ONE consistent source per question. When both APM traces and integration metrics exist, pick one and use it for the whole answer. Mixing them double-counts and produces two different numbers for the same quantity, because the integration polls the provider's own accounting while the traces record what the client observed. Route by question type: traces for per-request analysis, call chains, and anything needing a trace hierarchy; integration metrics for aggregate token and cost totals over long windows. State which source the answer came from.
Check alerts and SLOs when relevance is plausible. The decision is whether a degradation is already known and tracked. Find rules with
GET kbn:/api/alerting/rules/_findand SLOs withGET kbn:/api/observability/slos, then filter to those targeting LLM-related services or integration metrics — the field names from step 3 tell you which rules are related. Firing alerts, or SLOs in violated or degrading status, are evidence of degraded performance. Note that the SLO API'ssli.kql.customindicator takes KQL rather than ES|QL; that is an API contract, not a recommendation to use KQL elsewhere.
Use cases and query patterns
Write queries with POST /_query. Always bound the time range, add service.name when present, and LIMIT results.
Use coarse buckets when only a trend is needed rather than scanning a wide window at fine granularity.
| Question | Traces path | Integration path |
|---|---|---|
| Latency, throughput, error rate | Filter on the GenAI operation or model attribute; COUNT(*) per bucket, AVG(span.duration.us), and failures via event.outcome == "failure" | Request-rate, latency, and error metrics by model dimension |
| Tokens and cost | SUM the input and output token attributes by time, model, or service; add a cost attribute only if one exists | Token and cost metrics aggregated by time and model |
| Response quality and safety | event.outcome, error.type, and the finish-reason attribute; prompts and responses only if captured and not redacted | Guardrail blocks, content-filter events, and policy violations |
| Call chaining and orchestration | Traces only — group by trace.id, walk parent.id to span.id, aggregate by span name or GenAI operation | Not answerable — metrics are pre-aggregated |
On the trace path, per-span latency comes from duration (nanoseconds, populated on every OTel-native span) or
span.duration.us (microseconds, an APM-compatibility field that is null on many spans — sorting on it can silently
drop the slowest step). Confirm which is populated before using it. The slowest child span is the bottleneck.
Aggregating by span name or the GenAI operation attribute shows the distribution of step types across a workflow —
retrieval, LLM call, tool use.
For integration-specific data streams and field names — OpenAI, Azure OpenAI, Azure AI Foundry, Amazon Bedrock, Bedrock AgentCore, GCP Vertex AI — see references/integrations.md. For longer worked queries including the trace-hierarchy walk and the time-series integration pattern, see references/esql-recipes.md.
Examples
The field paths below are illustrative. Confirm the real paths from step 3 before running anything — this skill's own method is to discover field names first, and the correct nesting depends on the ingestion path.
"How many tokens are we burning per model?" — confirm the token attributes exist and resolve, then sum them by model and time bucket. Report the totals returned:
FROM traces-*
| WHERE @timestamp > NOW() - 24 hours AND attributes.gen_ai.request.model IS NOT NULL
| EVAL in_tok = TO_LONG(attributes.gen_ai.usage.input_tokens),
out_tok = TO_LONG(attributes.gen_ai.usage.output_tokens)
| STATS input_tokens = SUM(in_tok), output_tokens = SUM(out_tok)
BY hour = BUCKET(@timestamp, 1 hour), attributes.gen_ai.request.model
| SORT hour
| LIMIT 500"What is our LLM spend?" — look for a cost field with GET /_field_caps on *cost* before querying. If none
exists, report token utilization and state plainly that cost is not instrumented in this deployment; adding a cost
attribute at the instrumentation layer, or enabling an integration that reports cost, is the fix. Do not multiply tokens
by a price you assumed.
"Which model is slowest, and is it failing?" — latency and error rate in one pass, grouped by model:
FROM traces-*
| WHERE @timestamp > NOW() - 24 hours AND attributes.gen_ai.request.model IS NOT NULL
| STATS request_count = COUNT(*),
failures = COUNT(*) WHERE event.outcome == "failure",
avg_duration_us = AVG(span.duration.us)
BY attributes.gen_ai.request.model
| EVAL error_rate = failures::double / request_count
| SORT avg_duration_us DESC
| LIMIT 100"Why is our agent slow?" — this needs the trace hierarchy, so it requires trace data. Find the traces containing
more than one LLM or tool span, ranked by time spent in those spans, then walk into the worst trace by trace.id to
find the bottleneck span. Because the WHERE restricts to LLM spans, the sum below is LLM time, not end-to-end trace
duration — name the column so it cannot be misread as wall-clock latency:
FROM traces-*
| WHERE @timestamp > NOW() - 3 hours AND attributes.gen_ai.operation.name IS NOT NULL
| STATS llm_span_count = COUNT(*), llm_duration_us = SUM(span.duration.us) BY trace.id
| WHERE llm_span_count > 1
| SORT llm_duration_us DESC
| LIMIT 50"Are prompts getting blocked?" — check the finish-reason attribute and error.type on the trace path, or the
integration's guardrail log events. A finish reason such as a content filter is a quality signal, not a transport error.
"Is there anything already alerting on this?" — GET kbn:/api/alerting/rules/_find and
GET kbn:/api/observability/slos, filtered to the LLM-related services or integration metrics identified in step 2.
Guidelines
Answer only from data ingested into Elastic. Do not describe or rely on other vendors' UIs, consoles, or products. If the data is not in Elastic, the answer is that it is not in Elastic.
Discover before querying. Confirm the ingestion path (step 2) and the field names (step 3) from
GET /_field_caps,GET /<index>/_mapping, or a sample document. Never guess an attribute path.One consistent source per question. Do not blend APM traces and integration metrics in a single answer.
Cost is not in the GenAI spec. Treat a cost figure as available only when a cost field is present in the data.
Only traces reconstruct chains. If the question is about agentic orchestration and only integration metrics exist, say the chain is not reconstructable rather than approximating it from aggregates.
Gate time-series syntax on the version. Use
TSwithTRANGEandTBUCKETon Serverless or Stack 9.4+; fall back toFROMwithBUCKET(@timestamp, ...)below that. Alias the bucket (BY bucket = TBUCKET(1 hour)) and sort on the alias.Expect type conflicts on dynamically mapped attributes. Token attributes are frequently mapped as
integerin one backing index andlongin another after a rollover, which makes ES|QL refuse the field. Cast withTO_LONG(...)in anEVALbefore aggregating.No Kibana UI dependency. Prefer ES|QL and Elasticsearch APIs; use Kibana APIs only for SLOs and alerting. Never instruct the user to open the Kibana UI.
For ES|QL syntax and query patterns use the elasticsearch-esql skill; the
TScommand reference applies on Stack 9.4+ and Serverless, and theFROMcommand reference applies elsewhere.
Operations
| HTTP API (shorthand) | elastic CLI command |
|---|---|
GET / | elastic es info |
GET /_data_stream/<name> | elastic es indices get-data-stream --name '<name>' |
GET /_resolve/index/<pattern> | elastic es indices resolve-index --name '<pattern>' |
GET /<index>/_mapping | elastic es indices get-mapping --index '<index>' |
GET /_field_caps | elastic es field-caps --index '<index>' --fields '<fields>' |
POST /_query | elastic es esql query --format tsv --query '<esql>' |
GET kbn:/api/alerting/rules/_find | elastic kb alerting get-alerting-rules-find --filter '<filter>' |
GET kbn:/api/observability/slos | elastic kb slo find-slos-op --space-id '<space>' --kql-query '<kql>' |
Files
- ATTRIBUTION.mdAdded by AutoGineer958 B
- LICENSELicence file added by AutoGineer11.1 KiB
- SKILL.md19.3 KiB
- references/esql-recipes.md8.4 KiB
- references/genai-fields.md6.6 KiB
- references/integrations.md4.6 KiB
LICENSE
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2026 Elasticsearch BV
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
The author says: Requires the `elastic` CLI (>= 0.2) with `es` and `kb` support, and an Elasticsearch deployment holding LLM telemetry from APM/OTLP traces or an Elastic LLM integration. Base floor is Elasticsearch 8.11+ or Serverless. The time-series path for integration metrics needs `TS` (Stack GA 9.4) and `TRANGE` (Stack GA 9.3); both are GA on Serverless. Below Stack 9.4 fall back to `FROM` with `BUCKET`. SLO and alerting lookups require Kibana. No Kibana UI is required.
Security
No issues found by our static scan· No issues found
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- elastic
- Publisher
- Elastic (Official)
- Source
- elastic/agent-skills · skills/observability/llm-obs · commit 09d879d
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Also distributed in
- elastic/agent-skills
AutoGineer is not affiliated with or endorsed by elastic.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download observability-llm-obs.zip