Ctrl K
ComunidadGuías…

docker-compose.observability.yml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
x-omlorix-labels: &omlorix-labels
  com.omlorix.installation.id: ${OMLORIX_INSTALLATION_ID:-unmanaged}

x-worker-otel-environment: &worker-otel-environment
  OTEL_ENABLED: "true"
  OTEL_TRACES_ENABLED: "true"
  OTEL_METRICS_ENABLED: "true"
  OTEL_PROMETHEUS_EXPORTER_ENABLED: "false"
  OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4317
  OTEL_EXPORTER_OTLP_INSECURE: "true"

x-worker-otel-depends: &worker-otel-depends
  otel-collector:
    condition: service_healthy

services:
  metrics_token:
    labels: *omlorix-labels
    image: alpine:3.24@sha256:294b683cb724975bec92580e1e685676bd4b50bda910ddb8c51d4cabeaec77e6
    command: >
      sh -c "set -eu; mkdir -p /metrics; if [ ! -s /metrics/token ]; then head -c 32 /dev/urandom | base64 > /metrics/token; fi; chmod 0444 /metrics/token"
    volumes:
      - metrics_token:/metrics
    network_mode: none
    restart: "no"

  fastapi:
    labels: *omlorix-labels
    environment:
      OTEL_ENABLED: "true"
      OTEL_TRACES_ENABLED: "true"
      OTEL_METRICS_ENABLED: "true"
      OTEL_PROMETHEUS_EXPORTER_ENABLED: "true"
      OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4317
      OTEL_EXPORTER_OTLP_INSECURE: "true"
      PROMETHEUS_METRICS_TOKEN: ""
      PROMETHEUS_METRICS_TOKEN_FILE: /run/omlorix-metrics/token
    volumes:
      - metrics_token:/run/omlorix-metrics:ro
    depends_on:
      metrics_token:
        condition: service_completed_successfully
      otel-collector:
        condition: service_healthy

  email_worker:
    labels: *omlorix-labels
    environment:
      OTEL_ENABLED: "true"
      OTEL_SERVICE_NAME: omlorix-email-worker
      OTEL_TRACES_ENABLED: "true"
      OTEL_METRICS_ENABLED: "true"
      OTEL_PROMETHEUS_EXPORTER_ENABLED: "false"
      OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4317
      OTEL_EXPORTER_OTLP_INSECURE: "true"
    depends_on:
      otel-collector:
        condition: service_healthy

  operations_worker:
    labels: *omlorix-labels
    environment:
      <<: *worker-otel-environment
      OTEL_SERVICE_NAME: omlorix-operations-worker
    depends_on: *worker-otel-depends

  generation_worker:
    labels: *omlorix-labels
    environment:
      <<: *worker-otel-environment
      OTEL_SERVICE_NAME: omlorix-generation-worker
    depends_on: *worker-otel-depends

  memory_worker:
    labels: *omlorix-labels
    environment:
      <<: *worker-otel-environment
      OTEL_SERVICE_NAME: omlorix-memory-worker
    depends_on: *worker-otel-depends

  research_worker:
    labels: *omlorix-labels
    environment:
      <<: *worker-otel-environment
      OTEL_SERVICE_NAME: omlorix-research-worker
    depends_on: *worker-otel-depends

  file_processing_worker:
    labels: *omlorix-labels
    environment:
      <<: *worker-otel-environment
      OTEL_SERVICE_NAME: omlorix-file-processing-worker
    depends_on: *worker-otel-depends

  account_lifecycle_worker:
    labels: *omlorix-labels
    environment:
      <<: *worker-otel-environment
      OTEL_SERVICE_NAME: omlorix-account-lifecycle-worker
    depends_on: *worker-otel-depends

  maintenance_worker:
    labels: *omlorix-labels
    environment:
      <<: *worker-otel-environment
      OTEL_SERVICE_NAME: omlorix-maintenance-worker
    depends_on: *worker-otel-depends

  rendering_worker:
    labels: *omlorix-labels
    environment:
      <<: *worker-otel-environment
      OTEL_SERVICE_NAME: omlorix-rendering-worker
    depends_on: *worker-otel-depends

  media_worker:
    labels: *omlorix-labels
    environment:
      <<: *worker-otel-environment
      OTEL_SERVICE_NAME: omlorix-media-worker
    depends_on: *worker-otel-depends

  connector_worker:
    labels: *omlorix-labels
    environment:
      <<: *worker-otel-environment
      OTEL_SERVICE_NAME: omlorix-connector-worker
    depends_on: *worker-otel-depends

  audit_event_worker:
    labels: *omlorix-labels
    environment:
      <<: *worker-otel-environment
      OTEL_SERVICE_NAME: omlorix-audit-event-worker
    depends_on: *worker-otel-depends

  realtime_gateway:
    labels: *omlorix-labels
    environment:
      OTEL_ENABLED: "true"
      OTEL_SERVICE_NAME: omlorix-realtime-gateway
      OTEL_TRACES_ENABLED: "true"
      OTEL_METRICS_ENABLED: "true"
      OTEL_PROMETHEUS_EXPORTER_ENABLED: "false"
      OTEL_EXPORTER_OTLP_ENDPOINT: http://otel-collector:4317
      OTEL_EXPORTER_OTLP_INSECURE: "true"
    depends_on: *worker-otel-depends

  otel-collector:
    labels: *omlorix-labels
    image: otel/opentelemetry-collector-contrib:0.161.0@sha256:fd328de2552466ad78385e1b1289c3f2402b1c45f265b252aab1955b42845ac1
    command: ["--config=/etc/otel-collector-config.yaml"]
    environment:
      - DEPLOYMENT_ENVIRONMENT=${MODE:-production}
    volumes:
      - ./otel/otel-collector-config.yaml:/etc/otel-collector-config.yaml:ro
    ports:
      - "${OTEL_GRPC_HOST_BIND:-127.0.0.1}:${OTEL_GRPC_HOST_PORT:-4317}:4317"
      - "${OTEL_HTTP_HOST_BIND:-127.0.0.1}:${OTEL_HTTP_HOST_PORT:-4318}:4318"
      - "${OTEL_PROMETHEUS_HOST_BIND:-127.0.0.1}:${OTEL_PROMETHEUS_HOST_PORT:-8889}:8889"
      - "${OTEL_HEALTHCHECK_HOST_BIND:-127.0.0.1}:${OTEL_HEALTHCHECK_HOST_PORT:-13133}:13133"
    depends_on:
      - jaeger
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "/otelcol-contrib", "validate", "--config=/etc/otel-collector-config.yaml"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - omlorix-network

  jaeger:
    labels: *omlorix-labels
    image: jaegertracing/all-in-one:1.76.0@sha256:ab6f1a1f0fb49ea08bcd19f6b84f6081d0d44b364b6de148e1798eb5816bacac
    user: "0"
    environment:
      - COLLECTOR_OTLP_ENABLED=true
      - SPAN_STORAGE_TYPE=badger
      - BADGER_EPHEMERAL=false
      - BADGER_DIRECTORY_VALUE=/badger/data
      - BADGER_DIRECTORY_KEY=/badger/key
    volumes:
      - jaeger_data:/badger
    ports:
      - "${JAEGER_UI_HOST_BIND:-127.0.0.1}:${JAEGER_UI_HOST_PORT:-16686}:16686"
      - "${JAEGER_COLLECTOR_HOST_BIND:-127.0.0.1}:${JAEGER_COLLECTOR_HOST_PORT:-14268}:14268"
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:16686/"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - omlorix-network

  prometheus:
    labels: *omlorix-labels
    image: prom/prometheus:v3.15.0@sha256:efd719c99d83b060d9daefdcf00360461adf279f45ef5391f8d111892118753e
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--storage.tsdb.retention.time=15d'
      - '--web.enable-lifecycle'
    volumes:
      - ./otel/prometheus.yml:/etc/prometheus/prometheus.yml:ro
      - ./otel/prometheus-host-metrics-empty.yml:/etc/prometheus/host-metrics-targets.yml:ro
      - ./otel/prometheus-rules:/etc/prometheus/rules:ro
      - prometheus_data:/prometheus
      - metrics_token:/run/omlorix-metrics:ro
    depends_on:
      metrics_token:
        condition: service_completed_successfully
    ports:
      - "${PROMETHEUS_HOST_BIND:-127.0.0.1}:${PROMETHEUS_HOST_PORT:-9090}:9090"
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:9090/-/healthy"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - omlorix-network

  alertmanager:
    labels: *omlorix-labels
    image: prom/alertmanager:v0.34.1@sha256:e9733bafb1bdef9b00e25a21f8f99dc26a22224bf16641ad754d1649f4c3357a
    command:
      - '--config.file=/etc/alertmanager/alertmanager.yml'
      - '--storage.path=/alertmanager'
    volumes:
      - ./otel/alertmanager.yml:/etc/alertmanager/alertmanager.yml:ro
      - alertmanager_data:/alertmanager
    ports:
      - "${ALERTMANAGER_HOST_BIND:-127.0.0.1}:${ALERTMANAGER_HOST_PORT:-9093}:9093"
    restart: unless-stopped
    networks:
      - omlorix-network

  postgres-exporter:
    labels: *omlorix-labels
    image: prometheuscommunity/postgres-exporter:v0.20.1@sha256:ac5ec343104fae0e2d84a27bb8d69b38430a11910c5382cad85d478d2bab713e
    environment:
      - DATA_SOURCE_URI=${POSTGRES_EXPORTER_DATA_SOURCE_URI:-${DATABASE_HOST_OVERRIDE:-postgres}:${DATABASE_PORT_OVERRIDE:-5432}/${DATABASE_NAME:-omlorix}?sslmode=disable}
      - DATA_SOURCE_USER=${POSTGRES_EXPORTER_DATA_SOURCE_USER:-${DATABASE_USER:-postgres}}
      - DATA_SOURCE_PASS=${POSTGRES_EXPORTER_DATA_SOURCE_PASS:-${DATABASE_PASSWORD:-CHANGE_ME}}
    restart: unless-stopped
    networks:
      - omlorix-network

  redis-exporter:
    labels: *omlorix-labels
    image: oliver006/redis_exporter:v1.92.0@sha256:ca3abd5f19da6c87e96038ba08aaa3dfaab34dc649834584c4d6880b05952fef
    profiles: ["redis-enabled"]
    environment:
      - REDIS_ADDR=${REDIS_EXPORTER_ADDR:-${REDIS_URL}}
      - REDIS_PASSWORD=${REDIS_PASSWORD:-}
    command:
      - '--check-keys=rq:queue:${AUTOMATION_QUEUE_NAME:-omlorix-automations}'
    restart: unless-stopped
    networks:
      - omlorix-network

  grafana:
    labels: *omlorix-labels
    image: grafana/grafana:13.2.2@sha256:ac461fb352abc50da10a51c7d02462e9c05488f11f53f14b3ad79a8145f638a0
    environment:
      - GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER:?GRAFANA_ADMIN_USER is required}
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:?GRAFANA_ADMIN_PASSWORD is required}
      - GF_USERS_ALLOW_SIGN_UP=false
      - GF_SERVER_ROOT_URL=${GRAFANA_ROOT_URL:-http://localhost:3001}
      - GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource
    volumes:
      - grafana_data:/var/lib/grafana
      - ./otel/grafana/provisioning:/etc/grafana/provisioning:ro
      - ./otel/grafana/dashboards:/var/lib/grafana/dashboards:ro
    ports:
      - "${GRAFANA_HOST_BIND:-127.0.0.1}:${GRAFANA_HOST_PORT:-3001}:3000"
    depends_on:
      - prometheus
      - jaeger
      - alertmanager
    restart: unless-stopped
    healthcheck:
      test: ["CMD", "wget", "--spider", "-q", "http://localhost:3000/api/health"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - omlorix-network

volumes:
  jaeger_data:
  metrics_token:
  prometheus_data:
  alertmanager_data:
  grafana_data: