# documentation: https://signoz.io/docs/introduction/ # slogan: An observability platform native to OpenTelemetry with logs, traces and metrics. # tags: telemetry, server, applications, interface, logs, monitoring, traces, metrics # logo: svgs/signoz.svg # port: 8080 services: init-clickhouse: image: clickhouse/clickhouse-server:25.5.6-alpine command: - bash - -c - | version="v0.0.1" node_os=$$(uname -s | tr '[:upper:]' '[:lower:]') node_arch=$$(uname -m | sed s/aarch64/arm64/ | sed s/x86_64/amd64/) echo "Fetching histogram-binary for $${node_os}/$${node_arch}" cd /tmp wget -O histogram-quantile.tar.gz "https://github.com/SigNoz/signoz/releases/download/histogram-quantile%2F$${version}/histogram-quantile_$${node_os}_$${node_arch}.tar.gz" tar -xvzf histogram-quantile.tar.gz mkdir -p /var/lib/clickhouse/user_scripts/histogramQuantile mv histogram-quantile /var/lib/clickhouse/user_scripts/histogramQuantile restart: on-failure exclude_from_hc: true logging: options: max-size: 50m max-file: "3" zookeeper: image: signoz/zookeeper:3.9.3 user: root healthcheck: test: - CMD-SHELL - curl -s -m 2 http://localhost:8080/commands/ruok | grep error | grep null interval: 30s timeout: 5s retries: 3 logging: options: max-size: 50m max-file: "3" volumes: - zookeeper:/bitnami/zookeeper environment: - ALLOW_ANONYMOUS_LOGIN=${ZOO_ALLOW_ANONYMOUS_LOGIN:-yes} - ZOO_AUTOPURGE_INTERVAL=${ZOO_AUTOPURGE_INTERVAL:-1} - ZOO_ENABLE_PROMETHEUS_METRICS=${ZOO_ENABLE_PROMETHEUS_METRICS:-yes} - ZOO_PROMETHEUS_METRICS_PORT_NUMBER=${ZOO_PROMETHEUS_METRICS_PORT_NUMBER:-9141} clickhouse: # addding non LTS version due to this fix https://github.com/ClickHouse/ClickHouse/commit/32caf8716352f45c1b617274c7508c86b7d1afab image: clickhouse/clickhouse-server:25.5.6-alpine tty: true depends_on: init-clickhouse: condition: service_completed_successfully zookeeper: condition: service_healthy healthcheck: test: - CMD - wget - --spider - -q - 0.0.0.0:8123/ping interval: 30s timeout: 5s retries: 3 ulimits: nproc: 65535 nofile: soft: 262144 hard: 262144 logging: options: max-size: 50m max-file: "3" environment: - "CLICKHOUSE_SKIP_USER_SETUP=1" volumes: - type: volume source: clickhouse target: /var/lib/clickhouse/ - type: bind source: ./clickhouse/custom-function.xml target: /etc/clickhouse-server/custom-function.xml content: | executable histogramQuantile Float64 Array(Float64) buckets Array(Float64) counts Float64 quantile CSV ./histogramQuantile - type: bind source: ./clickhouse/cluster.xml target: /etc/clickhouse-server/config.d/cluster.xml content: | zookeeper 2181 clickhouse 9000 - type: bind source: ./clickhouse/users.xml target: /etc/clickhouse-server/users.xml content: | 10000000000 random 1 ::/0 default default 3600 0 0 0 0 0 - type: bind source: ./clickhouse/config.xml target: /etc/clickhouse-server/config.xml content: | 4096 3 100 5368709120 1000 134217728 10000 *_dictionary.xml *function.xml /var/lib/clickhouse/user_scripts/ 8123 9000 9004 9005 9009 information json 01 example01-01-1 /metrics 9363 true true true true engine MergeTree partition by toYYYYMM(finish_date) order by (finish_date, finish_time_us, trace_id) hide encrypt/decrypt arguments ((?:aes_)?(?:encrypt|decrypt)(?:_mysql)?)\s*\(\s*(?:'(?:\\'|.)+'|.*?)\s*\) \1(???) false false https://6f33034cfe684dd7a3ab9875e57b1c8d@o388870.ingest.sentry.io/5226277 268435456 true users.xml /var/lib/clickhouse/access/ default /clickhouse/task_queue/ddl signoz: image: signoz/signoz:v0.97.1 depends_on: clickhouse: condition: service_healthy schema-migrator-sync: condition: service_completed_successfully logging: options: max-size: 50m max-file: "3" command: - --config=/root/config/prometheus.yml volumes: - type: bind source: ./prometheus.yml target: /root/config/prometheus.yml content: | # my global config global: scrape_interval: 5s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: - alertmanager:9093 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: [] # - "first_rules.yml" # - "second_rules.yml" # - 'alerts.yml' # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: [] remote_read: - url: tcp://clickhouse:9000/signoz_metrics - type: volume source: sqlite target: /var/lib/signoz/ environment: - SERVICE_URL_SIGNOZ_8080 - SIGNOZ_JWT_SECRET=${SERVICE_REALBASE64_JWTSECRET} - SIGNOZ_TELEMETRYSTORE_CLICKHOUSE_DSN=tcp://clickhouse:9000 - SIGNOZ_SQLSTORE_SQLITE_PATH=/var/lib/signoz/signoz.db - DASHBOARDS_PATH=/root/config/dashboards - STORAGE=clickhouse - GODEBUG=netdns=go - DEPLOYMENT_TYPE=docker-standalone-amd - SIGNOZ_STATSREPORTER_ENABLED=${SIGNOZ_STATSREPORTER_ENABLED:-true} - SIGNOZ_EMAILING_ENABLED=${SIGNOZ_EMAILING_ENABLED:-false} - SIGNOZ_EMAILING_SMTP_ADDRESS=${SIGNOZ_EMAILING_SMTP_ADDRESS} - SIGNOZ_EMAILING_SMTP_FROM=${SIGNOZ_EMAILING_SMTP_FROM} - SIGNOZ_EMAILING_SMTP_AUTH_USERNAME=${SIGNOZ_EMAILING_SMTP_AUTH_USERNAME} - SIGNOZ_EMAILING_SMTP_AUTH_PASSWORD=${SIGNOZ_EMAILING_SMTP_AUTH_PASSWORD} - SIGNOZ_ALERTMANAGER_PROVIDER=signoz - SIGNOZ_ALERTMANAGER_SIGNOZ_GLOBAL_SMTP__AUTH__PASSWORD=${SIGNOZ_ALERTMANAGER_SIGNOZ_GLOBAL_SMTP__AUTH__PASSWORD} - SIGNOZ_ALERTMANAGER_SIGNOZ_GLOBAL_SMTP__AUTH__USERNAME=${SIGNOZ_ALERTMANAGER_SIGNOZ_GLOBAL_SMTP__AUTH__USERNAME} - SIGNOZ_ALERTMANAGER_SIGNOZ_GLOBAL_SMTP__FROM=${SIGNOZ_ALERTMANAGER_SIGNOZ_GLOBAL_SMTP__FROM} - SIGNOZ_ALERTMANAGER_SIGNOZ_GLOBAL_SMTP__SMARTHOST=${SIGNOZ_ALERTMANAGER_SIGNOZ_GLOBAL_SMTP__SMARTHOST} - DOT_METRICS_ENABLED=true healthcheck: test: - CMD - wget - --spider - -q - localhost:8080/api/v1/health interval: 30s timeout: 5s retries: 3 otel-collector: image: signoz/signoz-otel-collector:v0.129.7 depends_on: clickhouse: condition: service_healthy schema-migrator-sync: condition: service_completed_successfully signoz: condition: service_healthy logging: options: max-size: 50m max-file: "3" command: - --config=/etc/otel-collector-config.yaml - --manager-config=/etc/manager-config.yaml - --copy-path=/var/tmp/collector-config.yaml - --feature-gates=-pkg.translator.prometheus.NormalizeName volumes: - type: bind source: ./otel-collector-config.yaml target: /etc/otel-collector-config.yaml content: | receivers: otlp: protocols: grpc: endpoint: 0.0.0.0:4317 http: endpoint: 0.0.0.0:4318 prometheus: config: global: scrape_interval: 60s scrape_configs: - job_name: otel-collector static_configs: - targets: - localhost:8888 labels: job_name: otel-collector processors: batch: send_batch_size: 10000 send_batch_max_size: 11000 timeout: 10s resourcedetection: # Using OTEL_RESOURCE_ATTRIBUTES envvar, env detector adds custom labels. detectors: [env, system] timeout: 2s signozspanmetrics/delta: metrics_exporter: signozclickhousemetrics metrics_flush_interval: 60s latency_histogram_buckets: [100us, 1ms, 2ms, 6ms, 10ms, 50ms, 100ms, 250ms, 500ms, 1000ms, 1400ms, 2000ms, 5s, 10s, 20s, 40s, 60s ] dimensions_cache_size: 100000 aggregation_temporality: AGGREGATION_TEMPORALITY_DELTA enable_exp_histogram: true dimensions: - name: service.namespace default: default - name: deployment.environment default: default # This is added to ensure the uniqueness of the timeseries # Otherwise, identical timeseries produced by multiple replicas of # collectors result in incorrect APM metrics - name: signoz.collector.id - name: service.version - name: browser.platform - name: browser.mobile - name: k8s.cluster.name - name: k8s.node.name - name: k8s.namespace.name - name: host.name - name: host.type - name: container.name extensions: health_check: endpoint: 0.0.0.0:13133 pprof: endpoint: 0.0.0.0:1777 exporters: clickhousetraces: datasource: tcp://clickhouse:9000/signoz_traces low_cardinal_exception_grouping: ${env:LOW_CARDINAL_EXCEPTION_GROUPING} use_new_schema: true signozclickhousemetrics: dsn: tcp://clickhouse:9000/signoz_metrics clickhouselogsexporter: dsn: tcp://clickhouse:9000/signoz_logs timeout: 10s use_new_schema: true service: telemetry: logs: encoding: json extensions: - health_check - pprof pipelines: traces: receivers: [otlp] processors: [signozspanmetrics/delta, batch] exporters: [clickhousetraces] metrics: receivers: [otlp] processors: [batch] exporters: [signozclickhousemetrics] metrics/prometheus: receivers: [prometheus] processors: [batch] exporters: [signozclickhousemetrics] logs: receivers: [otlp] processors: [batch] exporters: [clickhouselogsexporter] - type: bind source: ./otel-collector-opamp-config.yaml target: /etc/manager-config.yaml content: | server_endpoint: ws://signoz:4320/v1/opamp environment: - SERVICE_URL_OTELCOLLECTORHTTP_4318 - OTEL_RESOURCE_ATTRIBUTES=host.name=signoz-host,os.type=linux - LOW_CARDINAL_EXCEPTION_GROUPING=false healthcheck: test: bash -c "exec 6<> /dev/tcp/localhost/13133" interval: 30s timeout: 5s retries: 3 schema-migrator-sync: image: signoz/signoz-schema-migrator:v0.129.7 command: - sync - --dsn=tcp://clickhouse:9000 - --up= depends_on: clickhouse: condition: service_healthy restart: on-failure exclude_from_hc: true logging: options: max-size: 50m max-file: "3" schema-migrator-async: image: signoz/signoz-schema-migrator:v0.129.7 depends_on: clickhouse: condition: service_healthy schema-migrator-sync: condition: service_completed_successfully restart: on-failure exclude_from_hc: true logging: options: max-size: 50m max-file: "3" command: - async - --dsn=tcp://clickhouse:9000 - --up=