services: app: build: . environment: DATABASE_URL: "postgres://postgres:password@db:5432/bookapp" OTEL_SERVICE_NAME: "bookapp" OTEL_EXPORTER_OTLP_ENDPOINT: http://telemetry:4317 TRACE_SAMPLE_PROBABILITY: 1.0 KAFKA_BROKER_URL: "kafka:9092" ENABLE_KAFKA_PRODUCER: "true" ports: - "8000:8000" - "6669:6669" depends_on: kafka: condition: service_healthy db: condition: service_healthy backend: build: . environment: DATABASE_URL: "postgres://postgres:password@db:5432/bookapp" OTEL_SERVICE_NAME: "backend" OTEL_EXPORTER_OTLP_ENDPOINT: http://telemetry:4317 TRACE_SAMPLE_PROBABILITY: 1.0 KAFKA_BROKER_URL: "kafka:9092" ENABLE_KAFKA_CONSUMER: "true" ENABLE_KAFKA_PRODUCER: "true" ports: - "8001:8000" depends_on: app: condition: service_started kafka: condition: service_healthy db: condition: service_healthy db: image: postgres:17 environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: password POSTGRES_DB: bookapp ports: - "5432:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 kafka: image: bitnami/kafka:latest environment: KAFKA_BROKER_ID: 1 KAFKA_LISTENERS: PLAINTEXT://:9092 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:9092 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 ALLOW_PLAINTEXT_LISTENER: 'yes' healthcheck: test: ["CMD", "/opt/bitnami/kafka/bin/kafka-topics.sh", "--bootstrap-server", "localhost:9092", "--list"] interval: 10s timeout: 5s retries: 5 start_period: 20s depends_on: - zookeeper ports: - "9092:9092" zookeeper: image: bitnami/zookeeper:latest environment: ALLOW_ANONYMOUS_LOGIN: 'yes' ports: - "2181:2181" telemetry: image: grafana/otel-lgtm:0.11.0 depends_on: db: condition: service_healthy healthcheck: test: ["CMD", "cat", "/tmp/ready"] timeout: 30s retries: 10 environment: ENABLE_LOGS_OTELCOL: 'true' GF_AUTH_ANONYMOUS_ORG_NAME: 'Main Org.' GF_AUTH_DISABLE_LOGIN_FORM: 'true' ENABLE_LOGS_PROMETHEUS: 'true' # https://grafana.com/docs/grafana/latest/setup-grafana/installation/docker/#install-plugins-in-the-docker-container GF_PLUGINS_PREINSTALL: 'grafana-exploretraces-app' #AXIOM_API_KEY: '' ports: - "4317:4317" - "4318:4318" - "3000:3000" volumes: - ./telemetry-config/tempo-config.yaml:/otel-lgtm/tempo-config.yaml - ./telemetry-config/otelcon-config.yaml:/otel-lgtm/otelcol-config.yaml - ./telemetry-config/grafana-dashboards.yaml:/otel-lgtm/grafana/conf/provisioning/dashboards/grafana-dashboards.yaml - ./telemetry-config/dashboards:/otel-lgtm/dashboards - ./telemetry-config/alerts:/otel-lgtm/grafana/conf/provisioning/alerting # Required for docker stats - /var/run/docker.sock:/var/run/docker.sock