Skip to content

Kubernetes

Use this page when you run on Kubernetes and want pod logs, node and pod metrics and cluster events in FuseScope, without changing your applications, or when an instrumentation check on the Infrastructure page says a metric or attribute is missing.

The k8s-infra chart, in the same Helm repository, runs OpenTelemetry collectors that send Kubernetes telemetry to FuseScope:

Component Kind Collects
otel-agent DaemonSet Pod logs, host metrics and kubelet metrics on every node
otel-deployment Deployment Cluster metrics and Kubernetes events

Both add Kubernetes attributes (namespace, pod, node, cluster) to the data.

values-k8s-infra.yaml
global:
clusterName: production
deploymentEnvironment: production
otelCollectorEndpoint: http://fusescope-otel-collector.fusescope.svc.cluster.local:4318
otelInsecure: true
Terminal window
helm repo add fusescope https://fuseone-io.github.io/fusescope-charts
helm install k8s-infra fusescope/k8s-infra -n fusescope -f values-k8s-infra.yaml

To export over gRPC instead, switch exporters and use port 4317:

otelCollectorEndpoint: fusescope-otel-collector.fusescope.svc.cluster.local:4317
presets:
otlphttpExporter:
enabled: false
otlpExporter:
enabled: true
Value Default Description
otelCollectorEndpoint null FuseScope collector endpoint.
otelInsecure true Plain-text connection. Set to false for an https:// endpoint.
global.clusterName "" Added to every record as k8s.cluster.name.
global.deploymentEnvironment "" Added as deployment.environment when not already set.
presets.logsCollection.enabled true Pod logs.
presets.hostMetrics.enabled true Node CPU, load, memory, disk and more.
presets.kubeletMetrics.enabled true Pod and container metrics from the kubelet.
presets.clusterMetrics.enabled true Cluster-level object metrics.
presets.k8sEvents.enabled true Kubernetes events as logs.
presets.prometheus.enabled false Scrape pods annotated with signoz.io/scrape (prefix set by presets.prometheus.annotationsPrefix).

signoz.io/scrape is an internal name.

All values are in the chart’s values.yaml.

The Infrastructure page checks for the metrics and attributes below and names the collector component that should produce each one. Every component is part of the k8s-infra chart and on by default; this section says which value turns it on, and what to check when a metric is missing.

Runs in otel-agent on every node and reads the node’s CPU, memory, load, disk, file system and network: system.cpu.time, system.memory.usage, system.cpu.load_average.15m, system.filesystem.usage and the process.* metrics. It feeds the Hosts tab.

  • Turned on by presets.hostMetrics.enabled (default true).
  • It reads the node’s file systems through presets.hostMetrics.rootPath (/hostfs). If CPU and memory arrive but system.filesystem.usage doesn’t, check that the agent pods can mount the host root.

For a virtual machine or a bare-metal server, run the FuseScope collector (or any OpenTelemetry Collector) on the host with the hostmetrics receiver and the resourcedetection processor, and send to FuseScope over OTLP:

receivers:
hostmetrics:
collection_interval: 30s
scrapers:
cpu: {}
load: {}
memory: {}
disk: {}
filesystem: {}
network: {}
processors:
resourcedetection:
detectors: [env, system]
system:
hostname_sources: [os]
exporters:
otlp:
endpoint: fusescope-otel-collector.example.com:4317
service:
pipelines:
metrics:
receivers: [hostmetrics]
processors: [resourcedetection]
exporters: [otlp]

See OTLP endpoints for the endpoint and TLS settings.

Runs in otel-agent and asks each node’s kubelet for container, pod, node and volume usage: container.cpu.usage, container.memory.working_set, k8s.pod.cpu.usage, k8s.pod.memory.working_set, k8s.node.cpu.usage, k8s.node.memory.working_set and the k8s.volume.* metrics.

  • Turned on by presets.kubeletMetrics.enabled (default true).
  • The optional request and limit metrics, such as k8s.pod.cpu_request_utilization and k8s.container.memory_limit_utilization, are listed under presets.kubeletMetrics.metrics and on by default. They only have a value for containers that set CPU or memory requests and limits in their spec. GKE Autopilot clusters don’t expose them.
  • If nothing arrives, check that the agent’s service account may read the kubelet API (nodes/stats); the chart creates that permission.

Runs once in otel-deployment and watches the Kubernetes API for the state of objects: k8s.pod.phase, k8s.container.restarts, k8s.container.ready, k8s.node.allocatable_cpu, k8s.node.condition_ready, and the desired, current and ready counts of deployments, daemon sets, stateful sets and jobs.

  • Turned on by presets.clusterMetrics.enabled (default true).
  • The optional k8s.pod.status_reason, k8s.container.status.reason and k8s.container.status.state, which explain states such as CrashLoopBackOff, are under presets.clusterMetrics.metrics and on by default.

Adds attributes that describe where the data comes from: host.name and os.type on host metrics, and k8s.cluster.name on everything.

  • Turned on by presets.resourceDetection.enabled (default true).
  • k8s.cluster.name comes from global.clusterName. If the check reports it missing, set global.clusterName in your values.

Adds the Kubernetes names to metrics, logs and traces: k8s.pod.uid, k8s.pod.name, k8s.namespace.name, k8s.node.name, k8s.container.name and the owner (k8s.deployment.name, k8s.statefulset.name, k8s.daemonset.name, k8s.job.name).

  • Turned on by presets.kubernetesAttributes.enabled (default true).
  • It needs permission to read pods, namespaces and replica sets; the chart creates it. With presets.kubernetesAttributes.passthrough: true the agents make no Kubernetes API calls and add no metadata themselves.

presets.k8sEvents.enabled (default true) sends Kubernetes events, such as Back-off restarting failed container, as logs. They appear on the Events tab of a pod, node or other object on the Infrastructure page.