/
Al
/
TESamples
Обзор
Документация
Войти
/
Al
/
TESamples
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
docker-compose.observability.yml
187 строк
8 KB
Al
Initial Commit
11 май 2026, 17:40
11 май 2026, 17:40
0a04577
Код
Авторство
О чём код?
# ============================================================= # Observability overlay (Phase 4) # # Использование: # docker compose -f docker-compose.yml -f docker-compose.observability.yml up -d # make up-obs # # Подключает: # - OTel Collector (OTLP gRPC :4317, HTTP :4318) # - Jaeger 1.6x (UI :16686, OTLP :4317 внутри сети) # - Prometheus (UI :9090, scrape Spring/Python/Keycloak) # - Grafana (UI :3000, datasources + dashboards заранее предзагружены) # # А также — добавляет к Java/Python сервисам OTLP-эндпоинт и включает # Keycloak metrics на management-порту (KC_METRICS_ENABLED=true). # ============================================================= services: # ---------- Включаем метрики Keycloak (FR-09.1) ---------- # По умолчанию метрики Keycloak выключены. Здесь включаем на management-порту # :9000 (см. docker-compose.yml → KC_HTTP_MANAGEMENT_PORT). Prometheus # скрейпит /metrics на этом порту. keycloak: environment: KC_METRICS_ENABLED: "true" # ---------- OTel Collector ---------- # Центральная точка приёма трейсов от Java/Python приложений. Batch + resource # processors применяются перед форвардом в Jaeger (см. otel-collector-config.yml). otel-collector: image: otel/opentelemetry-collector-contrib:0.116.1 restart: unless-stopped command: ["--config=/etc/otel/config.yml"] volumes: - ./observability/otel-collector/otel-collector-config.yml:/etc/otel/config.yml:ro ports: - "4317:4317" # OTLP gRPC (для отладки с хоста) - "4318:4318" # OTLP HTTP healthcheck: # Health-extension коллектора на :13133 — простой 200 OK при готовности. test: ["CMD-SHELL", "wget -qO- http://localhost:13133/ || exit 1"] interval: 5s timeout: 3s retries: 10 # ---------- Jaeger (all-in-one с OTLP receiver) ---------- # all-in-one — collector+query+UI в одном процессе, без отдельной БД (in-memory). # Для dev достаточно. В production — раздельные jaeger-collector + storage. jaeger: image: jaegertracing/all-in-one:1.62.0 restart: unless-stopped environment: # Включает OTLP-receiver на :4317/:4318 (отдельно от Jaeger-native ports). COLLECTOR_OTLP_ENABLED: "true" ports: - "${JAEGER_UI_PORT:-16686}:16686" # ---------- Prometheus ---------- prometheus: image: prom/prometheus:v2.55.1 restart: unless-stopped command: - "--config.file=/etc/prometheus/prometheus.yml" - "--storage.tsdb.path=/prometheus" # 24h в dev достаточно для разбора инцидента. В production — обычно ≥30d. - "--storage.tsdb.retention.time=24h" volumes: - ./observability/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro - ./observability/prometheus/alerts.yml:/etc/prometheus/alerts.yml:ro - prometheus_data:/prometheus ports: - "${PROMETHEUS_PORT:-9090}:9090" # ---------- Grafana ---------- grafana: image: grafana/grafana:11.3.0 restart: unless-stopped environment: # Учётка admin — dev-default. В production: ротация + Vault. GF_SECURITY_ADMIN_USER: ${GF_ADMIN_USER:-admin} GF_SECURITY_ADMIN_PASSWORD: ${GF_ADMIN_PASSWORD:-admin-dev} # Никаких self-signup'ов: пользователей заводит только admin. GF_USERS_ALLOW_SIGN_UP: "false" # Анонимный доступ только в роли Viewer — удобно для демо без логина. # В production: false. GF_AUTH_ANONYMOUS_ENABLED: "true" GF_AUTH_ANONYMOUS_ORG_ROLE: "Viewer" volumes: # provisioning: автозагрузка datasources/dashboards-конфигов из git. - ./observability/grafana/provisioning:/etc/grafana/provisioning:ro # Сами JSON-дашборды (путь должен совпадать с dashboards.yml options.path). - ./observability/grafana/dashboards:/var/lib/grafana/dashboards:ro - grafana_data:/var/lib/grafana ports: - "${GRAFANA_PORT:-3000}:3000" depends_on: prometheus: condition: service_started # ---------- Дополняем Java сервисы OTLP-конфигурацией ---------- # MANAGEMENT_OTLP_TRACING_ENDPOINT через relaxed-binding выставляет # management.otlp.tracing.endpoint в Spring (см. application.yml). # Sampling=1.0 в dev: все трейсы в Jaeger. В production — 0.01–0.1. bff-agent: environment: MANAGEMENT_OTLP_TRACING_ENDPOINT: "http://otel-collector:4318/v1/traces" MANAGEMENT_TRACING_SAMPLING_PROBABILITY: "1.0" OTEL_SERVICE_NAME: "bff-agent" depends_on: otel-collector: condition: service_started service-a: environment: MANAGEMENT_OTLP_TRACING_ENDPOINT: "http://otel-collector:4318/v1/traces" MANAGEMENT_TRACING_SAMPLING_PROBABILITY: "1.0" OTEL_SERVICE_NAME: "service-a" depends_on: otel-collector: condition: service_started service-b: environment: MANAGEMENT_OTLP_TRACING_ENDPOINT: "http://otel-collector:4318/v1/traces" MANAGEMENT_TRACING_SAMPLING_PROBABILITY: "1.0" OTEL_SERVICE_NAME: "service-b" service-c: environment: MANAGEMENT_OTLP_TRACING_ENDPOINT: "http://otel-collector:4318/v1/traces" MANAGEMENT_TRACING_SAMPLING_PROBABILITY: "1.0" OTEL_SERVICE_NAME: "service-c" # ---------- Дополняем Python сервисы OTel auto-instrumentation ---------- # Наличие OTEL_EXPORTER_OTLP_ENDPOINT включает запуск под # `opentelemetry-instrument` (см. apps/python/Dockerfile ENTRYPOINT). # METRICS_EXPORTER=none и LOGS_EXPORTER=none, потому что метрики собираем # отдельно (Prometheus scrape /metrics), а логи — через docker logs. bff-agent-py: environment: OTEL_SERVICE_NAME: "bff-agent-py" OTEL_EXPORTER_OTLP_ENDPOINT: "http://otel-collector:4317" OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" OTEL_TRACES_EXPORTER: "otlp" OTEL_METRICS_EXPORTER: "none" OTEL_LOGS_EXPORTER: "none" OTEL_INSTRUMENTATION_ENABLED: "true" depends_on: otel-collector: condition: service_started service-a-py: environment: OTEL_SERVICE_NAME: "service-a-py" OTEL_EXPORTER_OTLP_ENDPOINT: "http://otel-collector:4317" OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" OTEL_TRACES_EXPORTER: "otlp" OTEL_METRICS_EXPORTER: "none" OTEL_LOGS_EXPORTER: "none" OTEL_INSTRUMENTATION_ENABLED: "true" depends_on: otel-collector: condition: service_started service-b-py: environment: OTEL_SERVICE_NAME: "service-b-py" OTEL_EXPORTER_OTLP_ENDPOINT: "http://otel-collector:4317" OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" OTEL_TRACES_EXPORTER: "otlp" OTEL_METRICS_EXPORTER: "none" OTEL_LOGS_EXPORTER: "none" OTEL_INSTRUMENTATION_ENABLED: "true" service-c-py: environment: OTEL_SERVICE_NAME: "service-c-py" OTEL_EXPORTER_OTLP_ENDPOINT: "http://otel-collector:4317" OTEL_EXPORTER_OTLP_PROTOCOL: "grpc" OTEL_TRACES_EXPORTER: "otlp" OTEL_METRICS_EXPORTER: "none" OTEL_LOGS_EXPORTER: "none" OTEL_INSTRUMENTATION_ENABLED: "true" volumes: prometheus_data: grafana_data: