Supported telemetry types
The Kubernetes integration supports these telemetry types:
The integration sends Kubernetes Events through the logs signal.
Prerequisites
The Kubernetes integration has the following prerequisites:- Grant the Collector service accounts the Kubernetes API permissions required by the enabled capabilities. The Helm chart creates the required roles and bindings, so the identity that installs the chart must be permitted to create them.
- Make the Kubernetes API and the endpoints for each enabled Kubernetes component
reachable from the Collector tier that collects them. Each node Collector connects
directly to its node’s kubelet on port
10250for kubelet and cAdvisor metrics. - To collect control-plane metrics through pod discovery, schedule node collectors on control-plane nodes. These nodes commonly have taints that the node collectors must tolerate.
- Audit log collection is supported only when the API server writes its audit log to
/var/log/kubernetes/audit.log. Managed Kubernetes providers typically don’t expose this file, and audit log webhook backends aren’t supported.
Configure
To configure the Kubernetes integration, follow these steps: At the integration level, you can enable or disable collection, identify the cluster, and choose how the Collector authenticates to the Kubernetes API. The Kubernetes integration provides the following component configuration:
Custom kubelet and cluster metric selections replace their default metric selections.
When you customize either set, restate every default metric that you want to retain.
Enabling Secret metadata collection grants the cluster Collector permission to list and
watch Secret objects across the cluster. For the complete list of fields, accepted
values, and defaults, consult the configuration reference on this page.
-
Optional: Enable metrics from additional Kubernetes components. The Collector
discovers supported component pods by their standard labels and ports. For example,
add the following to the
values.yamlfor your Helm chart:Metrics from discovered pods arrive with that pod’s Kubernetes metadata attached. For more information, see enrichment. -
Optional: Add tolerations for tainted nodes whose node-local components you want to
monitor. A node Collector must run on a control-plane node to collect its scheduler,
controller manager, and audit log. For example, tolerate the standard control-plane
taint:
-
Optional: Configure static targets for Kubernetes components that pod discovery
can’t reach. Managed Kubernetes providers might not expose scheduler or controller
manager metrics endpoints; the integration can’t collect those metrics unless the
provider exposes a reachable endpoint. For example, add the following to the
values.yamlfor your Helm chart:Static targets supplement discovered component pods. One leader-elected replica collects static API server, scheduler, controller manager, and CoreDNS targets per cluster. Static kube-proxy targets run on the node tier.
Validate
To validate the Kubernetes integration, follow these steps:-
In the Live Telemetry Analyzer, filter for
cxdot.integration.name=kubernetes. Confirm that the Kubernetes metric names appear. -
In Metrics Explorer, run the following query:
Confirm that the query returns the expected time series for each node.
-
Optional: If you enabled Kubernetes Events, in Logs Explorer, search for
"cxdot.integration.name":=kubernetes "k8s.event.reason":*. Confirm that events from your cluster appear.
Configuration reference
Configure one Kubernetes integration instance with the following settings. In Helm values, place these settings underconfig.integrations.kubernetes. In a Collector configuration file, place
them under cxdot.integrations.kubernetes.
Optional settings
-
enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
cluster_nameType:string. Optional. Cluster identifier injected as thek8s.cluster.nameresource attribute on every signal. NB: deployments that set a global cluster identifier apply it last, overriding this one — the CXDOT Helm chart does, and rejects acluster_namehere that disagrees with its own value rather than letting the two diverge silently. -
authType:string. Optional. Default:serviceAccount. How the integration authenticates to the K8s API.serviceAccountuses the in-cluster pod token;kubeConfigreads $KUBECONFIG / ~/.kube/config (kubectl-style);noneis unauthenticated. Allowed values:serviceAccount,kubeConfig,none. -
kubeletType:object. Optional. Settings for collecting node, pod, container, and volume metrics from each node’s kubelet stats endpoint. -
kubelet.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
kubelet.collection_intervalType:duration. Optional. Default:20s. How often the Collector collects metrics from each node’s kubelet. -
kubelet.timeoutType:duration. Optional. Default:20s. Maximum time the Collector waits for a kubelet stats response during one collection. -
kubelet.metricsType:object. Optional. Default:{"k8s.container.cpu_limit_utilization":{"enabled":true},"k8s.container.memory_limit_utilization":{"enabled":true},"k8s.node.system_container.cpu.usage":{"enabled":true},"k8s.node.system_container.memory.usage":{"enabled":true},"k8s.pod.cpu_limit_utilization":{"enabled":true},"k8s.pod.cpu_request_utilization":{"enabled":true},"k8s.pod.memory_limit_utilization":{"enabled":true},"k8s.pod.memory_request_utilization":{"enabled":true}}. Pass-through to the kubeletstats receiver’smetrics:block — per-metricenabled:toggles for metrics that are off by default upstream, keyed by metric name. Validated against the receiver’s own config schema. Setting this replaces the whole default map below rather than merging into it, so restate any default you still want. -
kubelet_metricsType:object. Optional. Settings for collecting the kubelet’s own Prometheus metrics from each node. -
kubelet_metrics.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
kubelet_metrics.collection_intervalType:duration. Optional. Default:15s. How often the Collector scrapes each node’s kubelet metrics endpoint. -
kubelet_metrics.timeoutType:duration. Optional. Default:10s. Maximum time the Collector waits for one scrape to complete. -
cadvisorType:object. Optional. Settings for collecting container resource metrics from each node’s cAdvisor endpoint. -
cadvisor.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
cadvisor.collection_intervalType:duration. Optional. Default:15s. How often the Collector scrapes each node’s cAdvisor endpoint. -
cadvisor.timeoutType:duration. Optional. Default:10s. Maximum time the Collector waits for one scrape to complete. -
cadvisor.honor_timestampsType:boolean. Optional. Default:true. Whether to keep the timestamps cAdvisor attaches to its samples, which date from its last internal housekeeping pass and can trail the scrape by tens of seconds. Set false to stamp samples at scrape time instead — for ingest paths whose sample-recency window is tight enough to reject samples that are already old when scraped. -
container_logsType:object. Optional. Settings for collecting container logs from each node. -
container_logs.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
audit_logsType:object. Optional. Settings for collecting Kubernetes API server audit logs. -
audit_logs.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
clusterType:object. Optional. Settings for collecting cluster-level object state — deployments, pods, nodes, and other resources — from the Kubernetes API. -
cluster.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
cluster.namespacesType:array of string. Optional. Restrict cluster resource collection to these namespaces. Omitted or empty collects every namespace. -
cluster.collection_intervalType:duration. Optional. Default:10s. How often the Collector reads cluster object state. -
cluster.timeoutType:duration. Optional. Default:10s. Maximum time the Collector waits for one read to complete. -
cluster.allow_secrets_readType:boolean. Optional. Default:false. Allow the cluster collector to read Secrets cluster-wide (list/watch), which kube-state-metrics requires to emit the Secret metadata metrics (kubernetes_state.secret.countand.type). Off by default: because Kubernetes LIST/WATCH return full Secret objects includingdata, the grant exposes every Secret’s contents to the collector’s ServiceAccount. Leave it off unless you need these metrics. -
cluster.metricsType:object. Optional. Default:{"k8s.container.status.reason":{"enabled":true},"k8s.pod.status_reason":{"enabled":true},"k8s.service.endpoint.count":{"enabled":true}}. Pass-through to the k8s_cluster receiver’smetrics:block — per-metricenabled:toggles for metrics that are off by default upstream, keyed by metric name. Validated against the receiver’s own config schema. Setting this replaces the whole default map below rather than merging into it, so restate any default you still want. -
eventsType:object. Optional. Settings for collecting Kubernetes events as log records. -
events.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
apiserverType:object. Optional. Settings for scraping this Kubernetes control-plane component’s metrics endpoint. -
apiserver.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
apiserver.collection_intervalType:duration. Optional. Default:30s. How often the Collector scrapes the component’s metrics endpoint. -
apiserver.timeoutType:duration. Optional. Default:10s. Maximum time the Collector waits for one scrape to complete. -
apiserver.static_targetsType:array of object. Optional. List of static fallback targets; non-empty list switches the static_configs discovery source on alongside any k8s_pod-discovered entities. Omitted or empty = pure k8s_pod discovery only. -
apiserver.static_targets[].endpointType:string. Required.host:portof the scrape target, for example,127.0.0.1:6443. -
schedulerType:object. Optional. Settings for scraping this Kubernetes control-plane component’s metrics endpoint. -
scheduler.collection_intervalType:duration. Optional. Default:30s. How often the Collector scrapes the component’s metrics endpoint. -
scheduler.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
scheduler.static_targetsType:array of object. Optional. List of static fallback targets; non-empty list switches the static_configs discovery source on alongside any k8s_pod-discovered entities. Omitted or empty = pure k8s_pod discovery only. -
scheduler.static_targets[].endpointType:string. Required.host:portof the scrape target, for example,127.0.0.1:6443. -
scheduler.timeoutType:duration. Optional. Default:10s. Maximum time the Collector waits for one scrape to complete. -
controller_managerType:object. Optional. Settings for scraping this Kubernetes control-plane component’s metrics endpoint. -
controller_manager.collection_intervalType:duration. Optional. Default:30s. How often the Collector scrapes the component’s metrics endpoint. -
controller_manager.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
controller_manager.static_targetsType:array of object. Optional. List of static fallback targets; non-empty list switches the static_configs discovery source on alongside any k8s_pod-discovered entities. Omitted or empty = pure k8s_pod discovery only. -
controller_manager.static_targets[].endpointType:string. Required.host:portof the scrape target, for example,127.0.0.1:6443. -
controller_manager.timeoutType:duration. Optional. Default:10s. Maximum time the Collector waits for one scrape to complete. -
kube_proxyType:object. Optional. Settings for scraping this Kubernetes control-plane component’s metrics endpoint. -
kube_proxy.collection_intervalType:duration. Optional. Default:30s. How often the Collector scrapes the component’s metrics endpoint. -
kube_proxy.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
kube_proxy.static_targetsType:array of object. Optional. List of static fallback targets; non-empty list switches the static_configs discovery source on alongside any k8s_pod-discovered entities. Omitted or empty = pure k8s_pod discovery only. -
kube_proxy.static_targets[].endpointType:string. Required.host:portof the scrape target, for example,127.0.0.1:6443. -
kube_proxy.timeoutType:duration. Optional. Default:10s. Maximum time the Collector waits for one scrape to complete. -
corednsType:object. Optional. Settings for scraping this Kubernetes control-plane component’s metrics endpoint. -
coredns.collection_intervalType:duration. Optional. Default:30s. How often the Collector scrapes the component’s metrics endpoint. -
coredns.enabledType:boolean. Optional. Default:true. Whether to enable this configuration block. If true, the Collector runs the integration or capability. If false, the Collector doesn’t run it. -
coredns.static_targetsType:array of object. Optional. List of static fallback targets; non-empty list switches the static_configs discovery source on alongside any k8s_pod-discovered entities. Omitted or empty = pure k8s_pod discovery only. -
coredns.static_targets[].endpointType:string. Required.host:portof the scrape target, for example,127.0.0.1:6443. -
coredns.timeoutType:duration. Optional. Default:10s. Maximum time the Collector waits for one scrape to complete.

