diff --git a/pkg/kubelet/cadvisor/cadvisor_linux.go b/pkg/kubelet/cadvisor/cadvisor_linux.go index 5734540ccce..bcde373dcfc 100644 --- a/pkg/kubelet/cadvisor/cadvisor_linux.go +++ b/pkg/kubelet/cadvisor/cadvisor_linux.go @@ -78,21 +78,29 @@ func init() { } func containerLabels(c *cadvisorapi.ContainerInfo) map[string]string { - set := map[string]string{metrics.LabelID: c.Name} + // Prometheus requires that all metrics in the same family have the same labels, + // so we arrange to supply blank strings for missing labels + var name, image, podName, namespace, containerName string if len(c.Aliases) > 0 { - set[metrics.LabelName] = c.Aliases[0] - } - if image := c.Spec.Image; len(image) > 0 { - set[metrics.LabelImage] = image + name = c.Aliases[0] } + image = c.Spec.Image if v, ok := c.Spec.Labels[types.KubernetesPodNameLabel]; ok { - set["pod_name"] = v + podName = v } if v, ok := c.Spec.Labels[types.KubernetesPodNamespaceLabel]; ok { - set["namespace"] = v + namespace = v } if v, ok := c.Spec.Labels[types.KubernetesContainerNameLabel]; ok { - set["container_name"] = v + containerName = v + } + set := map[string]string{ + metrics.LabelID: c.Name, + metrics.LabelName: name, + metrics.LabelImage: image, + "pod_name": podName, + "namespace": namespace, + "container_name": containerName, } return set } diff --git a/pkg/kubelet/server/server.go b/pkg/kubelet/server/server.go index d4eb74bfed0..285a0d376ce 100644 --- a/pkg/kubelet/server/server.go +++ b/pkg/kubelet/server/server.go @@ -801,21 +801,29 @@ func (a prometheusHostAdapter) GetMachineInfo() (*cadvisorapi.MachineInfo, error // containerPrometheusLabels maps cAdvisor labels to prometheus labels. func containerPrometheusLabels(c *cadvisorapi.ContainerInfo) map[string]string { - set := map[string]string{metrics.LabelID: c.Name} + // Prometheus requires that all metrics in the same family have the same labels, + // so we arrange to supply blank strings for missing labels + var name, image, podName, namespace, containerName string if len(c.Aliases) > 0 { - set[metrics.LabelName] = c.Aliases[0] - } - if image := c.Spec.Image; len(image) > 0 { - set[metrics.LabelImage] = image + name = c.Aliases[0] } + image = c.Spec.Image if v, ok := c.Spec.Labels[kubelettypes.KubernetesPodNameLabel]; ok { - set["pod_name"] = v + podName = v } if v, ok := c.Spec.Labels[kubelettypes.KubernetesPodNamespaceLabel]; ok { - set["namespace"] = v + namespace = v } if v, ok := c.Spec.Labels[kubelettypes.KubernetesContainerNameLabel]; ok { - set["container_name"] = v + containerName = v + } + set := map[string]string{ + metrics.LabelID: c.Name, + metrics.LabelName: name, + metrics.LabelImage: image, + "pod_name": podName, + "namespace": namespace, + "container_name": containerName, } return set }