Use this skill for any question involving telemetry data: "investigate an issue", "debug a problem", "find out why something is slow", "check error rates", "analyze user behavior", "understand a production incident", "query telemetry data", "look at logs", "search logs", "find errors", "find stack traces", "filter by severity", "check traces", "examine spans", "investigate request latency", "debug service-to-service calls", "look up a trace ID", "analyze RUM data", "check frontend performance", "frontend errors", "Core Web Vitals", "JavaScript exceptions", "query metrics", "check CPU usage", "run a PromQL query", "check error rate", "look up a metric", "check memory usage", "how do I write a DataPrime query", "DataPrime syntax", or wants to answer questions using observability data from logs, metrics, traces, RUM, or APM.
79
75%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Passed
No known issues
Optimize this skill with Tessl
npx tessl skill review --optimize ./skills/cx-telemetry-querying/SKILL.mdUse this skill as the entry point for any investigation, debugging, or data question that may be answered from telemetry data. It helps you decide where the relevant signal lives (metrics, logs, traces, RUM) and tells you which reference files to load before querying.
Before querying, load the reference files for the chosen pillar:
| Pillar | Load these files |
|---|---|
| Logs | references/dataprime-reference.md + references/logs-querying.md |
| Spans / Traces | references/dataprime-reference.md + references/spans-querying.md |
| Metrics | references/promql-guidelines.md + references/metrics-querying.md |
| RUM (frontend) | references/dataprime-reference.md + references/logs-querying.md + references/rum-querying.md + references/rum-fields.md |
| DataPrime syntax only | references/dataprime-reference.md |
All query commands (cx logs, cx spans, cx metrics, cx dataprime, cx search-fields) are read-only and work in --read-only mode. They never modify data and can be run freely without --yes.
Use this table for obvious cases where one pillar is the clear first choice:
| Question Type | First Choice | Fallback |
|---|---|---|
| UI behavior, page load, frontend errors | RUM | Traces (if backend-related) |
| Endpoint latency, throughput, error rates | Metrics | Traces (for per-request detail) |
| Service-to-service dependencies, request flow | Traces | Logs (for debug output) |
| Specific error messages, stack traces | Logs | Traces (for request context) |
| Infrastructure health (CPU, memory, disk) | Metrics | - |
| Business events (purchases, signups) | Depends - see Discovery Workflow | - |
For ambiguous questions (e.g., "How much money did users spend last week?"), the signal could live in any pillar. Follow the Discovery Workflow below.
When the answer could reside in multiple pillars, run discovery in parallel to find the best source.
Check if a relevant metric exists:
cx metrics search --name '*transaction*'
cx metrics search --name '*payment*'
cx metrics search --name '*revenue*'
cx metrics search --description "total purchase amount"If a matching metric is found, load references/promql-guidelines.md + references/metrics-querying.md and continue.
Use semantic field search to find relevant DataPrime paths:
cx search-fields "transaction amount" --dataset logs
cx search-fields "payment total" --dataset spans
cx search-fields "purchase value" --dataset logs --limit 10Requirements: cx search-fields needs a Coralogix API key or OAuth on the active profile. If credentials are missing, prompt the user to run cx profiles add.
If matching fields are found:
references/dataprime-reference.md + references/logs-querying.mdreferences/dataprime-reference.md + references/spans-querying.mdWhen discovery results are ambiguous or you need to validate what a metric/field actually represents, search the codebase:
prometheus.NewCounter, metrics.record)logger.info("transaction", ...))span.setAttribute("purchase.amount", ...))This confirms the semantic meaning and helps you choose the right pillar.
Based on discovery results, pick the pillar with the clearest signal, load its reference files (see Loading References), then query.
If your initial route yields no results, pivot to another pillar.
Example pivot paths:
Do not stop after one failed attempt. Try at least two pillars before concluding the data does not exist.
| Command | Purpose | When to Use |
|---|---|---|
cx schema | Output the full command tree as JSON | Discover all available commands and their flags |
cx metrics search --name <pattern> | Find metrics by name | First step for metrics discovery |
cx metrics search --description <text> | Semantic metric search | When you know what you want but not the name |
cx search-fields "<text>" --dataset logs | Find log fields by description | Discovery for log-based questions |
cx search-fields "<text>" --dataset spans | Find span fields by description | Discovery for trace-based questions |
cx spans "filter $l.serviceName == '<service>'" --limit 10 | Search spans by service | When investigating a specific service |
cx dataprime list | List DataPrime commands/functions | When building log or span queries |
Question: "How much money did people spend on the platform last week?"
Approach:
cx metrics search --name '*revenue*' and cx metrics search --name '*transaction*'cx search-fields "transaction amount" --dataset logscx search-fields "payment total" --dataset spanspayment_total_usd exists, load metrics references and run a range querypurchase.amount attribute, load spans referencesQuestion: "What's the average latency of the checkout route?"
Approach:
cx metrics search --name '*checkout*latency*' or cx metrics search --name '*http*duration*'histogram_quantileQuestion: "Why is the dashboard page loading slowly for users?"
Approach:
references/rum-querying.md + references/rum-fields.md + references/logs-querying.md + references/dataprime-reference.mdQuestion: "Why are users getting 500 errors on the payment endpoint?"
Approach:
Not every question is answered by querying data. If the user's intent is operational rather than investigative, route to the appropriate workflow skill:
| User Intent | Route To |
|---|---|
| Reducing costs, checking usage, TCO policies | cx-cost-optimization |
| Incident triage, SLO breaching, who got paged | cx-incident-management |
| Setting up monitoring, webhooks, notifications | cx-observability-setup |
| Configuring parsing rules, enrichments, E2M | cx-data-pipeline |
| Access audit, API keys, user management | cx-platform-admin |
| Creating or managing dashboards | cx-create-dashboard |
defdc4d
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.