Skip to content

Configuration

Complete reference for all configuration options.

Configuration Files

File Purpose Override Method
.env Global service configuration Copy from .env.example
backend/.env API-specific (admin seed) Copy from backend/.env.example
services/collectors/config/sources.yaml Collector polling intervals Edit directly
services/vector/vector.yaml Vector HTTP→Kafka routing Edit directly
docker-compose.yml Service definitions, resources Use docker-compose.override.yml

Global Environment Variables (.env)

Database

Variable Default Description
POSTGRES_HOST postgres PostgreSQL hostname
POSTGRES_PORT 5432 PostgreSQL port
POSTGRES_DB aiops Database name
POSTGRES_USER aiops Database user
POSTGRES_PASSWORD Required Database password

Redis

Variable Default Description
REDIS_HOST redis Redis hostname
REDIS_PORT 6379 Redis port
REDIS_DB 0 Database index

Kafka

Variable Default Description
KAFKA_BOOTSTRAP_SERVERS kafka-broker:19092 Internal broker address
KAFKA_TOPIC_RAW_LOGS raw_logs Raw logs topic
KAFKA_TOPIC_RAW_METRICS raw_metrics Raw metrics topic
KAFKA_TOPIC_RAW_TRACES raw_traces Raw traces topic
KAFKA_TOPIC_RAW_EVENTS raw_events Raw events topic
KAFKA_TOPIC_CANONICAL canonical-events Normalized events topic
KAFKA_TOPIC_DLQ dlq Dead letter queue

Service Ports

Variable Default Service
API_PORT 8000 FastAPI REST API
COLLECTORS_PORT 8080 Webhook receiver
ML_SERVICE_PORT 8001 RoBERTa inference
VECTOR_HTTP_PORT 8686 Ephemeral upload
VECTOR_WEBHOOK_PORT 8687 Webhook ingestion

Authentication & Security

Variable Default Description
JWT_SECRET_KEY Required HS256 signing key (32+ chars)
JWT_ALGORITHM HS256 Signing algorithm
ACCESS_TOKEN_EXPIRE_MINUTES 60 Access token lifetime
REFRESH_TOKEN_EXPIRE_DAYS 7 Refresh token lifetime
COOKIE_SECURE true HTTPS-only cookies (prod)
COOKIE_SAMESITE strict CSRF protection
API_CORS_ORIGINS http://localhost:5173 Allowed origins (comma-separated)

Admin Seed

Variable Default Description
SEED_ADMIN_EMAIL admin@alertops.com Initial admin email
SEED_ADMIN_PASSWORD Required Initial admin password

ML & Labeling

Variable Default Description
NVIDIA_API_KEY — NVIDIA API key for LLM labeling
LLM_MODEL nvidia/llama-3.3-nemotron-super-49b-v1 Model for auto-labeling

Environment

Variable Default Description
ENV development development or production

Collector Configuration (services/collectors/config/sources.yaml)

sources:
  jira:
    poll_interval_seconds: 600      # 10 minutes
    jql: "project = MYPROJECT"      # Optional custom JQL
  prometheus:
    poll_interval_seconds: 300      # 5 minutes
    query: "up"                     # PromQL query
  azuredevops:
    poll_interval_seconds: 600      # 10 minutes
    wiql: "SELECT * FROM WorkItems" # Optional custom WIQL
  gitlab_webhook: {}                # Event-driven, no polling

Collector Auth (set in .env)

Collector Variables
Jira JIRA_BASE_URL, JIRA_EMAIL, JIRA_API_TOKEN
Prometheus PROMETHEUS_URL, PROMETHEUS_QUERY
Azure DevOps AZURE_DEVOPS_ORG, AZURE_DEVOPS_PROJECT, AZURE_DEVOPS_PAT
GitLab GITLAB_WEBHOOK_SECRET (HMAC verification)

Pipeline Configuration (services/libs/common/config.py)

Parameter Default Description
dedup_window_seconds 300 Deduplication sliding window
drain3_max_clusters 100000 Max Drain3 template clusters
drain3_state_path /app/state/drain3_state.json Drain3 persistence file
pipeline_batch_size 5000 (100 in .env) Messages per Kafka poll
pipeline_batch_timeout_seconds 0.5 Max wait for batch
kafka_consumer_group aiops-pipeline Consumer group ID
ml_min_confidence 0.80 Min confidence to cache prediction

Vector Configuration (services/vector/vector.yaml)

sources:
  ephemeral_http:
    type: http
    address: "0.0.0.0:8686"
  webhook_http:
    type: http
    address: "0.0.0.0:8687"

sinks:
  kafka:
    type: kafka
    inputs: [ephemeral_http, webhook_http]
    bootstrap_servers: ${KAFKA_BROKERS:-kafka-broker:19092}
    topic: canonical-events
    encoding: json

Development Override (docker-compose.override.yml)

Enables hot-reload for API and collectors:

services:
  api:
    command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
    volumes:
      - ./backend:/app
      - ./services/libs/common:/app/libs/common

  collectors:
    volumes:
      - ./services/collectors:/app
      - ./services/libs/common:/app/libs/common

Production Checklist

  • ENV=production
  • COOKIE_SECURE=true
  • COOKIE_SAMESITE=strict
  • API_CORS_ORIGINS = exact production domain(s)
  • Strong POSTGRES_PASSWORD
  • Strong JWT_SECRET_KEY
  • Rotate NVIDIA_API_KEY if using labeling
  • Configure external secret manager (Vault, AWS Secrets Manager)
  • Enable TLS termination (Nginx/Caddy)
  • Set resource limits in docker-compose.yml
  • Configure log aggregation (Loki, ELK, Datadog)

Validation

# Validate docker-compose config
docker compose config

# Check for missing required vars
docker compose config 2>&1 | grep -i "unset\|empty\|required"

# Dry-run compose
docker compose up --dry-run