in internal/store/service.go [41:174]
func serviceMetricFamilies(allowAnnotationsList, allowLabelsList []string) []generator.FamilyGenerator {
return []generator.FamilyGenerator{
*generator.NewFamilyGenerator(
"kube_service_info",
"Information about service.",
metric.Gauge,
"",
wrapSvcFunc(func(s *v1.Service) *metric.Family {
m := metric.Metric{
LabelKeys: []string{"cluster_ip", "external_name", "load_balancer_ip"},
LabelValues: []string{s.Spec.ClusterIP, s.Spec.ExternalName, s.Spec.LoadBalancerIP},
Value: 1,
}
return &metric.Family{Metrics: []*metric.Metric{&m}}
}),
),
*generator.NewFamilyGenerator(
"kube_service_created",
"Unix creation timestamp",
metric.Gauge,
"",
wrapSvcFunc(func(s *v1.Service) *metric.Family {
if !s.CreationTimestamp.IsZero() {
m := metric.Metric{
LabelKeys: nil,
LabelValues: nil,
Value: float64(s.CreationTimestamp.Unix()),
}
return &metric.Family{Metrics: []*metric.Metric{&m}}
}
return &metric.Family{Metrics: []*metric.Metric{}}
}),
),
*generator.NewFamilyGenerator(
"kube_service_spec_type",
"Type about service.",
metric.Gauge,
"",
wrapSvcFunc(func(s *v1.Service) *metric.Family {
m := metric.Metric{
LabelKeys: []string{"type"},
LabelValues: []string{string(s.Spec.Type)},
Value: 1,
}
return &metric.Family{Metrics: []*metric.Metric{&m}}
}),
),
*generator.NewFamilyGenerator(
descServiceAnnotationsName,
descServiceAnnotationsHelp,
metric.Gauge,
"",
wrapSvcFunc(func(s *v1.Service) *metric.Family {
annotationKeys, annotationValues := createPrometheusLabelKeysValues("annotation", s.Annotations, allowAnnotationsList)
m := metric.Metric{
LabelKeys: annotationKeys,
LabelValues: annotationValues,
Value: 1,
}
return &metric.Family{Metrics: []*metric.Metric{&m}}
}),
),
*generator.NewFamilyGenerator(
descServiceLabelsName,
descServiceLabelsHelp,
metric.Gauge,
"",
wrapSvcFunc(func(s *v1.Service) *metric.Family {
labelKeys, labelValues := createPrometheusLabelKeysValues("label", s.Labels, allowLabelsList)
m := metric.Metric{
LabelKeys: labelKeys,
LabelValues: labelValues,
Value: 1,
}
return &metric.Family{Metrics: []*metric.Metric{&m}}
}),
),
*generator.NewFamilyGenerator(
"kube_service_spec_external_ip",
"Service external ips. One series for each ip",
metric.Gauge,
"",
wrapSvcFunc(func(s *v1.Service) *metric.Family {
if len(s.Spec.ExternalIPs) == 0 {
return &metric.Family{
Metrics: []*metric.Metric{},
}
}
ms := make([]*metric.Metric, len(s.Spec.ExternalIPs))
for i, externalIP := range s.Spec.ExternalIPs {
ms[i] = &metric.Metric{
LabelKeys: []string{"external_ip"},
LabelValues: []string{externalIP},
Value: 1,
}
}
return &metric.Family{
Metrics: ms,
}
}),
),
*generator.NewFamilyGenerator(
"kube_service_status_load_balancer_ingress",
"Service load balancer ingress status",
metric.Gauge,
"",
wrapSvcFunc(func(s *v1.Service) *metric.Family {
if len(s.Status.LoadBalancer.Ingress) == 0 {
return &metric.Family{
Metrics: []*metric.Metric{},
}
}
ms := make([]*metric.Metric, len(s.Status.LoadBalancer.Ingress))
for i, ingress := range s.Status.LoadBalancer.Ingress {
ms[i] = &metric.Metric{
LabelKeys: []string{"ip", "hostname"},
LabelValues: []string{ingress.IP, ingress.Hostname},
Value: 1,
}
}
return &metric.Family{
Metrics: ms,
}
}),
),
}
}