Installation
InfraSage runs either as a managed cloud service or as a self-hosted deployment inside your own cloud infrastructure.
Cloud (InfraSage hosted)
There is nothing to install. InfraSage runs every component of the hosted service at console.infrasage.dev: ingestion gateways, Kafka brokers, ClickHouse clusters, the AIops Engine, and the console UI.
To get started:
- Sign up at console.infrasage.dev/register
- Create an API key under Settings → API Keys
- Start sending telemetry to your assigned ingestion endpoint
The Quick Start guide walks through it step by step.
Self-hosted
Running it yourself gives your team control over data residency, network placement, and infrastructure sizing. Your license includes signed container images and deployment manifests.
License and access
Self-hosted InfraSage requires a commercial license. Contact [email protected] to:
- Request a license
- Get access to the InfraSage private artifact registry
- Discuss architecture requirements and support tiers
Once licensed, you receive:
- Access credentials for the private container registry
- Kubernetes manifests and Helm chart (optional)
- A license key for activation
Requirements
| Component | Minimum | Recommended (Production) |
|---|---|---|
| Kubernetes | 1.25+ | 1.28+ |
| ClickHouse | 26+ | Managed or dedicated cluster |
| Kafka / Redpanda | Redpanda 23.3+ | 3-node cluster |
| Node RAM (gateway) | 8 GB | 16-32 GB |
| Persistent storage | 100 GB | Sized to retention policy |
Step 1: pull the image
Images are published to GitHub Container Registry and are public, so no registry login is required:
docker pull ghcr.io/infrasagedev/infrasage:latest
One image carries every backend component. The ingestion gateway, AIOps
engine, telemetry operator and integration poller are separate binaries
inside it, selected by the container's command. The console ships
separately as ghcr.io/infrasagedev/infrasage-ui.
Step 2: create the namespace and secrets
kubectl create namespace infrasage
# Your Anthropic API key (powers LLM-based RCA)
kubectl create secret generic llm-secrets \
--from-literal=ANTHROPIC_API_KEY=sk-ant-YOUR_KEY_HERE \
--from-literal=SLACK_WEBHOOK_URL=https://hooks.slack.com/services/YOUR/WEBHOOK \
-n infrasage
# ClickHouse credentials
kubectl create secret generic infrasage-clickhouse-secret \
--from-literal=password=YOUR_SECURE_PASSWORD \
-n infrasage
# InfraSage license key
kubectl create secret generic infrasage-license \
--from-literal=key=YOUR_LICENSE_KEY \
-n infrasage
Step 3: deploy InfraSage
kubectl apply -f deployments/kubernetes/
This deploys:
- ClickHouse StatefulSet with persistent volumes
- Redpanda StatefulSet (Kafka-compatible broker)
- Ingestion Gateway Deployment + Service
- Telemetry Operator Deployment + Service
- AIops Engine Deployment + Service
- Prometheus ConfigMap + Deployment
- Grafana Deployment + Service
Step 4: verify all pods are running
kubectl get pods -n infrasage
# NAME READY STATUS RESTARTS AGE
# clickhouse-0 1/1 Running 0 2m
# redpanda-0 1/1 Running 0 2m
# ingestion-gateway-xxx 1/1 Running 0 90s
# telemetry-operator-xxx 1/1 Running 0 90s
# aiops-engine-xxx 1/1 Running 0 90s
# prometheus-xxx 1/1 Running 0 90s
# grafana-xxx 1/1 Running 0 90s
Step 5: scale for your environment
# Scale ingestion horizontally
kubectl scale deployment ingestion-gateway -n infrasage --replicas=3
# Autoscale based on CPU
kubectl autoscale deployment ingestion-gateway \
-n infrasage --min=2 --max=10 --cpu-percent=70
See Scale Profiles for sizing guidance across small, medium, and large deployments.
Service ports
| Service | HTTP Port | Metrics Port |
|---|---|---|
| Ingestion Gateway | 8080 | 9090 |
| Telemetry Operator | 8081 | 9091 |
| AIops Engine | — | 9092 |
| Alertmanager Webhook | 9093 | — |
| Prometheus | 9999 | — |
| Grafana | 3000 | — |
| ClickHouse HTTP | 8123 | — |
| ClickHouse Native | 9000 | — |
| Redpanda / Kafka | 9092 | — |
Upgrading
All backend components share one image, so every deployment moves to the
same tag. The deployment names below assume the default Helm release name
infrasage; adjust the prefix if you installed under another name.
kubectl set image deployment/infrasage-ingestion-gateway \
ingestion-gateway=ghcr.io/infrasagedev/infrasage:NEW_VERSION \
-n infrasage
kubectl set image deployment/infrasage-telemetry-operator \
telemetry-operator=ghcr.io/infrasagedev/infrasage:NEW_VERSION \
-n infrasage
kubectl set image deployment/infrasage-aiops-engine \
aiops-engine=ghcr.io/infrasagedev/infrasage:NEW_VERSION \
-n infrasage
Apply any SQL migrations shipped with the release before rolling the image: the engine expects its schema to already be current, and a migration applied afterwards leaves a window where queries reference columns that do not yet exist.
Security hardening
Before going to production:
- Change
CLICKHOUSE_PASSWORDfrom any default values - Change Grafana admin password
- Rotate
ANTHROPIC_API_KEYquarterly - Enable TLS on ClickHouse connections
- Set up Kubernetes NetworkPolicies to restrict inter-service communication
- Use a secrets manager (AWS Secrets Manager, HashiCorp Vault) instead of raw Kubernetes secrets
- Enable ClickHouse access logging
- Set up regular ClickHouse backups
See the Security section for full guidance.