Service Catalog Skill
Use this skill to discover and query Service Catalog entities — services, databases, operations, database operations, JVMs, JVM GC, Kubernetes pods, and transactions — and their columnar metrics (latency, error rate, health, resource usage, etc.) via the v2 Service Catalog API.
CLI Commands
- All commands are read-only and support
-o json/-o toonfor structured output. - Entity type accepts short forms:
service,database,operation,database-operation,jvm,jvm-gc,k8s-pod,transaction(case-insensitive, hyphens or underscores). The full proto name (ENTITY_TYPE_K8S_POD) also works. Unknown values are rejected client-side before any request is made. --start/--endacceptnow,now-1h-style relative expressions, or RFC3339 timestamps.--columnis required and repeatable — discover valid column ids withcx service-catalog schema <entity-type>first; the API rejects unknown ones.--filter label=value1,value2is repeatable across distinct labels only (filters AND together); combine multiple values for the same label with commas rather than repeating the flag — repeating a label is rejected client-side.--aggregationistable(default behavior when combined with--limit/--sort-column/--sort-order) ortimeseries.--limit,--sort-column, and--sort-orderonly apply totable— the backend silently ignores them fortimeseries, so the CLI rejects that combination up front rather than sending a request whose flags are quietly dropped.entity-datapercent-encodes the entity id for you — pass it as returned byentities(e.g.checkout/api), quoted if it contains/.
Inspection Workflow
Four steps, and only because each one supplies an input the next one requires:
entity-types gives valid <entity-type> values, schema gives valid
--column ids, entities gives the entity-id for a drilldown.
-
Discover what entity types exist — never guess, they vary by account:
-
Check the schema for one entity type to find valid column ids and filterable/groupable labels:
-
List known entities of that type (e.g. service names):
-
Query data — aggregated across all entities, or scoped to one. Column ids, filter/group-by labels, and entity ids below are placeholders — always substitute values returned by
schema/entitiesfor the entity type in question, they vary by account and entity type:
Examples
The commands below use service and k8s-pod for concreteness, but every
<column-id>, <filterable-label>, <groupable-label>, and <entity-id>
must come from that entity type's own schema/entities output — never
assume a column or label from one entity type exists on another.
Top 5 entities by a metric in the last hour
Filter to one label value
Group by a label
Kubernetes pod resource saturation
Latency over time for one entity
Just the rows
Key Principles
- Discover before querying —
entity-typesandschemaare cheap and answer "what's valid here" before spending adata/entity-datacall on a guess. --columnvalues are per-entity-type — a column valid forservicemay not exist fork8s-pod; always re-checkschemawhen switching entity types.- Malformed responses are errors, not silent empty results — a column that is neither a value nor an error (or both) fails loudly rather than producing a partial or empty row, so a non-zero exit means investigate, not "no data".
- A column-level error is not a command failure — an individual column can
come back as
{"error": "..."}inside an otherwise successful row (e.g. a query timeout for just that column); check per-column before assuming the whole request failed. tablevstimeseriesare mutually exclusive result shapes —tableresponses are flat rows suitable for-o json | jq '.rows';timeseriesresponses nest datapoints per series and are best consumed as raw JSON rather than forced into a table.- Use
-o jsonwithjqfor filtering; use-o toonfor token-efficient output in agent contexts. - Multi-profile fan-out works on every subcommand — repeat
-p <profile>to compare the same entity type/data across accounts; rows and series are tagged withprofilewhen more than one is given.
Related Skills
cx-infra— infrastructure resource health (hosts, containers) is a distinct concept from Service Catalog entity health; usecx-infrafor host/instance-level monitoring and this skill for application/service-level APM entities.cx-telemetry-querying— once a service or pod name surfaces from this skill's commands, pivot to raw telemetry:cx logs "filter $l.subsystemname == '<service>'"orcx search-fields "<name>" -s valueto find related log/span fields. Correlate a latency or error spike with the underlying logs/spans.cx-alerts—cx alerts list --name "<service-name>"finds alert definitions matching a service surfaced by this skill.cx-dashboards—cx dashboards search "<service-name> ..."finds dashboards built around a service found here.


