in internal/store/ingress.go [42:179]
func ingressMetricFamilies(allowAnnotationsList, allowLabelsList []string) []generator.FamilyGenerator {
return []generator.FamilyGenerator{
*generator.NewFamilyGenerator(
"kube_ingress_info",
"Information about ingress.",
metric.Gauge,
"",
wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
ingressClassName := "_default"
if i.Spec.IngressClassName != nil {
ingressClassName = *i.Spec.IngressClassName
}
if className, ok := i.Annotations["kubernetes.io/ingress.class"]; ok {
ingressClassName = className
}
return &metric.Family{
Metrics: []*metric.Metric{
{
LabelKeys: []string{"ingressclass"},
LabelValues: []string{ingressClassName},
Value: 1,
},
}}
}),
),
*generator.NewFamilyGenerator(
descIngressAnnotationsName,
descIngressAnnotationsHelp,
metric.Gauge,
"",
wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
annotationKeys, annotationValues := createPrometheusLabelKeysValues("annotation", i.Annotations, allowAnnotationsList)
return &metric.Family{
Metrics: []*metric.Metric{
{
LabelKeys: annotationKeys,
LabelValues: annotationValues,
Value: 1,
},
}}
}),
),
*generator.NewFamilyGenerator(
descIngressLabelsName,
descIngressLabelsHelp,
metric.Gauge,
"",
wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
labelKeys, labelValues := createPrometheusLabelKeysValues("label", i.Labels, allowLabelsList)
return &metric.Family{
Metrics: []*metric.Metric{
{
LabelKeys: labelKeys,
LabelValues: labelValues,
Value: 1,
},
}}
}),
),
*generator.NewFamilyGenerator(
"kube_ingress_created",
"Unix creation timestamp",
metric.Gauge,
"",
wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
ms := []*metric.Metric{}
if !i.CreationTimestamp.IsZero() {
ms = append(ms, &metric.Metric{
Value: float64(i.CreationTimestamp.Unix()),
})
}
return &metric.Family{
Metrics: ms,
}
}),
),
*generator.NewFamilyGenerator(
"kube_ingress_metadata_resource_version",
"Resource version representing a specific version of ingress.",
metric.Gauge,
"",
wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
return &metric.Family{
Metrics: resourceVersionMetric(i.ObjectMeta.ResourceVersion),
}
}),
),
*generator.NewFamilyGenerator(
"kube_ingress_path",
"Ingress host, paths and backend service information.",
metric.Gauge,
"",
wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
ms := []*metric.Metric{}
for _, rule := range i.Spec.Rules {
if rule.HTTP != nil {
for _, path := range rule.HTTP.Paths {
ms = append(ms, &metric.Metric{
LabelKeys: []string{"host", "path", "service_name", "service_port"},
LabelValues: []string{rule.Host, path.Path, path.Backend.Service.Name, strconv.Itoa(int(path.Backend.Service.Port.Number))},
Value: 1,
})
}
}
}
return &metric.Family{
Metrics: ms,
}
}),
),
*generator.NewFamilyGenerator(
"kube_ingress_tls",
"Ingress TLS host and secret information.",
metric.Gauge,
"",
wrapIngressFunc(func(i *networkingv1.Ingress) *metric.Family {
ms := []*metric.Metric{}
for _, tls := range i.Spec.TLS {
for _, host := range tls.Hosts {
ms = append(ms, &metric.Metric{
LabelKeys: []string{"tls_host", "secret"},
LabelValues: []string{host, tls.SecretName},
Value: 1,
})
}
}
return &metric.Family{
Metrics: ms,
}
}),
),
}
}