| # Copyright The OpenTelemetry Authors |
| # SPDX-License-Identifier: Apache-2.0 |
| |
| x-default-logging: &logging |
| driver: "json-file" |
| options: |
| max-size: "5m" |
| max-file: "2" |
| tag: "{{.Name}}" |
| |
| networks: |
| default: |
| name: doris-opentelemetry-demo |
| driver: bridge |
| |
| services: |
| # ****************** |
| # Core Demo Services |
| # ****************** |
| # Accounting service |
| accounting: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-accounting |
| container_name: accounting |
| build: |
| context: ./ |
| dockerfile: ${ACCOUNTING_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-accounting |
| deploy: |
| resources: |
| limits: |
| memory: 120M |
| restart: unless-stopped |
| environment: |
| - KAFKA_ADDR |
| - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} |
| - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=accounting |
| depends_on: |
| otel-collector: |
| condition: service_started |
| kafka: |
| condition: service_healthy |
| logging: *logging |
| |
| # AdService |
| ad: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-ad |
| container_name: ad |
| build: |
| context: ./ |
| dockerfile: ${AD_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-ad |
| args: |
| OTEL_JAVA_AGENT_VERSION: ${OTEL_JAVA_AGENT_VERSION} |
| deploy: |
| resources: |
| limits: |
| memory: 300M |
| restart: unless-stopped |
| ports: |
| - "${AD_PORT}" |
| environment: |
| - AD_PORT |
| - FLAGD_HOST |
| - FLAGD_PORT |
| - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} |
| - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_LOGS_EXPORTER=otlp |
| - OTEL_SERVICE_NAME=ad |
| # Workaround on OSX for https://bugs.openjdk.org/browse/JDK-8345296 |
| - _JAVA_OPTIONS |
| depends_on: |
| otel-collector: |
| condition: service_started |
| flagd: |
| condition: service_started |
| logging: *logging |
| |
| # Cart service |
| cart: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-cart |
| container_name: cart |
| build: |
| context: ./ |
| dockerfile: ${CART_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-cart |
| deploy: |
| resources: |
| limits: |
| memory: 160M |
| restart: unless-stopped |
| ports: |
| - "${CART_PORT}" |
| environment: |
| - CART_PORT |
| - FLAGD_HOST |
| - FLAGD_PORT |
| - VALKEY_ADDR |
| - OTEL_EXPORTER_OTLP_ENDPOINT |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=cart |
| - ASPNETCORE_URLS=http://*:${CART_PORT} |
| depends_on: |
| valkey-cart: |
| condition: service_started |
| otel-collector: |
| condition: service_started |
| flagd: |
| condition: service_started |
| logging: *logging |
| |
| # Checkout service |
| checkout: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-checkout |
| container_name: checkout |
| build: |
| context: ./ |
| dockerfile: ${CHECKOUT_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-checkout |
| deploy: |
| resources: |
| limits: |
| memory: 20M |
| restart: unless-stopped |
| ports: |
| - "${CHECKOUT_PORT}" |
| environment: |
| - FLAGD_HOST |
| - FLAGD_PORT |
| - CHECKOUT_PORT |
| - CART_ADDR |
| - CURRENCY_ADDR |
| - EMAIL_ADDR |
| - PAYMENT_ADDR |
| - PRODUCT_CATALOG_ADDR |
| - SHIPPING_ADDR |
| - KAFKA_ADDR |
| - GOMEMLIMIT=16MiB |
| - OTEL_EXPORTER_OTLP_ENDPOINT |
| - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=checkout |
| depends_on: |
| cart: |
| condition: service_started |
| currency: |
| condition: service_started |
| email: |
| condition: service_started |
| payment: |
| condition: service_started |
| product-catalog: |
| condition: service_started |
| shipping: |
| condition: service_started |
| otel-collector: |
| condition: service_started |
| kafka: |
| condition: service_healthy |
| flagd: |
| condition: service_started |
| logging: *logging |
| |
| # Currency service |
| currency: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-currency |
| container_name: currency |
| build: |
| context: ./ |
| dockerfile: ${CURRENCY_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-currency |
| args: |
| OPENTELEMETRY_CPP_VERSION: ${OPENTELEMETRY_CPP_VERSION} |
| deploy: |
| resources: |
| limits: |
| memory: 20M |
| restart: unless-stopped |
| ports: |
| - "${CURRENCY_PORT}" |
| environment: |
| - CURRENCY_PORT |
| - VERSION=${IMAGE_VERSION} |
| - OTEL_EXPORTER_OTLP_ENDPOINT |
| - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES},service.name=currency # The C++ SDK does not support OTEL_SERVICE_NAME |
| depends_on: |
| otel-collector: |
| condition: service_started |
| logging: *logging |
| |
| # Email service |
| email: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-email |
| container_name: email |
| build: |
| context: ./ |
| dockerfile: ${EMAIL_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-email |
| deploy: |
| resources: |
| limits: |
| memory: 100M |
| restart: unless-stopped |
| ports: |
| - "${EMAIL_PORT}" |
| environment: |
| - APP_ENV=production |
| - EMAIL_PORT |
| - OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP}/v1/traces |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=email |
| depends_on: |
| otel-collector: |
| condition: service_started |
| logging: *logging |
| |
| # Fraud Detection service |
| fraud-detection: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-fraud-detection |
| container_name: fraud-detection |
| build: |
| context: ./ |
| dockerfile: ${FRAUD_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-fraud-detection |
| args: |
| OTEL_JAVA_AGENT_VERSION: ${OTEL_JAVA_AGENT_VERSION} |
| deploy: |
| resources: |
| limits: |
| memory: 300M |
| restart: unless-stopped |
| environment: |
| - FLAGD_HOST |
| - FLAGD_PORT |
| - KAFKA_ADDR |
| - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} |
| - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
| - OTEL_INSTRUMENTATION_KAFKA_EXPERIMENTAL_SPAN_ATTRIBUTES=true |
| - OTEL_INSTRUMENTATION_MESSAGING_EXPERIMENTAL_RECEIVE_TELEMETRY_ENABLED=true |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=fraud-detection |
| depends_on: |
| otel-collector: |
| condition: service_started |
| kafka: |
| condition: service_healthy |
| logging: *logging |
| |
| # Frontend |
| frontend: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-frontend |
| container_name: frontend |
| build: |
| context: ./ |
| dockerfile: ${FRONTEND_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-frontend |
| deploy: |
| resources: |
| limits: |
| memory: 250M |
| restart: unless-stopped |
| ports: |
| - "${FRONTEND_PORT}" |
| environment: |
| - PORT=${FRONTEND_PORT} |
| - FRONTEND_ADDR |
| - AD_ADDR |
| - CART_ADDR |
| - CHECKOUT_ADDR |
| - CURRENCY_ADDR |
| - PRODUCT_CATALOG_ADDR |
| - RECOMMENDATION_ADDR |
| - SHIPPING_ADDR |
| - OTEL_EXPORTER_OTLP_ENDPOINT |
| - OTEL_RESOURCE_ATTRIBUTES=${OTEL_RESOURCE_ATTRIBUTES} |
| - ENV_PLATFORM |
| - OTEL_SERVICE_NAME=frontend |
| - PUBLIC_OTEL_EXPORTER_OTLP_TRACES_ENDPOINT |
| - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
| - WEB_OTEL_SERVICE_NAME=frontend-web |
| - OTEL_COLLECTOR_HOST |
| - FLAGD_HOST |
| - FLAGD_PORT |
| depends_on: |
| ad: |
| condition: service_started |
| cart: |
| condition: service_started |
| checkout: |
| condition: service_started |
| currency: |
| condition: service_started |
| product-catalog: |
| condition: service_started |
| quote: |
| condition: service_started |
| recommendation: |
| condition: service_started |
| shipping: |
| condition: service_started |
| otel-collector: |
| condition: service_started |
| image-provider: |
| condition: service_started |
| flagd: |
| condition: service_started |
| logging: *logging |
| |
| # Frontend Proxy (Envoy) |
| frontend-proxy: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-frontend-proxy |
| container_name: frontend-proxy |
| build: |
| context: ./ |
| dockerfile: ${FRONTEND_PROXY_DOCKERFILE} |
| deploy: |
| resources: |
| limits: |
| memory: 65M |
| restart: unless-stopped |
| ports: |
| - "${ENVOY_PORT}" |
| - 10000 |
| environment: |
| - FRONTEND_PORT |
| - FRONTEND_HOST |
| - LOCUST_WEB_HOST |
| - LOCUST_WEB_PORT |
| - GRAFANA_PORT |
| - GRAFANA_HOST |
| - JAEGER_PORT |
| - JAEGER_HOST |
| - OTEL_COLLECTOR_HOST |
| - IMAGE_PROVIDER_HOST |
| - IMAGE_PROVIDER_PORT |
| - OTEL_COLLECTOR_PORT_GRPC |
| - OTEL_COLLECTOR_PORT_HTTP |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=frontend-proxy |
| - ENVOY_PORT |
| - FLAGD_HOST |
| - FLAGD_PORT |
| - FLAGD_UI_HOST |
| - FLAGD_UI_PORT |
| - DORIS_SERVICE_HOST |
| depends_on: |
| frontend: |
| condition: service_started |
| load-generator: |
| condition: service_started |
| jaeger: |
| condition: service_started |
| grafana: |
| condition: service_started |
| flagd-ui: |
| condition: service_started |
| doris: |
| condition: service_started |
| dns_search: "" |
| |
| # image-provider |
| image-provider: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-image-provider |
| container_name: image-provider |
| build: |
| context: ./ |
| dockerfile: ${IMAGE_PROVIDER_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-image-provider |
| deploy: |
| resources: |
| limits: |
| memory: 120M |
| restart: unless-stopped |
| ports: |
| - "${IMAGE_PROVIDER_PORT}" |
| environment: |
| - IMAGE_PROVIDER_PORT |
| - OTEL_COLLECTOR_HOST |
| - OTEL_COLLECTOR_PORT_GRPC |
| - OTEL_SERVICE_NAME=image-provider |
| - OTEL_RESOURCE_ATTRIBUTES |
| depends_on: |
| otel-collector: |
| condition: service_started |
| logging: *logging |
| |
| # Load Generator |
| load-generator: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-load-generator |
| container_name: load-generator |
| build: |
| context: ./ |
| dockerfile: ${LOAD_GENERATOR_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-load-generator |
| deploy: |
| resources: |
| limits: |
| memory: 1500M |
| restart: unless-stopped |
| ports: |
| - "${LOCUST_WEB_PORT}" |
| environment: |
| - LOCUST_WEB_PORT |
| - LOCUST_USERS |
| - LOCUST_HOST |
| - LOCUST_HEADLESS |
| - LOCUST_AUTOSTART |
| - LOCUST_BROWSER_TRAFFIC_ENABLED=true |
| - OTEL_EXPORTER_OTLP_ENDPOINT |
| - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=load-generator |
| - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python |
| - LOCUST_WEB_HOST=0.0.0.0 |
| - FLAGD_HOST |
| - FLAGD_OFREP_PORT |
| depends_on: |
| frontend: |
| condition: service_started |
| flagd: |
| condition: service_started |
| logging: *logging |
| |
| # Payment service |
| payment: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-payment |
| container_name: payment |
| build: |
| context: ./ |
| dockerfile: ${PAYMENT_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-payment |
| deploy: |
| resources: |
| limits: |
| memory: 120M |
| restart: unless-stopped |
| ports: |
| - "${PAYMENT_PORT}" |
| environment: |
| - PAYMENT_PORT |
| - FLAGD_HOST |
| - FLAGD_PORT |
| - OTEL_EXPORTER_OTLP_ENDPOINT |
| - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=payment |
| depends_on: |
| otel-collector: |
| condition: service_started |
| flagd: |
| condition: service_started |
| logging: *logging |
| |
| # Product Catalog service |
| product-catalog: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-product-catalog |
| container_name: product-catalog |
| build: |
| context: ./ |
| dockerfile: ${PRODUCT_CATALOG_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-product-catalog |
| deploy: |
| resources: |
| limits: |
| memory: 20M |
| restart: unless-stopped |
| ports: |
| - "${PRODUCT_CATALOG_PORT}" |
| environment: |
| - PRODUCT_CATALOG_PORT |
| - PRODUCT_CATALOG_RELOAD_INTERVAL |
| - FLAGD_HOST |
| - FLAGD_PORT |
| - GOMEMLIMIT=16MiB |
| - OTEL_EXPORTER_OTLP_ENDPOINT |
| - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=product-catalog |
| volumes: |
| - ./src/product-catalog/products:/usr/src/app/products |
| depends_on: |
| otel-collector: |
| condition: service_started |
| flagd: |
| condition: service_started |
| logging: *logging |
| |
| # Quote service |
| quote: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-quote |
| container_name: quote |
| build: |
| context: ./ |
| dockerfile: ${QUOTE_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-quote |
| deploy: |
| resources: |
| limits: |
| memory: 40M |
| restart: unless-stopped |
| ports: |
| - "${QUOTE_PORT}" |
| environment: |
| - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} |
| - OTEL_PHP_AUTOLOAD_ENABLED=true |
| - QUOTE_PORT |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=quote |
| - OTEL_PHP_INTERNAL_METRICS_ENABLED=true |
| depends_on: |
| otel-collector: |
| condition: service_started |
| logging: *logging |
| |
| # Recommendation service |
| recommendation: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-recommendation |
| container_name: recommendation |
| build: |
| context: ./ |
| dockerfile: ${RECOMMENDATION_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-recommendation |
| deploy: |
| resources: |
| limits: |
| memory: 500M # This is high to enable supporting the recommendationCache feature flag use case |
| restart: unless-stopped |
| ports: |
| - "${RECOMMENDATION_PORT}" |
| environment: |
| - RECOMMENDATION_PORT |
| - PRODUCT_CATALOG_ADDR |
| - FLAGD_HOST |
| - FLAGD_PORT |
| - OTEL_PYTHON_LOG_CORRELATION=true |
| - OTEL_EXPORTER_OTLP_ENDPOINT |
| - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=recommendation |
| - PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python |
| depends_on: |
| product-catalog: |
| condition: service_started |
| otel-collector: |
| condition: service_started |
| flagd: |
| condition: service_started |
| logging: *logging |
| |
| # Shipping service |
| shipping: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-shipping |
| container_name: shipping |
| build: |
| context: ./ |
| dockerfile: ${SHIPPING_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-shipping |
| deploy: |
| resources: |
| limits: |
| memory: 20M |
| restart: unless-stopped |
| ports: |
| - "${SHIPPING_PORT}" |
| environment: |
| - SHIPPING_PORT |
| - QUOTE_ADDR |
| - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_GRPC} |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=shipping |
| depends_on: |
| otel-collector: |
| condition: service_started |
| logging: *logging |
| |
| # ****************** |
| # Dependent Services |
| # ****************** |
| # Flagd, feature flagging service |
| flagd: |
| image: ${FLAGD_IMAGE} |
| container_name: flagd |
| deploy: |
| resources: |
| limits: |
| memory: 75M |
| restart: unless-stopped |
| environment: |
| - FLAGD_OTEL_COLLECTOR_URI=${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_GRPC} |
| - FLAGD_METRICS_EXPORTER=otel |
| - GOMEMLIMIT=60MiB |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=flagd |
| command: [ |
| "start", |
| "--uri", |
| "file:./etc/flagd/demo.flagd.json" |
| ] |
| ports: |
| - "${FLAGD_PORT}" |
| - "${FLAGD_OFREP_PORT}" |
| volumes: |
| - ./src/flagd:/etc/flagd |
| logging: |
| *logging |
| |
| # Flagd UI for configuring the feature flag service |
| flagd-ui: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-flagd-ui |
| container_name: flagd-ui |
| build: |
| context: ./ |
| dockerfile: ${FLAGD_UI_DOCKERFILE} |
| deploy: |
| resources: |
| limits: |
| memory: 100M |
| restart: unless-stopped |
| environment: |
| - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} |
| - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=flagd-ui |
| ports: |
| - "${FLAGD_UI_PORT}" |
| depends_on: |
| otel-collector: |
| condition: service_started |
| flagd: |
| condition: service_started |
| volumes: |
| - ./src/flagd:/app/data |
| |
| # Kafka used by Checkout, Accounting, and Fraud Detection services |
| kafka: |
| image: ${IMAGE_NAME}:${DEMO_VERSION}-kafka |
| container_name: kafka |
| build: |
| context: ./ |
| dockerfile: ${KAFKA_DOCKERFILE} |
| cache_from: |
| - ${IMAGE_NAME}:${IMAGE_VERSION}-kafka |
| args: |
| OTEL_JAVA_AGENT_VERSION: ${OTEL_JAVA_AGENT_VERSION} |
| deploy: |
| resources: |
| limits: |
| memory: 620M |
| restart: unless-stopped |
| environment: |
| - KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092 |
| - OTEL_EXPORTER_OTLP_ENDPOINT=http://${OTEL_COLLECTOR_HOST}:${OTEL_COLLECTOR_PORT_HTTP} |
| - OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
| - OTEL_RESOURCE_ATTRIBUTES |
| - OTEL_SERVICE_NAME=kafka |
| - KAFKA_HEAP_OPTS=-Xmx400m -Xms400m |
| # Workaround on OSX for https://bugs.openjdk.org/browse/JDK-8345296 |
| - _JAVA_OPTIONS |
| healthcheck: |
| test: nc -z kafka 9092 |
| start_period: 10s |
| interval: 5s |
| timeout: 10s |
| retries: 10 |
| logging: *logging |
| |
| # Valkey used by Cart service |
| valkey-cart: |
| image: ${VALKEY_IMAGE} |
| container_name: valkey-cart |
| user: valkey |
| deploy: |
| resources: |
| limits: |
| memory: 20M |
| restart: unless-stopped |
| ports: |
| - "${VALKEY_PORT}" |
| logging: *logging |
| |
| |
| # ******************** |
| # Telemetry Components |
| # ******************** |
| # Jaeger |
| jaeger: |
| image: ${JAEGERTRACING_IMAGE} |
| container_name: jaeger |
| command: |
| - "--memory.max-traces=25000" |
| - "--query.base-path=/jaeger/ui" |
| - "--prometheus.server-url=http://${PROMETHEUS_ADDR}" |
| - "--prometheus.query.normalize-calls=true" |
| - "--prometheus.query.normalize-duration=true" |
| deploy: |
| resources: |
| limits: |
| memory: 1200M |
| restart: unless-stopped |
| ports: |
| - "${JAEGER_PORT}" # Jaeger UI |
| - "${OTEL_COLLECTOR_PORT_GRPC}" |
| environment: |
| - METRICS_STORAGE_TYPE=prometheus |
| logging: *logging |
| |
| # Grafana |
| grafana: |
| image: ${GRAFANA_IMAGE} |
| container_name: grafana |
| deploy: |
| resources: |
| limits: |
| memory: 1024M |
| restart: unless-stopped |
| environment: |
| NODE_ENV: development |
| GF_LOG_FILTERS: plugin.doris-app:debug |
| GF_LOG_LEVEL: debug |
| GF_DATAPROXY_LOGGING: 1 |
| GF_PLUGINS_ALLOW_LOADING_UNSIGNED_PLUGINS: doris-app |
| GF_AUTH_ANONYMOUS_ENABLED: true |
| GF_AUTH_ANONYMOUS_ORG_ROLE: Admin |
| GF_INSTALL_PLUGINS: grafana-opensearch-datasource |
| volumes: |
| - ./src/grafana/grafana.ini:/etc/grafana/grafana.ini |
| - ./src/grafana/plugins/doris-app:/var/lib/grafana/plugins/doris-app |
| - ./src/grafana/provisioning/:/etc/grafana/provisioning/ |
| ports: |
| - "33000:${GRAFANA_PORT}" |
| logging: *logging |
| |
| # OpenTelemetry Collector |
| otel-collector: |
| image: ${COLLECTOR_CONTRIB_IMAGE} |
| container_name: otel-collector |
| deploy: |
| resources: |
| limits: |
| memory: 200M |
| restart: unless-stopped |
| command: [ "--config=/etc/otelcol-config.yml", "--config=/etc/otelcol-config-extras.yml" ] |
| user: 0:0 |
| volumes: |
| - ${HOST_FILESYSTEM}:/hostfs:ro |
| - ${DOCKER_SOCK}:/var/run/docker.sock:ro |
| - ${OTEL_COLLECTOR_CONFIG}:/etc/otelcol-config.yml |
| - ${OTEL_COLLECTOR_CONFIG_EXTRAS}:/etc/otelcol-config-extras.yml |
| ports: |
| - "${OTEL_COLLECTOR_PORT_GRPC}" |
| - "${OTEL_COLLECTOR_PORT_HTTP}" |
| depends_on: |
| jaeger: |
| condition: service_started |
| doris: |
| condition: service_started |
| logging: *logging |
| environment: |
| - ENVOY_PORT |
| - HOST_FILESYSTEM |
| - OTEL_COLLECTOR_HOST |
| - OTEL_COLLECTOR_PORT_GRPC |
| - OTEL_COLLECTOR_PORT_HTTP |
| - GOMEMLIMIT=160MiB |
| |
| # Prometheus |
| prometheus: |
| image: ${PROMETHEUS_IMAGE} |
| container_name: prometheus |
| command: |
| - --web.console.templates=/etc/prometheus/consoles |
| - --web.console.libraries=/etc/prometheus/console_libraries |
| - --storage.tsdb.retention.time=1h |
| - --config.file=/etc/prometheus/prometheus-config.yaml |
| - --storage.tsdb.path=/prometheus |
| - --web.enable-lifecycle |
| - --web.route-prefix=/ |
| - --web.enable-otlp-receiver |
| - --enable-feature=exemplar-storage |
| volumes: |
| - ./src/prometheus/prometheus-config.yaml:/etc/prometheus/prometheus-config.yaml |
| deploy: |
| resources: |
| limits: |
| memory: 300M |
| restart: unless-stopped |
| ports: |
| - "${PROMETHEUS_PORT}" |
| logging: *logging |
| |
| # Doris |
| doris: |
| image: ${DORIS_IMAGE} |
| container_name: doris |
| restart: unless-stopped |
| privileged: true |
| ports: |
| - "${DORIS_SERVICE_FE_HTTP_PORT}" |
| - "${DORIS_SERVICE_FE_MYSQL_PORT}" |
| - "${DORIS_SERVICE_BE_HTTP_PORT}" |
| logging: *logging |
| environment: |
| - SKIP_CHECK_ULIMIT=true |
| |