Skip to main content

Install the agent on a Linux host

This tutorial takes you from nothing to your first telemetry flowing into AtherOps on a single Linux host. It takes about five minutes and assumes no prior AtherOps knowledge. Follow every step in order.

By the end you will have:

  • the atherops-otel-agent running under systemd,
  • the host registered and showing online in AtherOps,
  • host metrics, logs, and (optionally) traces flowing to the platform.

The agent is installed from releases.atherops.com (Cloudflare R2). Current version: 0.1.2.

Before you start

You need:

  • A Linux host (amd64 or arm64) where you have root / sudo.
  • Outbound HTTPS (port 443) from the host to AtherOps.
  • These commands installed on the host: curl, sha256sum, tar, and jq. Most distros have them; minimal images (Alpine, Amazon Linux minimal) often lack jq; install it first. The installer checks for them and stops with a clear message if one is missing.

Step 1: Generate an install token

The installer authenticates the host using a one-time install token.

  1. In the AtherOps web app, go to Settings → Hosts → Install Token.
  2. Click to generate a token. AtherOps shows you the full install command with the token already filled in.

Each token registers exactly one host. Generate a fresh token per host. If a token is expired or already used, registration fails with HTTP 401 (you will see how to recover below).

Step 2: Run the one-liner

Copy the command from the Hosts page. It looks like this:

curl -sSL https://releases.atherops.com/otel-agent/install.sh | sudo INSTALL_TOKEN=<token> bash

Replace <token> with your token (the Hosts page does this for you).

:::danger Common mistake: put INSTALL_TOKEN= after sudo, not before This is the #1 first-run failure. sudo drops environment variables before it runs the script, so the token must be set on the sudo command itself.

Correct (token after sudo):

curl -sSL https://releases.atherops.com/otel-agent/install.sh | sudo INSTALL_TOKEN=<token> bash

Wrong (token before sudo; the script never sees it, registration fails):

# ~~INSTALL_TOKEN=<token> sudo ...~~ ← sudo strips INSTALL_TOKEN, install fails
curl -sSL https://releases.atherops.com/otel-agent/install.sh | INSTALL_TOKEN=<token> sudo bash

Copy the command from the Hosts page exactly; it already uses the correct form. :::

Step 3: Watch the install

Every line is prefixed with [atherops] so it is easy to grep in CI logs. A successful run looks like this:

[atherops] Detecting platform… os=linux arch=amd64
[atherops] Fetching version manifest… https://releases.atherops.com/otel-agent/manifest.json
[atherops] Target versions agent=0.1.2 otelcol=0.102.0
[atherops] Downloading otelcol-contrib… 0.102.0/linux_amd64 (this may take a moment)
[atherops] Verifying sha256…
[atherops] OK sha256 matches otelcol-contrib-linux_amd64
[atherops] Installing agent binary… /usr/local/bin/atherops-otel-agent
[atherops] OK Installed atherops-otel-agent /usr/local/bin/atherops-otel-agent
[atherops] Writing default config… /etc/atherops/config.yaml
[atherops] Installing systemd unit… /etc/systemd/system/atherops-otel-agent.service
[atherops] Registering with platform… https://api.atherops.com
[atherops] OK Registered host_id=h_7f3a2b hostname=prod-web-01
[atherops] Starting service…
[atherops] OK atherops-otel-agent started (systemd)

AtherOps OTel Agent installed successfully.
Agent version : 0.1.2
Collector : otelcol-contrib 0.102.0

Check status : systemctl status atherops-otel-agent
View logs : journalctl -u atherops-otel-agent -f
Config file : /etc/atherops/config.yaml

The exact version numbers depend on the current manifest. The important thing is the OK sha256 matches line: the collector binary was checksum-verified before it was installed or run. If that check fails, the installer aborts and nothing is installed; see Troubleshooting.

Step 4: Verify the service is running

Check the systemd unit:

systemctl status atherops-otel-agent

You want to see Active: active (running).

Tail the agent's logs:

journalctl -u atherops-otel-agent -f

Within a few seconds you should see lines like these (logfmt):

level=info msg="agent started" agent_version=0.1.2 host_id=h_7f3a2b
level=info msg="collector started" collector_version=0.102.0 pid=3821
level=info msg="registration complete" host_id=h_7f3a2b

Confirm both version numbers from the command line:

atherops-otel-agent --version
atherops-otel-agent 0.1.2
otelcol-contrib 0.102.0

Both lines must show a real version. (If the second line says unknown, the collector binary has not been resolved yet. See Troubleshooting.)

Step 5: Confirm the host appears in AtherOps

  1. Open the Hosts page in the AtherOps web app.
  2. Find your host's card. It shows an Agent version row and a Collector version row, and a green dot with online once the first heartbeat lands (within ~30 seconds).

Your host is now sending metrics and logs to AtherOps. Host metrics appear in your metrics views; journald and /var/log/syslog logs flow to the logs store.

Host metrics and logs flow automatically. Traces require your applications to send OTLP spans to the agent. See Enable traces.

See your data

The agent is now collecting. Here is where each signal goes and how to extend or confirm it:

  • Metrics: host CPU, memory, disk, filesystem, network, and load flow automatically to your metrics views. Adjust how often they're collected in Change the scrape interval.
  • Logs: the systemd journal and /var/log/syslog flow automatically. Add your own application log files (or disable journald on non-systemd hosts) in Configure log sources.
  • Traces: opt-in. Point your apps at the agent and positively confirm spans reached AtherOps by following Enable traces.

Every signal is isolated per tenant (see Multi-tenant isolation). The collection path is explained in how the agent works.

Self-hosting: point the agent at your platform

If you run your own AtherOps platform, tell the installer where to reach it. Pass PLATFORM_URL (for the install script) and write the same address into /etc/atherops/config.yaml afterward:

curl -sSL https://releases.atherops.com/otel-agent/install.sh | \
sudo INSTALL_TOKEN=<token> PLATFORM_URL=https://atherops.your-domain.com bash

The installer registers against that URL and writes it into the config. The running agent reads platform.url from /etc/atherops/config.yaml and also respects the ATHEROPS_PLATFORM_URL environment variable (set in /etc/atherops/env).

How the data flows

After install, this is what happens on every collection cycle:

The raw HMAC key never leaves the host. The platform derives your org_id from the key on every ingest request, so your data is always scoped to your account.

What got installed

PathWhat it is
/usr/local/bin/atherops-otel-agentthe agent (wrapper) binary
/etc/atherops/config.yamlyour editable config
/etc/atherops/credentials.jsonhost key + id (mode 0600, do not edit)
/etc/atherops/envenv vars for the systemd unit (mode 0600)
/var/lib/atherops/otelcol/<version>/otelcol-contribthe collector binary
/var/lib/atherops/buffer/persistent send queue (survives backend outages)
/etc/systemd/system/atherops-otel-agent.servicethe systemd unit

Full details are in Files & ports.

Next steps