Deployment Guide
Rastir ships with production-ready deployment configs for local development, three major clouds, and Kubernetes.
Stack Components
Every deployment target deploys the same four components:
| Component | Role |
|---|---|
| Rastir Server | Receives telemetry, exposes /metrics, serves OTLP |
| OTel Collector | Forwards traces to the trace backend |
| Prometheus | Scrapes /metrics from Rastir, evaluates SRE rules |
| Grafana | Pre-provisioned dashboards + datasources |
The only thing that varies per target is the trace backend:
| Target | Trace Backend |
|---|---|
| Local (Docker Compose) | Tempo (deployed as 5th container) |
| AWS | X-Ray (managed) |
| Azure | Application Insights (managed) |
| GCP | Cloud Trace (managed) |
| Kubernetes | Configurable: Tempo (default), X-Ray, App Insights, or Cloud Trace |
Docker Compose (Local)
The fastest way to get the full stack running locally.
Prerequisites
- Docker and Docker Compose
Deploy
cd deploy/docker
./deploy.sh # brings up all 5 services
What’s Running
| Service | URL |
|---|---|
| Rastir Server | http://localhost:8080 |
| Grafana | http://localhost:3000 (admin/admin) |
| Prometheus | http://localhost:9090 |
| Tempo | http://localhost:3200 |
| OTLP gRPC | localhost:4317 |
| OTLP HTTP | localhost:4318 |
Commands
./deploy.sh # start
./deploy.sh down # stop
./deploy.sh logs # tail logs
./deploy.sh restart # restart all
AWS (ECS Fargate)
Deploys to ECS Fargate via Terraform. Traces go to AWS X-Ray via ADOT (AWS Distro for OpenTelemetry).
Prerequisites
- Terraform >= 1.5
- AWS CLI configured with sufficient permissions
- A VPC with subnets
Deploy
cd deploy/terraform/aws
cp terraform.tfvars.example terraform.tfvars
# Edit terraform.tfvars with your VPC, subnets, etc.
./deploy.sh # terraform init + apply
Architecture
- Rastir Server + ADOT — single Fargate task, ADOT as sidecar
- Prometheus — Fargate task with EFS for persistent TSDB storage
- Grafana — Fargate task
- Service Connect — internal service discovery (services find each other by name)
Key Variables
| Variable | Description | Default |
|---|---|---|
vpc_id | VPC to deploy into | (required) |
subnet_ids | Subnet IDs for Fargate | (required) |
rastir_image | Rastir server container image | ghcr.io/skamalj/rastir-server:latest |
rastir_cpu / rastir_memory | Server resources | 512 / 1024 |
grafana_admin_password | Grafana admin password | admin |
Commands
./deploy.sh # apply
./deploy.sh plan # plan only
./deploy.sh destroy # tear down
Azure (Container Instances)
Deploys to Azure Container Instances via Terraform. Traces go to Application Insights.
Prerequisites
- Terraform >= 1.5
- Azure CLI (
az login) - An Application Insights connection string
Deploy
cd deploy/terraform/azure
cp terraform.tfvars.example terraform.tfvars
# Edit: set appinsights_connection_string, location, etc.
./deploy.sh
Architecture
- Rastir Server + OTel Collector — ACI container group, collector as sidecar
- Prometheus — ACI container group with Azure File Share for storage
- Grafana — ACI container group
- VNet — all groups communicate over a private VNet
Key Variables
| Variable | Description | Default |
|---|---|---|
location | Azure region | eastus |
appinsights_connection_string | App Insights connection string | (required) |
grafana_admin_password | Grafana admin password | admin |
GCP (Cloud Run)
Deploys to Cloud Run via Terraform. Traces go to Cloud Trace.
Prerequisites
- Terraform >= 1.5
gcloudCLI authenticated- A GCP project with Cloud Run and Cloud Trace APIs enabled
Deploy
cd deploy/terraform/gcp
cp terraform.tfvars.example terraform.tfvars
# Edit: set project_id, region, etc.
./deploy.sh
Architecture
- Rastir Server + OTel Collector — Cloud Run multi-container service
- Prometheus — GCE VM with persistent SSD (Cloud Run is stateless)
- Grafana — Cloud Run service
- VPC Connector — allows Cloud Run to reach the Prometheus VM
Key Variables
| Variable | Description | Default |
|---|---|---|
project_id | GCP project ID | (required) |
region | GCP region | us-central1 |
grafana_admin_password | Grafana admin password | admin |
Kubernetes (Helm)
A Helm chart that works on any Kubernetes cluster (EKS, AKS, GKE, on-prem). By default traces go to Tempo; set traceBackend to switch.
Prerequisites
kubectlconnected to a cluster- Helm 3
Deploy
cd deploy/k8s
./deploy.sh # default: Tempo
./deploy.sh --set traceBackend=xray # AWS X-Ray
./deploy.sh --set traceBackend=appinsights # Azure
./deploy.sh --set traceBackend=cloudtrace # GCP
Access
kubectl port-forward svc/grafana 3000:3000 -n rastir
kubectl port-forward svc/rastir-server 8080:8080 -n rastir
kubectl port-forward svc/prometheus 9090:9090 -n rastir
Key Values
| Value | Description | Default |
|---|---|---|
traceBackend | tempo, xray, appinsights, cloudtrace | tempo |
rastirServer.image.tag | Rastir image tag | latest |
prometheus.storage.size | Prometheus PVC size | 50Gi |
grafana.adminPassword | Grafana admin password | admin |
Uninstall
./deploy.sh uninstall
Directory Structure
deploy/
docker/ # Docker Compose (local)
docker-compose.yml
deploy.sh
otel-collector-config.yaml
prometheus.yml
tempo.yaml
provisioning/ # Grafana datasources + dashboards
dashboards -> ../../grafana/dashboards (symlink)
rules/ # SRE rules + alerts (symlinks)
terraform/
modules/ # Shared Terraform modules
rastir-server/
otel-collector/
prometheus/
grafana/
aws/ # ECS Fargate + ADOT → X-Ray
azure/ # ACI + OTel → App Insights
gcp/ # Cloud Run + OTel → Cloud Trace
k8s/ # Helm chart
Chart.yaml
values.yaml
deploy.sh
templates/