Native slow-query traces
Export ClickHouse's native trace topology, enriched with query-log context so slow traces carry the database behavior that caused them.
Click-Dog turns ClickHouse native spans and query logs into traces, normalized query families, known-good regression comparisons, findings, notifications, and dashboards for Datadog, Splunk, Honeycomb, Grafana Tempo, and any OTLP backend — read-only, with bounded source impact.
curl -fsSL https://github.com/coltconsulting/click-dog/releases/latest/download/install.sh -o install.sh && sudo bash install.sh
Signed and checksummed before install.
Three things shape Click-Dog: it's manageable to run, it stays out of your source system's way, and it explains what your queries are doing.
Run it as a single static binary, a container, or generated Kubernetes / Docker Compose manifests. Validate config before it talks to anything, dry-run exports, and monitor Click-Dog itself.
The non-invasive property. Read-only connections, bounded polling, SQL-level filtering, batching, circuit-breaker protection, and adaptive backoff — so your source system stays in control.
Click-Dog exports spans, but the goal is to explain queries: slow-query traces, normalized query families, and bounded exported operational activity—not an audit log—across users, databases, tables, and operations.
Click-Dog does more than forward spans. It packages regression analysis, privacy controls, finding delivery, dashboards, export health, and rollout checks for a production telemetry path.
Export ClickHouse's native trace topology, enriched with query-log context so slow traces carry the database behavior that caused them.
Group thousands of statements into stable shapes that make p95, volume, and trend changes easier to reason about.
Capture an explicit known-good window, then detect conservative latency regressions and failure spikes without silently moving the baseline.
Gate automation with severity-based exit codes and send privacy-reviewed new or critical findings to webhooks and Datadog Events.
Choose raw, redacted, normalized-only, or no query text at the final export boundary, with fail-closed normalized-only behavior.
Check source readiness, test every exporter with a local span, and prove ClickHouse native parent-child tracing before enabling the service.
Provision Datadog dashboards for application query analysis, exported user-activity review, and Click-Dog health—without starting from a blank canvas.
Track every sink independently while circuit-breaker protection and adaptive backoff keep failures from adding source pressure.
Run as a static binary, systemd service, Docker Compose stack, Kubernetes deployment, or Ansible-managed sidecar fleet.
Click-Dog sits beside your database — never in the request path — reads telemetry over a read-only connection, filters and batches at the source, then fans out to one or more backends.
Roll normalized_query_hash values into stable shapes and add bounded query-log context.
Capture a fixed baseline before a change, then compare a later non-overlapping window for latency regressions and failure spikes.
Choose a warning or critical failure threshold and explicitly deliver eligible findings to webhooks or Datadog Events.
Keep the bounded local report, then follow an exact hash through query and native-trace evidence.
Click-Dog should make query telemetry easier to trust without making the source system harder to operate.
click-dog test export asks every configured sink to accept a local span.click-dog test tracing verifies ClickHouse's sampled parent-child topology end to end./healthz, /readyz, /status, and metrics before and after enabling scheduled mode.Static Linux binary for a quick first node or a controlled manual install.
Installer-generated service, config validation, and local health checks.
Generated manifests for a centralized cluster reader with readiness probes.
Fleet rollout, canary playbook, bounded concurrency, and repeatable config.
One YAML file and one command. Validate it, dry-run the export, then turn it on.
clickhouse: host: localhost port: 9000 username: default password: ${CLICKHOUSE_PASSWORD} exporters: otel: - collector_address: localhost:4317 service_name: click-dog-monitor filters: query_text_mode: normalized_only monitor: enabled: true min_trace_duration_ms: 1000 check_interval_s: 30 log_level: info
# secret used by all three commands $ export CLICKHOUSE_PASSWORD="secret" # 1 · validate before it talks to anything $ ./click-dog -validate -config click-dog.yaml Config click-dog.yaml is valid. ClickHouse: localhost:9000 Exporters: 1 OTEL, 0 Splunk HEC OTEL[0]: localhost:4317 (service=click-dog-monitor) Monitor: min_trace=1000ms, interval=30s Self-metrics: OTLP push off # 2 · dry-run the export pipeline $ ./click-dog --dry-run -config click-dog.yaml # earlier timestamped startup lines omitted … [INFO] Dry-run mode: exports will be discarded … --- Dry Run Summary --- # counts and top operations omitted; values depend on live data # 3 · run it $ ./click-dog -config click-dog.yaml # earlier timestamped startup lines omitted … [INFO] Starting scheduled mode: min_trace_duration=1000ms, interval=30s, lookback=40s (interval=30 + buffer=10) # state-dependent startup check omitted
Open source under Apache 2.0 — run, modify, and redistribute it under the license terms. Read-only by design, and live in minutes.