AGENTAREA_ANALYTICS_ENABLED=false stops all of it.
Synopsis
Usage analytics is not telemetry and not OpenTelemetry. OpenTelemetry traces and Prometheus metrics (AGENTAREA_OTEL_*, AGENTAREA_METRICS_*) go to your own
monitoring; see observability. Usage analytics goes to
AgentArea, at https://analytics.agentarea.ai, and answers product questions:
how many installations reach a first successful run, which connectors fail to
connect, which features are used.
Three sources send it. None of them sends an event per action.
The API and the worker each log one line at start while analytics is on:
GET /v1/analytics, which returns {enabled, install_id, collector_url, edition}, so the backend and the UI cannot disagree. Events go to the collector
without a key.
Analytics never stops AgentArea. If it cannot start, for example because the
database is not reachable at that moment, the process logs an error and runs with
analytics off until it restarts. If the collector does not accept events, the
events are dropped: the first failure is logged as a warning with its traceback,
a continuing outage at most once a day with the number of events dropped, and the
recovery once.
Parameters
Set it on the backend and the worker. The chart and
docker-compose.yaml set both
from the one value. docker-compose.dev.yaml defaults it to false, and the CI
overlay docker-compose.ci.yaml sets it to false.
Identifiers
Each installation has one anonymous id,install_id: a random 32-character hex
string created on first use and stored in the single-row installation table.
It identifies the installation and nothing else.
Where a source needs a user or workspace id, it sends
hmac_sha256(install_id, id) truncated to 16 hex characters. Page views carry
one as user_id, made from the signed-in person’s identity id. The value is keyed
by install_id, and install_id travels with every event: the same person is
countable inside one installation, but the value does not reveal the identity id
and does not match the same person in another installation.
Every event carries this context:
What is sent
Pulse: event installation_pulse
A catalog slug is sent only for an item of AgentArea’s own catalog: a registry
whose source is
https://agentarea-mcp-registry.s3.amazonaws.com/registry/ (the
registries the chart, Docker Compose and agentarea-api reconcile set up) or a
builtin:// registry created by a migration. A connector, skill or bundle from
a registry you added, or from no registry, is sent as custom.
A workspace or user is active in a window when it created a run in it. The
platform workspace, which holds what the operator supplies to every workspace, is
not counted. A failure reason that is not a short code is sent as other.
The install_id, version and edition travel in the event context. The
properties look like this:
Failure counters: event counters
Each entry is {name, labels, count}, counted since the last send. A label value
that is not a short code is sent as other. One send holds at most 1,000
distinct name and label combinations; past that, a count is added to its name
under the single label {"overflow": "true"}.
provider of oauth_connect is one of:
- the issuer’s host name, only when it is one of the public providers
accounts.google.com,api.notion.com,auth.atlassian.com,github.com,gitlab.com,linear.app,login.microsoftonline.com,login.salesforce.com,oauth.yandex.ru,slack.com,www.canva.com,www.figma.com, and is also configured as a platform OAuth app inAGENTAREA_MCP_OAUTH_APPS custom: any other authorization server, your own included, even when it is a platform OAuth appunknown: the flow failed before its connection was known, such as an expired state, a sign-in the provider refused, or a workspace deleted meanwhile
<code> of failed:<code> is one of AgentArea’s own codes
(invalid_state, missing_code, workspace_gone, connection_gone,
not_authorizable, dcr_failed, oauth_app_required, token_exchange_failed,
no_access_token) or an error code of RFC 6749 §4.1.2.1 and §5.2 that the
provider sent back (invalid_request, unauthorized_client, access_denied,
unsupported_response_type, invalid_scope, server_error,
temporarily_unavailable, invalid_client, invalid_grant,
unsupported_grant_type). Any other error the provider sends is other.
reason of run_refused is budget_cap for a workspace or agent spend cap,
no_credits for a balance that ran out, policy_denied for a governance gate,
and other for any other refusal, such as a model with no price. A refusal
because billing could not answer is not counted.
Page views: event page_viewed
Prefetches are not counted, and the same person on the same path counts once per
30 minutes.
Never sent
- names, emails, task text, prompts, model output, file contents
- names of resources you create: a custom connector is sent as
custom - ids from a registry you added, and host names of authorization servers other than the public providers listed above: both are sent as
custom - secrets
- URLs
Example
Turn analytics off.- Docker Compose
- Kubernetes
In Then recreate the containers:
.env:docker compose up -d.GET /v1/analytics returns:
Related
Collect logs and traces
Your own monitoring: JSON logs, OpenTelemetry, Prometheus
Configuration
Every environment variable and the Helm value that sets it
Deploy with Docker Compose
Run the full platform on one host
Deploy on Kubernetes with Helm
Install the agentarea Helm chart