docker-compose.observability.yml
Rama main · réplica de lectura del repositorio original.
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: