version: "3" services: nginx: image: nginx-otel volumes: - './shared/nginx_otel_module.conf:/etc/nginx/conf.d/opentelemetry_module.conf' ports: - 8080:80 depends_on: - otel-collector # And put them in an OTEL collector pipeline... otel-collector: image: otel/opentelemetry-collector:0.61.0 command: [ "--config=/etc/otel-collector.yaml" ] volumes: - './shared/otel-collector.yaml:/etc/otel-collector.yaml' # To eventually offload to Tempo... tempo: image: grafana/tempo:latest command: [ "-config.file=/etc/tempo.yaml" ] volumes: - './shared/tempo.yaml:/etc/tempo.yaml' - './shared/tempo-data:/tmp/tempo' ports: - "3200" # tempo - "4317" # otlp grpc - "4318" # otlp http prometheus: image: prom/prometheus:latest command: - --config.file=/etc/prometheus.yaml - --web.enable-remote-write-receiver - --enable-feature=exemplar-storage volumes: - './shared/prometheus.yaml:/etc/prometheus.yaml' ports: - "9090:9090" grafana: image: grafana/grafana:9.4.3 volumes: - './shared/grafana-datasources.yaml:/etc/grafana/provisioning/datasources/datasources.yaml' environment: - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin - GF_AUTH_DISABLE_LOGIN_FORM=true - GF_FEATURE_TOGGLES_ENABLE=traceqlEditor ports: - "3000:3000"