SigNoz APM Platform
SigNoz open-source APM with distributed tracing, metrics, and logs.
Overview
SigNoz is an open-source Application Performance Monitoring (APM) platform that provides distributed tracing, metrics collection, and log aggregation in a single unified interface. Built as a modern alternative to proprietary solutions like Datadog and New Relic, SigNoz leverages OpenTelemetry standards for instrumentation and uses ClickHouse as its high-performance analytical database backend. The platform emerged from the need for cost-effective, self-hosted observability tools that don't compromise on features or performance.
This stack combines SigNoz's query service and frontend with ClickHouse's columnar database engine and OpenTelemetry Collector for data ingestion. The query service acts as the API layer, processing requests from the React-based frontend while executing complex analytical queries against ClickHouse. The OpenTelemetry Collector receives telemetry data from instrumented applications via OTLP protocols, processes and enriches the data, then forwards it to ClickHouse for storage. Alertmanager handles notification routing and alert deduplication based on rules defined in the SigNoz interface.
This configuration suits engineering teams transitioning from expensive SaaS APM solutions, startups requiring comprehensive observability without vendor lock-in, and organizations with data sovereignty requirements. The combination delivers enterprise-grade APM capabilities while maintaining full control over telemetry data and avoiding per-seat or data volume pricing models that can become prohibitively expensive at scale.
Key Features
- Distributed tracing with flame graphs showing request flows across microservices
- Custom metrics dashboards with PromQL-compatible query language
- Log aggregation with correlation to traces and metrics using trace IDs
- ClickHouse-powered sub-second query performance on billions of telemetry events
- OpenTelemetry native instrumentation supporting 15+ programming languages
- Service topology mapping with dependency graphs and error rate visualization
- Alert rules with Slack, PagerDuty, and webhook integrations via Alertmanager
- Exception tracking with stack trace analysis and occurrence patterns
Common Use Cases
- 1Microservices monitoring for e-commerce platforms tracking user journeys across services
- 2Database query optimization using trace analysis to identify slow SQL operations
- 3API performance monitoring for mobile app backends with high transaction volumes
- 4Cost reduction migration from Datadog or New Relic for growing engineering teams
- 5Compliance-focused monitoring where telemetry data must remain on-premises
- 6Multi-tenant SaaS debugging where customer-specific performance issues need isolation
- 7DevOps pipeline monitoring to track deployment impact on application performance
Prerequisites
- Docker host with minimum 8GB RAM (ClickHouse requires 2GB+ for reasonable performance)
- Available ports 3301 (SigNoz UI), 4317 (OTLP gRPC), and 4318 (OTLP HTTP)
- OpenTelemetry Collector configuration file (otel-collector-config.yaml) with processors and exporters
- Application instrumentation with OpenTelemetry SDKs pointing to collector endpoints
- Understanding of distributed tracing concepts and service mesh architectures
- Basic ClickHouse query knowledge for custom metric exploration and debugging
For development & testing. Review security settings, change default credentials, and test thoroughly before production use. See Terms
docker-compose.yml
docker-compose.yml
1services: 2 clickhouse: 3 image: clickhouse/clickhouse-server:23.11-alpine4 container_name: signoz-clickhouse5 volumes: 6 - clickhouse_data:/var/lib/clickhouse7 ulimits: 8 nofile: 9 soft: 26214410 hard: 26214411 healthcheck: 12 test: ["CMD", "wget", "--spider", "-q", "localhost:8123/ping"]13 interval: 10s14 timeout: 5s15 retries: 516 networks: 17 - signoz-network1819 query-service: 20 image: signoz/query-service:0.38.021 container_name: signoz-query22 environment: 23 - ClickHouseUrl=tcp://clickhouse:900024 - ALERTMANAGER_API_PREFIX=http://alertmanager:9093/api/25 - SIGNOZ_LOCAL_DB_PATH=/var/lib/signoz/signoz.db26 - DASHBOARDS_PATH=/root/config/dashboards27 - STORAGE=clickhouse28 volumes: 29 - signoz_data:/var/lib/signoz30 depends_on: 31 clickhouse: 32 condition: service_healthy33 networks: 34 - signoz-network3536 frontend: 37 image: signoz/frontend:0.38.038 container_name: signoz-frontend39 ports: 40 - "3301:3301"41 depends_on: 42 - query-service43 networks: 44 - signoz-network4546 otel-collector: 47 image: signoz/signoz-otel-collector:0.88.1148 container_name: signoz-otel49 command: ["--config=/etc/otel-collector-config.yaml"]50 volumes: 51 - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml52 ports: 53 - "4317:4317"54 - "4318:4318"55 depends_on: 56 - clickhouse57 networks: 58 - signoz-network5960 alertmanager: 61 image: signoz/alertmanager:0.23.462 container_name: signoz-alertmanager63 volumes: 64 - alertmanager_data:/data65 networks: 66 - signoz-network6768volumes: 69 clickhouse_data: 70 signoz_data: 71 alertmanager_data: 7273networks: 74 signoz-network: 75 driver: bridge.env Template
.env
1# SigNoz APM2SIGNOZ_VERSION=0.38.0Usage Notes
- 1UI at http://localhost:3301
- 2OTLP gRPC at localhost:4317
- 3OTLP HTTP at localhost:4318
- 4Create otel-collector-config.yaml
- 5Use official SigNoz install script for production
Individual Services(5 services)
Copy individual services to mix and match with your existing compose files.
clickhouse
clickhouse:
image: clickhouse/clickhouse-server:23.11-alpine
container_name: signoz-clickhouse
volumes:
- clickhouse_data:/var/lib/clickhouse
ulimits:
nofile:
soft: 262144
hard: 262144
healthcheck:
test:
- CMD
- wget
- "--spider"
- "-q"
- localhost:8123/ping
interval: 10s
timeout: 5s
retries: 5
networks:
- signoz-network
query-service
query-service:
image: signoz/query-service:0.38.0
container_name: signoz-query
environment:
- ClickHouseUrl=tcp://clickhouse:9000
- ALERTMANAGER_API_PREFIX=http://alertmanager:9093/api/
- SIGNOZ_LOCAL_DB_PATH=/var/lib/signoz/signoz.db
- DASHBOARDS_PATH=/root/config/dashboards
- STORAGE=clickhouse
volumes:
- signoz_data:/var/lib/signoz
depends_on:
clickhouse:
condition: service_healthy
networks:
- signoz-network
frontend
frontend:
image: signoz/frontend:0.38.0
container_name: signoz-frontend
ports:
- "3301:3301"
depends_on:
- query-service
networks:
- signoz-network
otel-collector
otel-collector:
image: signoz/signoz-otel-collector:0.88.11
container_name: signoz-otel
command:
- "--config=/etc/otel-collector-config.yaml"
volumes:
- ./otel-collector-config.yaml:/etc/otel-collector-config.yaml
ports:
- "4317:4317"
- "4318:4318"
depends_on:
- clickhouse
networks:
- signoz-network
alertmanager
alertmanager:
image: signoz/alertmanager:0.23.4
container_name: signoz-alertmanager
volumes:
- alertmanager_data:/data
networks:
- signoz-network
Quick Start
terminal
1# 1. Create the compose file2cat > docker-compose.yml << 'EOF'3services:4 clickhouse:5 image: clickhouse/clickhouse-server:23.11-alpine6 container_name: signoz-clickhouse7 volumes:8 - clickhouse_data:/var/lib/clickhouse9 ulimits:10 nofile:11 soft: 26214412 hard: 26214413 healthcheck:14 test: ["CMD", "wget", "--spider", "-q", "localhost:8123/ping"]15 interval: 10s16 timeout: 5s17 retries: 518 networks:19 - signoz-network2021 query-service:22 image: signoz/query-service:0.38.023 container_name: signoz-query24 environment:25 - ClickHouseUrl=tcp://clickhouse:900026 - ALERTMANAGER_API_PREFIX=http://alertmanager:9093/api/27 - SIGNOZ_LOCAL_DB_PATH=/var/lib/signoz/signoz.db28 - DASHBOARDS_PATH=/root/config/dashboards29 - STORAGE=clickhouse30 volumes:31 - signoz_data:/var/lib/signoz32 depends_on:33 clickhouse:34 condition: service_healthy35 networks:36 - signoz-network3738 frontend:39 image: signoz/frontend:0.38.040 container_name: signoz-frontend41 ports:42 - "3301:3301"43 depends_on:44 - query-service45 networks:46 - signoz-network4748 otel-collector:49 image: signoz/signoz-otel-collector:0.88.1150 container_name: signoz-otel51 command: ["--config=/etc/otel-collector-config.yaml"]52 volumes:53 - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml54 ports:55 - "4317:4317"56 - "4318:4318"57 depends_on:58 - clickhouse59 networks:60 - signoz-network6162 alertmanager:63 image: signoz/alertmanager:0.23.464 container_name: signoz-alertmanager65 volumes:66 - alertmanager_data:/data67 networks:68 - signoz-network6970volumes:71 clickhouse_data:72 signoz_data:73 alertmanager_data:7475networks:76 signoz-network:77 driver: bridge78EOF7980# 2. Create the .env file81cat > .env << 'EOF'82# SigNoz APM83SIGNOZ_VERSION=0.38.084EOF8586# 3. Start the services87docker compose up -d8889# 4. View logs90docker compose logs -fOne-Liner
Run this command to download and set up the recipe in one step:
terminal
1curl -fsSL https://docker.recipes/api/recipes/signoz-apm/run | bashTroubleshooting
- ClickHouse startup fails with 'Cannot allocate memory': Increase Docker memory limits to 4GB+ and set proper ulimits for file descriptors
- Query service cannot connect to ClickHouse: Verify ClickHouseUrl environment variable uses correct hostname and port 9000 (not HTTP port 8123)
- No traces appearing in SigNoz UI: Check OpenTelemetry Collector logs for export errors and verify OTLP endpoint configuration in application instrumentation
- Frontend shows 'Query Service Unavailable': Ensure query-service container started after ClickHouse health check passes and check network connectivity
- High memory usage in ClickHouse: Configure proper TTL policies for trace data retention and enable compression in table definitions
- Alertmanager notifications not sending: Verify webhook URLs are accessible from container and check Alertmanager configuration reload status
Community Notes
Loading...
Loading notes...
Download Recipe Kit
Get all files in a ready-to-deploy package
Includes docker-compose.yml, .env template, README, and license
Components
signozclickhousequery-serviceotel-collector
Tags
#signoz#apm#tracing#metrics#datadog-alternative#opentelemetry
Category
Monitoring & ObservabilityAd Space
Shortcuts: C CopyF FavoriteD Download