Observability
Export metrics to Prometheus, logs and traces over OTLP, or telemetry to Datadog, and troubleshoot telemetry issues.
Telemetry is the observability pipeline that powers the logs and traces you see in the Chalk dashboard: the structured-logs view, the query-logs view, and the Trace tab on the Online Query page. It runs entirely inside your Kubernetes cluster, and almost all of it is configurable from the Telemetry tab of your cluster on the Cloud Clusters page. This page answers the most common questions about why telemetry might not behave as expected, and how to resolve them yourself.
For dashboard metric and chart troubleshooting, see Metrics Monitor and Metrics Export.
Follow these steps to send Chalk metrics to your Prometheus-compatible monitoring service. When you finish, you will be able to query those metrics in your destination. This export sends metrics; for logs, follow Export logs to Datadog.
You need Metrics Export enabled for your Chalk team, permission to edit telemetry settings, and access to your monitoring service’s metrics query interface.
Get the full Prometheus remote-write URL from your monitoring service, including its write path. For example:
https://prometheus.example.com/api/v1/write
Use the ingestion URL supplied by your provider. The destination must have remote-write receiving enabled and be reachable from Chalk.
If the destination requires authentication or a tenant header, store its required HTTP headers as a JSON object in a cloud secret that Chalk can read. For AWS, use Secrets Manager in the account and region used by Chalk and copy the secret’s full ARN. For example, a service that requires a bearer token and tenant ID would use this secret value:
{
"Authorization": "Bearer YOUR_TOKEN",
"X-Scope-OrgID": "YOUR_TENANT_ID"
}
Use only the headers required by your destination, with string values. If you need help storing the secret or granting Chalk access, ask your cloud administrator or Chalk support. You can skip the secret when your destination does not require custom headers.
chalk-production with a fixed name for this export. Preserve any remap code already in the field..tags.chalk_export = "chalk-production"
The label applies to this Prometheus export. You can keep existing Datadog exports enabled at the same time. New metric samples are sent automatically; historical samples are not backfilled.
Run a few Chalk queries in the environment you configured, then open your monitoring service’s metrics query interface, such as Prometheus or Grafana Explore. Select the data source and tenant that receive your remote writes, and a time range covering the last 15 minutes.
Run this PromQL selector, using the label value you configured:
{chalk_export="chalk-production"}
Allow time for collection and ingestion, then refresh the results. Check that the returned series
have the chalk_export label and samples from after you enabled the export.
The export is working when recent metric samples appear at your destination with your label. You can retain the label to identify Chalk metrics in dashboards and alerts.
If no samples appear, confirm the export is enabled and saved, check the full write URL and required headers, and verify that your query uses the receiving data source and tenant. If you still see no data, send Chalk support your Chalk environment, destination URL, label value, and the time you enabled export. Do not include credentials in the support message.
Follow these steps to send Chalk metrics to an OpenTelemetry Protocol (OTLP) endpoint. When you finish, you will be able to find recent Chalk metric samples in your monitoring service. This export sends metrics over HTTP. For logs, follow Export logs to Datadog.
You need Metrics Export enabled for your Chalk team, permission to edit telemetry settings, and access to your destination’s metrics query interface or received metrics view.
Get the full OTLP/HTTP metrics ingestion URL from your provider, including the /v1/metrics
path. For example:
https://otlp.example.com/v1/metrics
Enter the complete URL; Chalk sends requests to it as supplied. The receiver must accept OTLP/HTTP protobuf metrics and be reachable from Chalk. Use the provider’s HTTP endpoint, even if it also offers a gRPC endpoint.
If your provider requires authentication or a tenant header, store the required HTTP headers as a JSON object in a cloud secret that Chalk can read. For AWS, use Secrets Manager in the account and region used by Chalk and copy the secret’s full ARN. For example:
{
"Authorization": "Bearer YOUR_TOKEN",
"X-Scope-OrgID": "YOUR_TENANT_ID"
}
Use only the headers required by your provider, with string values. A provider that uses an
api-key header instead would use a secret such as {"api-key":"YOUR_API_KEY"}. If you need help
storing the secret or granting Chalk access, ask your cloud administrator or Chalk support. Skip
the secret when your destination does not require custom headers.
chalk-otlp-production with a fixed name for this export. Preserve any remap code already
in the field..tags.chalk_export = "chalk-otlp-production"
If Legacy header name and Legacy header value secret ARN appear on an existing export, you can keep using those settings. To switch to a JSON headers secret, include the required header in the new secret and clear both legacy fields in the same update. Use one authentication method at a time.
The remap applies only to this OTLP export, after any shared metrics remap. You can keep Prometheus and Datadog exports enabled at the same time. New metric samples are sent automatically; historical samples are not backfilled.
Run a few Chalk queries in the environment you configured, then open your destination’s metrics query interface or received metrics view. Select the account, tenant, and data source that receive your OTLP data, and a time range covering the last 15 minutes.
Filter for the metric attribute chalk_export with the value chalk-otlp-production, or the value
you chose. Your monitoring service may display metric attributes as tags or labels. If it exposes
them as Prometheus labels, you can use:
{chalk_export="chalk-otlp-production"}
Allow time for collection and ingestion, then refresh. Check that matching metrics have samples from after you enabled export. If you forward from an OTLP receiver to a separate monitoring service, verify the samples in that final service as well.
The export is working when recent metric samples appear at your destination with your attribute. You can retain the attribute to identify Chalk metrics in dashboards and alerts.
If no samples appear, confirm the export is enabled and saved, check the full metrics URL and required headers, and verify that you are searching the receiving account and tenant. Check any attribute mapping or filtering in your destination. If data still does not arrive, send Chalk support your Chalk environment, destination URL, attribute value, and the time you enabled export. Do not include credentials in the support message.
Follow Export telemetry over OTLP to configure independent log and trace endpoints, JSON headers secrets, and optional VRL. The guide includes a resolver log marker and a traced online query to verify receipt in your destination. Logs and traces default to disabled; you can enable either without Datadog and keep existing metrics exports running.
Follow Export logs to Datadog to connect your Datadog account, turn on log export, and verify delivery with a test message in Datadog Log Explorer.
Logs and traces flow through four stages, all running in your cluster in the chalk-telemetry namespace:
Collector (OpenTelemetry or Vector) → Aggregator → ClickHouse → Dashboard
chalk-collector-*.chalk-telemetry-aggregator-*.clickhouse-0 pod. Traces have
a default TTL of 7 days, which Chalk shortens automatically as storage fills.Because the whole pipeline is just a set of pods, most telemetry problems are infrastructure problems (a pod that can’t schedule, or one that’s out of memory) rather than bugs in your features or resolvers. The two places you’ll work from are:
Cloud Clusters > (your cluster) > Telemetry: click your telemetry deployment to view and edit it
(CPU/memory for ClickHouse, the
collector, and the aggregator; ClickHouse storage size; collector runtime; and more). The guided form and a
raw JSON editor are both available here.Infrastructure > Kubernetes: inspect pod health. On the All Pods tab, set the namespace filter to
chalk-telemetry to see only the telemetry pods and their status, restarts, and age. Click a pod to view its
logs.After any change to the telemetry deployment, Save & Apply and then watch the change through to resolution. Confirm the affected pods actually reschedule and become healthy. Reconfiguring an infrastructure component and walking away is the most common way a small change turns into an outage.
Logs and traces share the same pipeline, so the first checks are the same:
Infrastructure > Kubernetes, filter the namespace to
chalk-telemetry, and confirm clickhouse-0, the chalk-collector-* pods, and the
chalk-telemetry-aggregator-* pod are all Running. If any are Pending, OOMKilled, or in
CrashLoopBackOff, see the next question.Note the 7-day trace TTL: traces older than roughly a week are expected to age out, and the window can be shorter if ClickHouse storage filled up. A missing old trace is usually expected behavior, not a failure.
You may see:
“Clickhouse server is not currently reachable. It is likely that the instance is under maintenance or the pod has been moved to a new node. Please try again in a few minutes…”
This is the most frequent telemetry error. It appears when the logs / traces views try to query ClickHouse and can’t reach it.
It only affects your ability to view telemetry in the dashboard. Online and offline query serving and feature computation are completely unaffected, and your application keeps working normally.
Causes, in order of likelihood:
clickhouse-0 pod in the chalk-telemetry
namespace (Infrastructure > Kubernetes, namespace filter chalk-telemetry). If it’s Pending with
FailedScheduling events, its resource request is too large for the node it targets. The classic mistake
is setting a memory request equal to the node’s total memory (for example, a 32Gi request on a 32Gi
m6a.2xlarge). Daemonsets and system overhead consume part of every node, so a request that equals node
capacity can never be placed and the pod stays Pending forever. Pinning a fixed instance type and a high
request makes this especially easy to trip.OOMKilled status means memory needs to go up, but only to a value
that still fits the node.Self-serve fix: open the telemetry deployment from Cloud Clusters > (your cluster) > Telemetry and adjust
the memory in the ClickHouse and/or Aggregator sections.
Then Save & Apply, confirm clickhouse-0 reaches Running, and reload the dashboard. If it still can’t
reach ClickHouse after about 10 minutes, contact Chalk support.
Leave Serve over HTTP disabled in the ClickHouse settings unless the Chalk team explicitly asks you to enable it, since it can break ClickHouse connectivity.
--trace but no trace appearsWork through these in order:
--trace, with no space. Writing chalk query … -- trace (a space after
--) is parsed as “end of flags” plus a stray positional argument, so tracing is silently not enabled and
you get no error.OTEL_TRACES_SAMPLER and OTEL_TRACES_SAMPLER_ARG
(Settings > Integrations > Config Variables). The defaults are parentbased_traceidratio at 0.01
(1%). If the sampler is set to always_off, query-time flags are ignored and nothing is traced.
With a parentbased_* sampler you can still force a single query with --trace (CLI) or trace=True
(ChalkClient). See Tracing for the full table of samplers.chalkpy[tracing] extra and chalkpy >= 2.95.9.Once tracing works, traces are the primary tool for locating latency. Enable tracing on a representative query, open the Trace tab, and look for the longest spans. The waterfall shows where time is spent and what called what. For example, it distinguishes fast Redis reads from slow warehouse or Postgres round trips.
From there:
ChalkGRPCClient), which is generally faster than HTTP.For the broader set of tools for debugging queries (Query Plan Visualizer, Resolver Replay, logging), see Debugging Queries.
Reach out to Chalk support if: