Skip to main content
The OpenTelemetry Collector Helm chart runs a Collector on every node. It sends pod logs, kubelet metrics, and your apps’ OTLP data to Squasher, and the Kubernetes tab of Infrastructure shows the pods. If you need only CPU and memory, a smaller Squasher Collector DaemonSet is also available.

Prerequisites

  • kubectl, with access to the cluster. Helm for the Helm chart, or Docker and a container registry for the Squasher Collector DaemonSet.
  • An ingest key in the environment as SQUASHER_API_KEY. See Create an ingest key.

Use the OpenTelemetry Collector Helm chart

This is the recommended setup. It sends pod logs, kubelet metrics, Kubernetes attributes, and your apps’ OTLP data. A second, optional release sends cluster metrics, such as container restarts, and Kubernetes events.
1

Store the key and the cluster name as a secret

Both releases read the ingest key and the cluster name from this secret. The cluster name is required: it must be the same for the node release and the cluster release, so that CPU and memory from each node join the restarts and pod state from the cluster release in one row.
2

Create the values file for each node

This release runs one Collector on each node.
values-squasher.yaml
3

Install the chart

4

Add cluster metrics and events (optional)

This second release runs exactly one replica, so that no series is sent twice. Use the same cluster name.
values-squasher-cluster.yaml
Do not turn on cluster metrics in the first release, because every node then sends the same series.

Send app traces to the Collector

Point each app at the Collector on its own node:
deployment.yaml
The Collector adds pod, namespace, and node attributes before it forwards the data.

What Squasher keeps

The Kubernetes tab also shows restarts from the k8s.container.restarts metric. The kubelet preset does not send it. The cluster release sends it, and it sends Kubernetes events.

Small footprint: Squasher Collector DaemonSet

If you need only CPU and memory, run the Squasher Collector as a DaemonSet instead. Each pod reads the kubelet Summary API of its own node through the API server proxy. It sends CPU usage and memory (usage, working_set, rss, available) for the node, each pod, and each container, with k8s.cluster.name, k8s.node.name, k8s.namespace.name, k8s.pod.name, k8s.pod.uid, and k8s.container.name. It also sends squasher.collector.scrape.up. It does not send logs, Kubernetes events, container restarts, workload owner names, or node network and filesystem metrics. For those, use the Helm chart above. Its service account needs get on nodes/proxy and nodes/stats.
1

Build an image

Squasher does not publish a container image. Put the Linux squasher-collector release binary for your node architecture in a directory, with this Dockerfile. It is the binary that the Linux install uses.
Dockerfile
2

Store the key and the project ID as a secret

3

Apply the DaemonSet

Set image to your image, and replace prod-us-east with the name of your cluster.
daemonset.yaml

Verify

  1. Select Infrastructure in the sidebar in Squasher, then the Kubernetes tab. Your pods appear within a few collection intervals.
  2. Send one span with ERROR status from an app, then select Issues in the sidebar.

Limits

  • Pod log lines have no level, so they create no issues. Send errors from your apps with OpenTelemetry or an SDK.
  • The Collector in this guide sends OTLP over HTTP. Squasher also accepts OTLP/gRPC at the Collector URL on port 443; see OpenTelemetry.

Next steps

OpenTelemetry

See the endpoint, headers, and language guides.

Tail sampling

Keep error and slow traces and drop routine ones.