services: # --- Pyroscope Distributor --- pyroscope-distributor: image: grafana/pyroscope:latest container_name: pyroscope-distributor ports: - '4040:4040' volumes: - distributor-data:/data - ./pyroscope-config.yaml:/etc/pyroscope/config.yaml command: - "-target=distributor" - "-config.file=/etc/pyroscope/config.yaml" networks: - pyroscope-network restart: unless-stopped # --- Pyroscope Ingester --- pyroscope-ingester: image: grafana/pyroscope:latest container_name: pyroscope-ingester ports: - '4041:4040' volumes: - ingester-data:/data - ./pyroscope-config.yaml:/etc/pyroscope/config.yaml command: - "-target=ingester" - "-config.file=/etc/pyroscope/config.yaml" networks: - pyroscope-network restart: unless-stopped depends_on: - pyroscope-distributor # --- Pyroscope Store Gateway --- pyroscope-store-gateway: image: grafana/pyroscope:latest container_name: pyroscope-store-gateway ports: - '4042:4040' volumes: - ./pyroscope-config.yaml:/etc/pyroscope/config.yaml command: - "-target=store-gateway" - "-config.file=/etc/pyroscope/config.yaml" networks: - pyroscope-network restart: unless-stopped depends_on: - pyroscope-ingester # --- Pyroscope Compactor --- pyroscope-compactor: image: grafana/pyroscope:latest container_name: pyroscope-compactor ports: - '4043:4040' volumes: - ./pyroscope-config.yaml:/etc/pyroscope/config.yaml command: - "-target=compactor" - "-config.file=/etc/pyroscope/config.yaml" networks: - pyroscope-network restart: unless-stopped depends_on: - pyroscope-ingester # --- Pyroscope Querier --- pyroscope-querier: image: grafana/pyroscope:latest container_name: pyroscope-querier ports: - '4044:4040' volumes: - querier-data:/data - ./pyroscope-config.yaml:/etc/pyroscope/config.yaml command: - "-target=querier" - "-config.file=/etc/pyroscope/config.yaml" networks: - pyroscope-network restart: unless-stopped depends_on: - pyroscope-ingester # --- OpenTelemetry Collector with eBPF Profiler --- otel-collector: image: otel/opentelemetry-collector-ebpf-profiler:latest privileged: true pid: host volumes: - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml:ro - /sys/kernel/debug:/sys/kernel/debug - /sys/kernel/tracing:/sys/kernel/tracing - /lib/modules:/lib/modules command: - "--config=/etc/otel-collector-config.yaml" - "--feature-gates=service.profilesSupport" networks: - pyroscope-network # --- Example applications --- cpp-resource-consuming: build: ./cpp_app container_name: cpp-resource-consuming ports: - '8080:8080' networks: - pyroscope-network restart: unless-stopped cpp-malloc-consuming: build: ./cpp_consum container_name: cpp-malloc-consuming networks: - pyroscope-network restart: unless-stopped java-resource-consuming: build: ./java_app container_name: java-resource-consuming networks: - pyroscope-network restart: unless-stopped # Define all volumes used by services volumes: distributor-data: driver: local ingester-data: driver: local querier-data: driver: local # Define network for service communication networks: pyroscope-network: driver: bridge