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.Do not turn on cluster metrics in the first release, because every node then sends the same
series.
values-squasher-cluster.yaml
Send app traces to the Collector
Point each app at the Collector on its own node:deployment.yaml
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
- Select Infrastructure in the sidebar in Squasher, then the Kubernetes tab. Your pods appear within a few collection intervals.
- Send one span with
ERRORstatus 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.