> ## Documentation Index
> Fetch the complete documentation index at: https://docs.aiaxoniq.com/llms.txt
> Use this file to discover all available pages before exploring further.

# APM

> How the APM section turns your spans into projects, request rates, error rates and response times — and which of its views are served today.

APM shows how your services answer requests. Every number in it is computed
from the spans your services send — there is no separate APM agent and no
separate APM data stream.

<Info>
  **Before you start.** You need traces arriving from at least one service —
  see [Send data with OpenTelemetry](/send-data/otel/collector). Each service
  must set `service.name`, because that is how APM decides which project a span
  belongs to.
</Info>

## Where to start

The APM section opens on three views. Everything else is reached by choosing a
project first.

| View            | What it shows                                                                                                                                                          |
| :-------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Projects**    | Every project on your account and every service reporting spans, with language, response time, requests, failure rate and status. This is the default view.            |
| **Trace**       | The trace explorer across your whole account. It is the same explorer as the [Traces](/guides/traces/overview) section.                                                |
| **Service map** | How one project's services call each other. It needs a project, so with none chosen it sends you to the project list. See [Service map](/guides/services/service-map). |

## What a project is

A project is a named record that **claims services by name**:

* A project claims the service whose `service.name` equals the project's own
  name, with no further setup. A project called `checkout` shows the spans of a
  service reporting as `checkout`.
* You can add more services to it under **Manage → Settings → Services**, for a
  project named after a business capability that spans several services — for
  example `checkout` covering `cart`, `catalogue` and `user`.

A service that sends spans but that no project claims still appears in the
**Projects** list, marked **unregistered**. Clicking it opens its traces, but it
has no project dashboard until a project claims it.

To create a project, choose **Add APM project** on the **Projects** view. The
dialog offers four types — APM, Infrastructure, Logs and Kubernetes — and, for
APM, a language. The type does **not** change which telemetry the project
covers; it is a label and part of the project's identity. Creating the same
name, type and language twice returns the existing project rather than a second
one.

<Note>
  **A service belongs to one project.** Adding a service that another project
  already claims is refused with **Already mapped**, naming the project that
  holds it. Remove it there first, then add it here.
</Note>

## Inside a project

Choosing a project opens its dashboard, with a side navigation grouped into
five parts:

| Group           | Views                                                                                                          |
| :-------------- | :------------------------------------------------------------------------------------------------------------- |
| **Monitor**     | Dashboard, Transactions, Errors, HTTP Failures                                                                 |
| **Investigate** | Session Traces, Service Map, Compare                                                                           |
| **Catalog**     | Services, Databases, External requests                                                                         |
| **Runtime**     | Hosts, Runtime metrics — plus JVM metrics and JVM threads for a Java project, and Go routines for a Go project |
| **Manage**      | Deployments, Versions, Reports, Alerts, Settings                                                               |

Every view uses the time range in the toolbar. Changing it reloads every panel
together, so no two panels on a page describe different windows.

### The project dashboard

The dashboard answers "is anything wrong" first and "where" second:

* **Golden signals** across the top — services, requests, span error rate and
  average response time — each compared with the window immediately before the
  current one.
* **Requests over time** and **Errors over time**.
* **Response time**, switchable between the average per service, the time spent
  in each layer, and p50/p95/p99 percentiles for the whole project.
* **Status codes** (HTTP responses only) and a **Response time distribution**.
* **Slowest services**, **Error rate by service**, **Apdex** and **Slowest
  transactions**.

### How the numbers are counted

| Figure              | Counted from                                                                                                                                                                |
| :------------------ | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Requests**        | Server spans — the inbound side of a request at every hop. A request that makes a database call and calls two services is still one request.                                |
| **Response time**   | The same server spans, as an average and as p95/p99.                                                                                                                        |
| **Span error rate** | Spans whose OpenTelemetry status is `ERROR`, as a share of **all** spans, not only requests.                                                                                |
| **Transactions**    | Spans that carry both an HTTP method and `http.route`, grouped by service, route and method.                                                                                |
| **Errors**          | Failing spans grouped by their normalised status message, so the same fault with a different id, address or number in its message is one group.                             |
| **Apdex**           | Computed by the server from the latency distribution against the project's **Apdex target (T)**, which you set in **Manage → Settings**. A new APM project starts with 0.5. |

<Note>
  **Requests are not spans.** An earlier way of counting treated every span as a
  request, which inflates throughput by each service's fan-out. APM counts
  server spans only, so its request figures are lower than the span count in
  the trace explorer, and that is expected.
</Note>

## How APM relates to traces

APM and the trace explorer read the same spans.

* **Session Traces** inside a project lists that project's traces. A trace the
  project took part in arrives **whole**, across every service it crossed —
  the project decides which traces are listed, not which spans of a trace you
  see.
* **Trace** on the account-level strip lists every trace on the account.
* Opening a trace from an error, an HTTP failure or a slow database operation
  shows the same waterfall. See [Exploring traces](/guides/traces/overview)
  for reading it.

## Views that are not served yet

Some views in the project navigation are built but wait on an API route that
does not exist yet. **External requests**, **JVM metrics**, **JVM threads** and
**Go routines** are among them. These views say so — "This needs …, which the
API does not serve yet" — rather than drawing an empty chart that would look
like an idle service.

## Troubleshooting

<AccordionGroup>
  <Accordion title="My project says it is not reporting yet">
    A project with no telemetry in the selected window shows **\<name> is
    not reporting yet**. Check that your service sets `service.name` to exactly
    the project's name — for an OpenTelemetry SDK, `OTEL_SERVICE_NAME` — or add
    the name your service reports under **Manage → Settings → Services**. Then
    widen the time range: a service that was quiet in the window has nothing to
    show in it. The page fills in once the first span arrives.
  </Accordion>

  <Accordion title="The Projects list is empty">
    **Nothing reporting, and no projects registered** means no service has sent
    a span and no project exists yet. A row appears as soon as a service sends a
    span or a project is created. See
    [Send data with OpenTelemetry](/send-data/otel/collector).
  </Accordion>

  <Accordion title="A service shows as unregistered">
    It is sending spans, but no project claims its name. Create a project with
    that name, or add the service to an existing project under
    **Manage → Settings → Services**.
  </Accordion>

  <Accordion title="Project not found, or projectId is required">
    **Project not found** means the link names a project that does not exist on
    this account — it may have been deleted, or belong to another organization.
    **projectId is required** means the address holds something other than a
    project id, such as a service name. Open the project from the **Projects**
    list instead.
  </Accordion>

  <Accordion title="A route is missing from Transactions">
    Transactions lists spans that carry both an HTTP method and `http.route`. A
    span without the route — common when a framework is not auto-instrumented — is still
    counted in the dashboard's requests and response time, but it has no route
    to be listed under.
  </Accordion>
</AccordionGroup>

## Next

<CardGroup cols={2}>
  <Card title="Exploring traces" icon="share-nodes" href="/guides/traces/overview">
    Read the traces behind these numbers.
  </Card>

  <Card title="Services and the service map" icon="diagram-project" href="/guides/services/service-map">
    How your services call each other.
  </Card>

  <Card title="Real user monitoring" icon="eye" href="/guides/rum/overview">
    What your users' browsers experience.
  </Card>

  <Card title="Alerting" icon="bell" href="/guides/alerts/overview">
    Get notified when a number moves.
  </Card>
</CardGroup>
