Deployment guide

Arc Time-Series Database 26.09.3

Overview

Arc, from Basekick Labs, is an open source (AGPL-3.0) time-series and analytical database. It ingests metrics, events and logs over the InfluxDB line protocol and MessagePack, stores them as Apache Parquet files that it compacts automatically, and answers standard SQL through an embedded DuckDB engine. Everything ships as one Go binary with an HTTP API.

This SecureAnyCloud AMI runs Arc 26.09.3 on Ubuntu 24.04 LTS for Amazon EC2. It is one software version of the SecureAnyCloud Search, OLAP and Time-Series database listing on AWS Marketplace, which you select when you subscribe and launch. Arc has no web interface: you use it through its HTTP API and tools such as Telegraf, Grafana and the Arc client libraries.

What you get:

  • Authentication on, no default token. Arc's bearer-token authentication is enabled. First boot generates a 48-character hex admin token on your instance and writes it to a root-only file. No token is baked into the image, no two instances share one, and Arc refuses to start without it.
  • No token in the logs. Upstream Arc prints a new admin token to its log on its very first start. This image seeds the token privately at first boot (Arc's output discarded, loopback only) and then starts Arc normally, so the token never reaches the journal or Arc's logs.
  • HTTPS from the first boot. Arc serves its API on port 8000 with TLS only, using a certificate generated on your instance. Plain HTTP is refused, and nothing else listens on the network except SSH.
  • Sandboxed DuckDB. SQL cannot read files outside Arc's own data directories or fetch from the network (enable_external_access off, no extensions installed at runtime).
  • Metadata access blocked for Arc and its first-boot service, and the AMI requires IMDSv2.
  • Fails closed. Before every start, a guard checks the token database, the certificate, and the ownership and modes of the configuration. Arc does not start if anything is missing or loosened.
  • Built from source with current security fixes. Arc 26.09.3 is compiled from its signed-off release tag with the latest Go 1.26 toolchain and in-range dependency security updates. It is checked with govulncheck, with no reachable known vulnerabilities at build time.
  • Fully patched Ubuntu 24.04 LTS at build time, with unattended security upgrades switched on.
  • On the image: Arc 26.09.3 (/usr/local/bin/arc, DuckDB 1.5.5 built in), its configuration in /etc/arc, curl, jq, cloud-init and the AWS Systems Manager agent.
  • Defaults: default user ubuntu, x86_64 architecture, recommended instance type m5.large.

Prerequisites

  • An AWS account subscribed to the listing.
  • An EC2 key pair.
  • A VPC subnet with a route to the internet, or a private route you use for management.
  • A security group that allows TCP 8000 (Arc's HTTPS API) from the applications and people that write to or query Arc, and TCP 22 (SSH) from your own networks only. The listing's default security group opens 8000 to everyone, so narrow it to your own networks.

Arc is configured for m5.large (2 vCPUs, 8 GiB). DuckDB may use 3 GB of memory and 2 threads.

Data is stored as Parquet files on the root volume under /var/lib/arc/data. Give the root volume the space your data needs. You can grow it later (see Step 9).

1

Launch the instance

In the AWS Marketplace listing, choose Continue to Subscribe, then Continue to Configuration. Select Arc Time-Series Database 26.09.3 on Ubuntu 24.04 as the software version, pick your Region, and choose Launch through EC2.

Choose m5.large or larger, your key pair and the security group described above.

To launch with the AWS CLI instead, replace the values in angle brackets:

aws ec2 run-instances --region <region> --image-id <ami-id-from-the-listing> \
  --instance-type m5.large --key-name <your-key-pair> \
  --security-group-ids <your-security-group> --subnet-id <your-subnet> \
  --block-device-mappings 'DeviceName=/dev/sda1,Ebs={VolumeSize=100,VolumeType=gp3}' \
  --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=arc}]'

You do not need --metadata-options, because the AMI already requires IMDSv2. The root file system grows to fill the volume on first boot.

2

Connect to your instance

The image runs Ubuntu 24.04 LTS, and the SSH user is ubuntu. Connect with the key pair you chose at launch:

ssh -i <your-key.pem> ubuntu@<public-ip>
3

Check the services

First boot takes under a minute. Once it finishes, Arc and its first-boot service report as active:

systemctl is-active arc arc-tsdb-firstboot
active active

Arc (port 8000) and SSH (port 22) are the only listeners on the network:

sudo ss -tlnH | awk '{print $4}' | sort -u
0.0.0.0:22 0.0.0.0:8000 127.0.0.53%lo:53 127.0.0.54:53 [::]:22

The two port 53 entries belong to the system DNS resolver.

4

Get your URL and admin token

Print the credentials file with the admin token line left out:

sudo grep -v '^ARC_ADMIN_TOKEN=' /root/arc-tsdb-credentials.txt

The file holds the URL Arc is served at, the host, the fingerprint of this instance's certificate and, on the line omitted above, the admin token:

# Arc Time-Series Database 26.09.3 (sac) on this instance. Every query, write and admin request needs the token:
# Authorization: Bearer <ARC_ADMIN_TOKEN>
# The token is unique to this instance. Create more (and narrower) tokens with the API, then keep this one safe.
# The certificate is self-signed for this instance: compare its SHA-256 fingerprint with ARC_TLS_SHA256, or pass
# --cacert /etc/arc/tls/arc.crt on this instance. ARC_URL=https://<public-ip>:8000 ARC_HOST=<public-ip> ARC_TLS_SHA256=<sha256-fingerprint> GUIDE=https://secureanycloud.com/stacks/arc-time-series-database-26-09-3/

Read the token with sudo cat /root/arc-tsdb-credentials.txt and store it in your secrets manager. The URL and a reminder are also printed when you log in over SSH.

5

Write data and query it with SQL

Arc accepts the InfluxDB line protocol on /api/v1/write/line-protocol, with the database named in the x-arc-database header. It accepts SQL on /api/v1/query. Measurements are tables named <database>.<measurement>.

In this example, the token is written to a header file that only you can read, so it never appears on a command line. The certificate directory is readable only by root and Arc, so the first line copies the public certificate to your home directory for curl to trust:

sudo cat /etc/arc/tls/arc.crt > ~/arc.crt HDR="$(mktemp)"; chmod 600 "$HDR"
sudo sed -n 's/^ARC_ADMIN_TOKEN=\(.*\)$/Authorization: Bearer \1/p' /root/arc-tsdb-credentials.txt > "$HDR" arc() { curl -s --cacert ~/arc.crt -H "@$HDR" "$@"; } NOW="$(date +%s)" printf 'cpu,host=web1 usage=12.5 %s000000000\ncpu,host=web1 usage=17.5 %s000000000\ncpu,host=web2 usage=40 %s000000000\n' \
  "$((NOW - 120))" "$((NOW - 60))" "$NOW" | arc -o /dev/null -w '%{http_code}\n' -H 'x-arc-database: demo' --data-binary @- https://localhost:8000/api/v1/write/line-protocol arc -o /dev/null -w '%{http_code}\n' -X POST https://localhost:8000/api/v1/write/line-protocol/flush arc -H 'Content-Type: application/json' -d '{"sql":"SELECT host, count(*) AS points, avg(usage) AS avg_usage FROM demo.cpu GROUP BY host ORDER BY host"}' \
  https://localhost:8000/api/v1/query | jq -c '.data' rm -f "$HDR"
204 200 [["web1",2,15],["web2",1,40]]

Arc buffers writes for up to a second before it writes Parquet. The flush call (admin only) writes them at once. The files are under /var/lib/arc/data/demo/cpu/, where any tool that reads Parquet can open them.

From another machine, use https://<ARC_HOST>:8000 with the header Authorization: Bearer <token>. To trust the certificate, copy ~/arc.crt from the instance (--cacert for curl) or install your own certificate (Step 8).

Telegraf's InfluxDB output, Grafana's Arc data source and the Arc client libraries all take the URL and a token.

6

Check the security controls

Only /health, /ready, /ready/write, /api/v1/auth/verify and Arc's aggregate /metrics counters answer without a token. Everything else, including SQL and writes, returns 401 without a valid token. Plain HTTP gets no answer at all:

for t in "" "Authorization: Bearer 0000000000000000000000000000000000000000000000000"; do curl -s -o /dev/null -w '%{http_code}\n' --cacert ~/arc.crt ${t:+-H "$t"} \
  -H 'Content-Type: application/json' -d '{"sql":"SELECT 1"}' https://localhost:8000/api/v1/query done curl -s --cacert ~/arc.crt https://localhost:8000/health | jq -r .status curl -s -o /dev/null http://127.0.0.1:8000/health || echo "plain HTTP refused (curl exit $?)"
401 401 ok plain HTTP refused (curl exit 52)

Neither Arc nor the first-boot service can reach the instance metadata service:

for u in arc arc-tsdb-firstboot; do printf '%s: ' "$u"; systemctl show -p IPAddressDeny --value "$u" | tr ' ' '\n' | grep -E '^169\.254\.' | paste -sd' ' done
arc: 169.254.169.254/32 arc-tsdb-firstboot: 169.254.169.254/32

To run the full self-test that the image build runs, use:

sudo arc-selftest
ARC_SELFTEST_OK
7

Tokens for your applications

Keep the admin token for administration and give each application its own token with only the permissions it needs. Manage tokens with Arc's API (/api/v1/auth/tokens, admin token required). For example, create a write-only token for Telegraf:

curl -s --cacert ~/arc.crt -H "@$HDR" -H 'Content-Type: application/json' \
  -d '{"name":"telegraf","permissions":["write"]}' https://localhost:8000/api/v1/auth/tokens

The response shows the new token once, so store it in your secrets manager. Arc stores only a hash of each token.

To replace the admin token, create a new admin token and update ARC_ADMIN_TOKEN in /root/arc-tsdb-credentials.txt. Then delete the old token through the same API.

8

Use your own DNS name and certificate

The certificate generated on first boot names the instance's addresses, localhost and its public DNS name.

To use a certificate from your own CA or from Let's Encrypt, replace /etc/arc/tls/arc.crt and /etc/arc/tls/arc.key. Keep owner root, group arc, key mode 0640 and directory mode 0750. Then restart Arc:

sudo systemctl restart arc

Clients can then trust the certificate without --cacert.

9

Manage storage, retention and backups

  • Disk space: Parquet files live on the root volume under /var/lib/arc/data. Grow the EBS volume in the EC2 console, then extend the file system online with sudo growpart /dev/nvme0n1 1 && sudo resize2fs /dev/nvme0n1p1.
  • Retention: Arc deletes old data per database with retention policies (/api/v1/retention). Compaction merges small Parquet files hourly and daily.
  • Backups: Arc's backup API (/api/v1/backup) writes to /var/lib/arc/backups. Copy those files to Amazon S3, or take EBS snapshots of the volume.
  • Amazon S3 storage: Arc can keep Parquet in S3 ([storage] backend = "s3" in /etc/arc/arc.toml). Instance metadata is blocked for Arc, so it cannot use the instance role. Put an access key for an IAM user limited to that bucket in the configuration, then restart Arc.
10

Server components

These are the components and where to find them on the instance:

  • Arc 26.09.3 (DuckDB 1.5.5 built in): /usr/local/bin/arc, unit arc.service, user arc
  • Configuration: /etc/arc/arc.toml
  • Token database and Parquet data: /var/lib/arc/arc.db and /var/lib/arc/data
  • TLS certificate and key: /etc/arc/tls/arc.crt and /etc/arc/tls/arc.key
  • First boot and start guard: arc-tsdb-firstboot.service and /usr/local/sbin/arc-guard
  • Self-test: /usr/local/sbin/arc-selftest
  • Credentials: /root/arc-tsdb-credentials.txt (mode 0600)
  • Licence and notices: /usr/share/doc/arc/

View the logs with sudo journalctl -u arc.

11

Security recommendations

  • Allow port 22 in the security group from your own networks only, and open port 8000 only to the applications and people that need Arc.
  • Give each application its own token with the narrowest permissions, and keep the admin token for administration.
  • Use your own DNS name and a certificate your clients trust (Step 8).
  • Keep the operating system patched. Unattended security upgrades are on, and sudo apt-get update && sudo apt-get upgrade applies everything else.

Support and licensing

Arc 26.09.3 is open source software under the GNU Affero General Public License v3.0, available from https://github.com/Basekick-Labs/arc. The LICENSE, the list of Go modules compiled into Arc, and the notices for DuckDB and the other bundled components are in /usr/share/doc/arc/.

The binary is built from the unmodified 26.09.3 source with the dependency updates recorded there. The image price covers the SecureAnyCloud packaging, hardening and per-instance setup described above. There is no Arc licence fee.

  • Email: sales@secureanycloud.com
  • Website: https://secureanycloud.com
  • Support: 24/7, with a 24 hour response SLA

All product and company names are trademarks or registered trademarks of their respective holders. Their use does not imply any affiliation with or endorsement by them.

Deploy on AWS

Launch Arc Time-Series Database 26.09.3 on Ubuntu 24.04 on AWS with 24/7 support from SecureAnyCloud.

View on Marketplace

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on AWS