Add hpa conditions
This commit is contained in:
parent
dffb17cf8b
commit
f9658cad01
|
|
@ -20,6 +20,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"k8s.io/api/core/v1"
|
||||
"k8s.io/apimachinery/pkg/fields"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"k8s.io/client-go/rest"
|
||||
|
|
@ -62,3 +63,28 @@ func (sil SharedInformerList) Run(stopCh <-chan struct{}) {
|
|||
go sinf.Run(stopCh)
|
||||
}
|
||||
}
|
||||
|
||||
func boolFloat64(b bool) float64 {
|
||||
if b {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// addConditionMetrics generates one metric for each possible node condition
|
||||
// status. For this function to work properly, the last label in the metric
|
||||
// description must be the condition.
|
||||
func addConditionMetrics(ch chan<- prometheus.Metric, desc *prometheus.Desc, cs v1.ConditionStatus, lv ...string) {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
desc, prometheus.GaugeValue, boolFloat64(cs == v1.ConditionTrue),
|
||||
append(lv, "true")...,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
desc, prometheus.GaugeValue, boolFloat64(cs == v1.ConditionFalse),
|
||||
append(lv, "false")...,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
desc, prometheus.GaugeValue, boolFloat64(cs == v1.ConditionUnknown),
|
||||
append(lv, "unknown")...,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ import (
|
|||
|
||||
"github.com/golang/glog"
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
autoscaling "k8s.io/api/autoscaling/v1"
|
||||
autoscaling "k8s.io/api/autoscaling/v2beta1"
|
||||
"k8s.io/client-go/kubernetes"
|
||||
)
|
||||
|
||||
|
|
@ -60,6 +60,11 @@ var (
|
|||
descHorizontalPodAutoscalerLabelsHelp,
|
||||
descHorizontalPodAutoscalerLabelsDefaultLabels, nil,
|
||||
)
|
||||
descHorizontalPodAutoscalerCondition = prometheus.NewDesc(
|
||||
"kube_hpa_status_condition",
|
||||
"The condition of this autoscaler.",
|
||||
[]string{"namespace", "hpa", "condition", "status"}, nil,
|
||||
)
|
||||
)
|
||||
|
||||
type HPALister func() (autoscaling.HorizontalPodAutoscalerList, error)
|
||||
|
|
@ -69,7 +74,7 @@ func (l HPALister) List() (autoscaling.HorizontalPodAutoscalerList, error) {
|
|||
}
|
||||
|
||||
func RegisterHorizontalPodAutoScalerCollector(registry prometheus.Registerer, kubeClient kubernetes.Interface, namespaces []string) {
|
||||
client := kubeClient.Autoscaling().RESTClient()
|
||||
client := kubeClient.AutoscalingV2beta1().RESTClient()
|
||||
glog.Infof("collect hpa with %s", client.APIVersion())
|
||||
hpainfs := NewSharedInformerList(client, "horizontalpodautoscalers", namespaces, &autoscaling.HorizontalPodAutoscaler{})
|
||||
|
||||
|
|
@ -144,4 +149,8 @@ func (hc *hpaCollector) collectHPA(ch chan<- prometheus.Metric, h autoscaling.Ho
|
|||
addGauge(descHorizontalPodAutoscalerSpecMinReplicas, float64(*h.Spec.MinReplicas))
|
||||
addGauge(descHorizontalPodAutoscalerStatusCurrentReplicas, float64(h.Status.CurrentReplicas))
|
||||
addGauge(descHorizontalPodAutoscalerStatusDesiredReplicas, float64(h.Status.DesiredReplicas))
|
||||
|
||||
for _, c := range h.Status.Conditions {
|
||||
addConditionMetrics(ch, descHorizontalPodAutoscalerCondition, c.Status, h.Name, h.Namespace, string(c.Type))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ package collectors
|
|||
import (
|
||||
"testing"
|
||||
|
||||
autoscaling "k8s.io/api/autoscaling/v1"
|
||||
autoscaling "k8s.io/api/autoscaling/v2beta1"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -266,28 +266,3 @@ func (nc *nodeCollector) collectNode(ch chan<- prometheus.Metric, n v1.Node) {
|
|||
addResource(descNodeStatusAllocatableMemory, n.Status.Allocatable, v1.ResourceMemory)
|
||||
addResource(descNodeStatusAllocatablePods, n.Status.Allocatable, v1.ResourcePods)
|
||||
}
|
||||
|
||||
// addConditionMetrics generates one metric for each possible node condition
|
||||
// status. For this function to work properly, the last label in the metric
|
||||
// description must be the condition.
|
||||
func addConditionMetrics(ch chan<- prometheus.Metric, desc *prometheus.Desc, cs v1.ConditionStatus, lv ...string) {
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
desc, prometheus.GaugeValue, boolFloat64(cs == v1.ConditionTrue),
|
||||
append(lv, "true")...,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
desc, prometheus.GaugeValue, boolFloat64(cs == v1.ConditionFalse),
|
||||
append(lv, "false")...,
|
||||
)
|
||||
ch <- prometheus.MustNewConstMetric(
|
||||
desc, prometheus.GaugeValue, boolFloat64(cs == v1.ConditionUnknown),
|
||||
append(lv, "unknown")...,
|
||||
)
|
||||
}
|
||||
|
||||
func boolFloat64(b bool) float64 {
|
||||
if b {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue