Claude
Skills
Sign in
Back

aliyun-arms-query

Included with Lifetime
$97 forever

Use when querying distributed traces or application metrics in Alibaba Cloud ARMS (Application Real-Time Monitoring Service). Use for trace search by service/duration/tags, trace detail and method stack retrieval, application listing, and performance metrics queries.

Cloud & DevOpsscripts

What this skill does


Category: service

# ARMS Trace & Metrics Query

Query distributed traces and application performance metrics via ARMS Python SDK.

## Prerequisites

- Install SDK (virtual environment recommended):

```bash
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -U alibabacloud_arms20190808 alibabacloud_tea_openapi
```

- Configure environment variables:
  - `ALIBABACLOUD_ACCESS_KEY_ID`
  - `ALIBABACLOUD_ACCESS_KEY_SECRET`
  - `ARMS_REGION_ID` (e.g. `cn-hangzhou`)

## Core Concepts

- **Trace query**: Search traces by service name, span name, duration, tags, error status. Time range in epoch milliseconds. Supports PID and exclusion filters.
- **Trace detail**: Retrieve full span tree for a single TraceID. Supports pagination for large traces.
- **Method stack**: Retrieve the method-level call stack for a specific span (requires TraceID, RpcID, and PID).
- **Metrics query**: Query predefined metric tables (e.g. `appstat.incall`) with dimensions, measures, and filters. Requires application PID. Supports ordering.
- **Application PID**: Unique app identifier in format `xxx@regionId`, obtained via `ListTraceApps`.

## Quickstart — Search Traces (Python SDK)

```python
import os, time
from alibabacloud_arms20190808.client import Client
from alibabacloud_arms20190808 import models
from alibabacloud_tea_openapi.models import Config

config = Config(
    access_key_id=os.environ["ALIBABACLOUD_ACCESS_KEY_ID"],
    access_key_secret=os.environ["ALIBABACLOUD_ACCESS_KEY_SECRET"],
    region_id=os.environ.get("ARMS_REGION_ID", "cn-hangzhou"),
)
config.endpoint = f'arms.{config.region_id}.aliyuncs.com'
client = Client(config)

end_ms = int(time.time() * 1000)
start_ms = end_ms - 15 * 60 * 1000

request = models.SearchTracesByPageRequest(
    region_id=config.region_id,
    start_time=start_ms,
    end_time=end_ms,
    service_name="my-app",
    min_duration=500,
    page_number=1,
    page_size=20,
)
response = client.search_traces_by_page(request)
for trace in response.body.page_bean.trace_infos:
    print(f"{trace.trace_id}  {trace.duration}ms  {trace.service_name}")
```

## Quickstart — Query Metrics (Python SDK)

```python
request = models.QueryMetricByPageRequest(
    region_id=config.region_id,
    metric="appstat.incall",
    start_time=start_ms,
    end_time=end_ms,
    interval_in_sec=60000,
    measures=["rt", "count", "error"],
    dimensions=["rpc"],
    filters=[models.QueryMetricByPageRequestFilters(key="pid", value="xxx@cn-hangzhou")],
    current_page=1,
    page_size=10,
)
response = client.query_metric_by_page(request)
for item in response.body.data.items:
    print(item)
```

## Script Catalog

### Search traces

```bash
python skills/observability/arms/aliyun-arms-query/scripts/search_traces.py \
  --service-name my-app \
  --last-minutes 15
```

Optional args: `--region`, `--operation-name`, `--min-duration`, `--service-ip`, `--pid`, `--error-only`, `--tag KEY=VALUE` (repeatable), `--exclusion-filter KEY=VALUE` (repeatable), `--page`, `--page-size`, `--reverse`.

### Get trace detail

```bash
python skills/observability/arms/aliyun-arms-query/scripts/get_trace_detail.py \
  --trace-id 1c34ffee16xxxxxxxx
```

Optional args: `--region`, `--start`, `--end`, `--page`, `--page-size`.

### Query metrics

```bash
python skills/observability/arms/aliyun-arms-query/scripts/query_metrics.py \
  --metric appstat.incall \
  --pid "xxx@cn-hangzhou" \
  --last-minutes 30
```

Optional args: `--region`, `--measures` (comma-separated), `--dimensions` (comma-separated), `--interval`, `--page`, `--page-size`, `--order-by`, `--order ASC|DESC`.

### List traced applications

```bash
python skills/observability/arms/aliyun-arms-query/scripts/list_trace_apps.py
```

Optional args: `--region`, `--app-type TRACE|EBPF`, `--resource-group-id`.

### Get span method stack

```bash
python skills/observability/arms/aliyun-arms-query/scripts/get_stack.py \
  --trace-id 1c34ffee16xxxxxxxx \
  --rpc-id 0.1 \
  --pid "xxx@cn-hangzhou"
```

Optional args: `--region`, `--span-id`, `--start`, `--end`.

## Common Metric Names

| Metric | Description |
|--------|-------------|
| `appstat.incall` | Inbound call stats (RT, count, error) per endpoint |
| `appstat.outcall` | Outbound call stats (HTTP, RPC, DB) |
| `appstat.sql` | SQL execution stats |
| `appstat.exception` | Exception stats |
| `appstat.host` | Host-level metrics (CPU, memory, load) |

Common measures: `rt` (response time), `count` (request count), `error` (error count).
Common dimensions: `rpc` (endpoint), `type` (call type), `exceptionClass`.

## Workflow

1. List traced apps with `list_trace_apps.py` to obtain PID.
2. Search traces with time range, service name, and optional filters via `search_traces.py`.
3. Get detail for a specific trace using its TraceID via `get_trace_detail.py`.
4. Inspect method stack for a slow or errored span via `get_stack.py` (requires TraceID, RpcID, PID).
5. Query aggregated metrics using PID, metric name, and desired measures/dimensions via `query_metrics.py`.

## AccessKey Priority

1. Environment variables: `ALIBABACLOUD_ACCESS_KEY_ID` / `ALIBABACLOUD_ACCESS_KEY_SECRET`
2. Shared credentials file: `~/.alibabacloud/credentials` (profile `default`)

## API Discovery

- Product code: `ARMS`
- API version: `2019-08-08`
- Metadata: `https://api.aliyun.com/meta/v1/products/ARMS/versions/2019-08-08/api-docs.json`

## Validation

```bash
mkdir -p output/aliyun-arms-query
for f in skills/observability/arms/aliyun-arms-query/scripts/*.py; do
  python3 -m py_compile "$f"
done
echo "py_compile_ok" > output/aliyun-arms-query/validate.txt
```

Pass criteria: command exits 0 and `output/aliyun-arms-query/validate.txt` is generated.

## Output And Evidence

- Save artifacts, command outputs, and API response summaries under `output/aliyun-arms-query/`.
- Include key parameters (region, PID, TraceID, time range) in evidence files for reproducibility.

## References

- API reference: `references/api-reference.md`
- Source list: `references/sources.md`

Related in Cloud & DevOps