# 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: opentelemetry-demo driver: bridge services: # ******************** # Telemetry Components # ******************** # Jaeger jaeger: image: ${JAEGERTRACING_IMAGE} container_name: jaeger command: - "--memory.max-traces=5000" - "--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: 400M restart: unless-stopped ports: - "${JAEGER_SERVICE_PORT}:${JAEGER_SERVICE_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: 100M restart: unless-stopped environment: - "GF_INSTALL_PLUGINS=grafana-opensearch-datasource" volumes: - ./grafana/grafana.ini:/etc/grafana/grafana.ini - ./grafana/provisioning/:/etc/grafana/provisioning/ ports: - "${GRAFANA_SERVICE_PORT}:${GRAFANA_SERVICE_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_GRPC}" - "${OTEL_COLLECTOR_PORT_HTTP}:${OTEL_COLLECTOR_PORT_HTTP}" depends_on: jaeger: condition: service_started opensearch: condition: service_healthy logging: *logging environment: - ENVOY_PORT - HOST_FILESYSTEM - OTEL_COLLECTOR_HOST - OTEL_COLLECTOR_PORT_GRPC - OTEL_COLLECTOR_PORT_HTTP # 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: - ./prometheus/prometheus-config.yaml:/etc/prometheus/prometheus-config.yaml deploy: resources: limits: memory: 300M restart: unless-stopped ports: - "${PROMETHEUS_SERVICE_PORT}:${PROMETHEUS_SERVICE_PORT}" logging: *logging # OpenSearch opensearch: image: ${OPENSEARCH_IMAGE} container_name: opensearch deploy: resources: limits: memory: 1G restart: unless-stopped environment: - cluster.name=demo-cluster - node.name=demo-node - bootstrap.memory_lock=true - discovery.type=single-node - OPENSEARCH_JAVA_OPTS=-Xms300m -Xmx300m - DISABLE_INSTALL_DEMO_CONFIG=true - DISABLE_SECURITY_PLUGIN=true ulimits: memlock: soft: -1 hard: -1 nofile: soft: 65536 hard: 65536 ports: - "9200:9200" healthcheck: test: curl -s http://localhost:9200/_cluster/health | grep -E '"status":"(green|yellow)"' start_period: 10s interval: 5s timeout: 10s retries: 10 logging: *logging