Skip to main content

archestra-dev-observability

Use when changing Archestra tracing, metrics, OpenTelemetry, Tempo, Grafana, Prometheus, LLM/MCP spans, observability labels, or local observability setup.

소스 정보

저장소
archestra-ai/archestra
최근 소스 활동
2026년 9월 10일 15:26
감지된 SKILL.md 언어
영어
스타
4,430
포크
1,229

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
archestra-dev-observability
description
Use when changing Archestra tracing, metrics, OpenTelemetry, Tempo, Grafana, Prometheus, LLM/MCP spans, observability labels, or local observability setup.
# Archestra Observability Use this skill before changing tracing, metrics, span naming, metric labels, or local observability setup. Run commands from `platform/` unless specifically instructed otherwise. ## Naming new attributes and metrics Before introducing any new span attribute or metric name, look it up — do not coin a name from intuition. - **Span attributes**: search the OTEL semantic-convention registry and use the existing attribute verbatim if one fits. Registry: https://opentelemetry.io/docs/specs/semconv/registry/attributes/gen-ai/ (wider set: https://opentelemetry.io/docs/specs/semconv/registry/attributes/). Example: prompt-cache tokens are `gen_ai.usage.cache_read.input_tokens` and `gen_ai.usage.cache_creation.input_tokens`, not a custom `archestra.usage.*`. Only use an `archestra.*` name when nothing in the registry fits, and say why in a comment. - **"Not yet stable" is not a reason to avoid a standard name.** The whole `gen_ai.*` namespace is Development-stability, including the `gen_ai.usage.*` attributes already emitted here — match that bar, don't custom-namespace to dodge it. - **Metrics**: match the existing `llm_*` / prom-client family and label names in `metrics/`; don't introduce a new metric style. Add a label value to an existing metric only if it won't change what current aggregates mean — otherwise add a dedicated metric (cache tokens use a separate `llm_cache_tokens_total`, not new `type` values on `llm_tokens_total`). ## Local setup ```bash tilt trigger observability docker compose -f dev/docker-compose.observability.yml up -d ``` Both commands are equivalent — the tilt resource wraps the same compose file — and start the full observability stack with pre-configured datasources: Tempo, Loki, OTEL Collector, Prometheus, and Grafana. ## Local URLs - Tempo API: `http://localhost:3200/`. - Grafana: `http://localhost:3002/`. - Prometheus: `http://localhost:9090/`. - Backend metrics: `http://localhost:9050/metrics`. ## Tracing - Follow OTEL GenAI Semantic Conventions (see "Naming new attributes and metrics" — check the registry before adding any attribute): https://opentelemetry.io/docs/specs/semconv/gen-ai/gen-ai-agent-spans/. - LLM spans use `gen_ai.agent.id`, `gen_ai.agent.name`, `gen_ai.provider.name`, `gen_ai.request.model`, `gen_ai.operation.name`, and `archestra.agent.label.<key>` for dynamic agent labels. - MCP spans use `gen_ai.tool.name` and `mcp.server.name`. - Team metadata uses the custom `archestra.<scope>.team.*` namespace (no OTEL registry equivalent), where scope is the principal the teams belong to — `agent` (the executing agent's teams) or `user` (the requesting user's teams). `archestra.<scope>.team.ids` / `.names` are array-valued (a principal can belong to multiple teams), and `archestra.<scope>.team.label.<key>` carries team labels merged per key across the principal's teams. Set via `setTeamAttributes(span, teams, scope)` in `observability/tracing/attributes.ts`; agent teams come from `AgentTeamModel.getTeamLabelInfoForAgent` and user teams from `TeamModel.getTeamLabelInfoForUser`, resolved once per request. - Session tracking uses `gen_ai.conversation.id` from the `X-Archestra-Session-Id` header. - Span names are `chat {model}`, `generate_content {model}`, and `execute_tool {tool_name}`. - Agent label keys are fetched from the database on startup and used as dynamic Prometheus metric label dimensions (see Metrics); the tracing SDK's resource carries only `service.name`/`service.version`. On spans, agent labels are set per-request via `setAgentAttributes`. - Traces are stored in Grafana Tempo. - User identity is tracked with `archestra.user.id`, `archestra.user.email`, and `archestra.user.name` when available. - LLM spans include `archestra.cost` in USD and `gen_ai.usage.total_tokens`. ## Metrics - Prometheus metrics `llm_request_duration_seconds` and `llm_tokens_total` include `provider`, `model`, `agent_id`, `agent_name`, `agent_type`, `source`, and dynamic agent labels as dimensions — deliberately NOT `external_agent_id`, which is client-supplied and unbounded and would explode series cardinality. Do not add it back. - `agent_id` is internal. - `external_agent_id` comes from the client-provided `X-Archestra-Agent-Id` header and is a label only on `agent_runs_total`. - MCP metrics include `agent_id`, `agent_name`, and `agent_type`. - Metrics are reinitialized on startup with current label keys from the database.
GitHub에서 보기