Add Additional Autoscaling Metrics to Prometheus (#1720)
* Add prometheus metrics for autoscaling * Add desc for prometheus-metrics * FIX: Typo * Remove replicas_desired_before in metrics * Remove Num prefix in metricws
This commit is contained in:
parent
d439ed5c81
commit
72ca998266
|
|
@ -9,6 +9,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/actions-runner-controller/actions-runner-controller/api/v1alpha1"
|
"github.com/actions-runner-controller/actions-runner-controller/api/v1alpha1"
|
||||||
|
prometheus_metrics "github.com/actions-runner-controller/actions-runner-controller/controllers/metrics"
|
||||||
arcgithub "github.com/actions-runner-controller/actions-runner-controller/github"
|
arcgithub "github.com/actions-runner-controller/actions-runner-controller/github"
|
||||||
"github.com/google/go-github/v45/github"
|
"github.com/google/go-github/v45/github"
|
||||||
corev1 "k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
|
@ -211,6 +212,20 @@ func (r *HorizontalRunnerAutoscalerReconciler) suggestReplicasByQueuedAndInProgr
|
||||||
|
|
||||||
necessaryReplicas := queued + inProgress
|
necessaryReplicas := queued + inProgress
|
||||||
|
|
||||||
|
prometheus_metrics.SetHorizontalRunnerAutoscalerQueuedAndInProgressWorkflowRuns(
|
||||||
|
hra.ObjectMeta,
|
||||||
|
st.enterprise,
|
||||||
|
st.org,
|
||||||
|
st.repo,
|
||||||
|
st.kind,
|
||||||
|
st.st,
|
||||||
|
necessaryReplicas,
|
||||||
|
completed,
|
||||||
|
inProgress,
|
||||||
|
queued,
|
||||||
|
unknown,
|
||||||
|
)
|
||||||
|
|
||||||
r.Log.V(1).Info(
|
r.Log.V(1).Info(
|
||||||
fmt.Sprintf("Suggested desired replicas of %d by TotalNumberOfQueuedAndInProgressWorkflowRuns", necessaryReplicas),
|
fmt.Sprintf("Suggested desired replicas of %d by TotalNumberOfQueuedAndInProgressWorkflowRuns", necessaryReplicas),
|
||||||
"workflow_runs_completed", completed,
|
"workflow_runs_completed", completed,
|
||||||
|
|
@ -382,6 +397,19 @@ func (r *HorizontalRunnerAutoscalerReconciler) suggestReplicasByPercentageRunner
|
||||||
//
|
//
|
||||||
// - num_runners can be as twice as large as replicas_desired_before while
|
// - num_runners can be as twice as large as replicas_desired_before while
|
||||||
// the runnerdeployment controller is replacing RunnerReplicaSet for runner update.
|
// the runnerdeployment controller is replacing RunnerReplicaSet for runner update.
|
||||||
|
prometheus_metrics.SetHorizontalRunnerAutoscalerPercentageRunnersBusy(
|
||||||
|
hra.ObjectMeta,
|
||||||
|
st.enterprise,
|
||||||
|
st.org,
|
||||||
|
st.repo,
|
||||||
|
st.kind,
|
||||||
|
st.st,
|
||||||
|
desiredReplicas,
|
||||||
|
numRunners,
|
||||||
|
numRunnersRegistered,
|
||||||
|
numRunnersBusy,
|
||||||
|
numTerminatingBusy,
|
||||||
|
)
|
||||||
|
|
||||||
r.Log.V(1).Info(
|
r.Log.V(1).Info(
|
||||||
fmt.Sprintf("Suggested desired replicas of %d by PercentageRunnersBusy", desiredReplicas),
|
fmt.Sprintf("Suggested desired replicas of %d by PercentageRunnersBusy", desiredReplicas),
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,13 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
hraName = "horizontalrunnerautoscaler"
|
hraName = "horizontalrunnerautoscaler"
|
||||||
hraNamespace = "namespace"
|
hraNamespace = "namespace"
|
||||||
|
stEnterprise = "enterprise"
|
||||||
|
stOrganization = "organization"
|
||||||
|
stRepository = "repository"
|
||||||
|
stKind = "kind"
|
||||||
|
stName = "name"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
|
@ -16,6 +21,16 @@ var (
|
||||||
horizontalRunnerAutoscalerMinReplicas,
|
horizontalRunnerAutoscalerMinReplicas,
|
||||||
horizontalRunnerAutoscalerMaxReplicas,
|
horizontalRunnerAutoscalerMaxReplicas,
|
||||||
horizontalRunnerAutoscalerDesiredReplicas,
|
horizontalRunnerAutoscalerDesiredReplicas,
|
||||||
|
horizontalRunnerAutoscalerReplicasDesired,
|
||||||
|
horizontalRunnerAutoscalerRunners,
|
||||||
|
horizontalRunnerAutoscalerRunnersRegistered,
|
||||||
|
horizontalRunnerAutoscalerRunnersBusy,
|
||||||
|
horizontalRunnerAutoscalerTerminatingBusy,
|
||||||
|
horizontalRunnerAutoscalerNecessaryReplicas,
|
||||||
|
horizontalRunnerAutoscalerWorkflowRunsCompleted,
|
||||||
|
horizontalRunnerAutoscalerWorkflowRunsInProgress,
|
||||||
|
horizontalRunnerAutoscalerWorkflowRunsQueued,
|
||||||
|
horizontalRunnerAutoscalerWorkflowRunsUnknown,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -41,6 +56,78 @@ var (
|
||||||
},
|
},
|
||||||
[]string{hraName, hraNamespace},
|
[]string{hraName, hraNamespace},
|
||||||
)
|
)
|
||||||
|
// PercentageRunnersBusy
|
||||||
|
horizontalRunnerAutoscalerReplicasDesired = prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "horizontalrunnerautoscaler_replicas_desired",
|
||||||
|
Help: "replicas_desired of PercentageRunnersBusy",
|
||||||
|
},
|
||||||
|
[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
|
||||||
|
)
|
||||||
|
horizontalRunnerAutoscalerRunners = prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "horizontalrunnerautoscaler_runners",
|
||||||
|
Help: "num_runners of PercentageRunnersBusy",
|
||||||
|
},
|
||||||
|
[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
|
||||||
|
)
|
||||||
|
horizontalRunnerAutoscalerRunnersRegistered = prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "horizontalrunnerautoscaler_runners_registered",
|
||||||
|
Help: "num_runners_registered of PercentageRunnersBusy",
|
||||||
|
},
|
||||||
|
[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
|
||||||
|
)
|
||||||
|
horizontalRunnerAutoscalerRunnersBusy = prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "horizontalrunnerautoscaler_runners_busy",
|
||||||
|
Help: "num_runners_busy of PercentageRunnersBusy",
|
||||||
|
},
|
||||||
|
[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
|
||||||
|
)
|
||||||
|
horizontalRunnerAutoscalerTerminatingBusy = prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "horizontalrunnerautoscaler_terminating_busy",
|
||||||
|
Help: "num_terminating_busy of PercentageRunnersBusy",
|
||||||
|
},
|
||||||
|
[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
|
||||||
|
)
|
||||||
|
// QueuedAndInProgressWorkflowRuns
|
||||||
|
horizontalRunnerAutoscalerNecessaryReplicas = prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "horizontalrunnerautoscaler_necessary_replicas",
|
||||||
|
Help: "necessary_replicas of QueuedAndInProgressWorkflowRuns",
|
||||||
|
},
|
||||||
|
[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
|
||||||
|
)
|
||||||
|
horizontalRunnerAutoscalerWorkflowRunsCompleted = prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "horizontalrunnerautoscaler_workflow_runs_completed",
|
||||||
|
Help: "workflow_runs_completed of QueuedAndInProgressWorkflowRuns",
|
||||||
|
},
|
||||||
|
[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
|
||||||
|
)
|
||||||
|
horizontalRunnerAutoscalerWorkflowRunsInProgress = prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "horizontalrunnerautoscaler_workflow_runs_in_progress",
|
||||||
|
Help: "workflow_runs_in_progress of QueuedAndInProgressWorkflowRuns",
|
||||||
|
},
|
||||||
|
[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
|
||||||
|
)
|
||||||
|
horizontalRunnerAutoscalerWorkflowRunsQueued = prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "horizontalrunnerautoscaler_workflow_runs_queued",
|
||||||
|
Help: "workflow_runs_queued of QueuedAndInProgressWorkflowRuns",
|
||||||
|
},
|
||||||
|
[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
|
||||||
|
)
|
||||||
|
horizontalRunnerAutoscalerWorkflowRunsUnknown = prometheus.NewGaugeVec(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "horizontalrunnerautoscaler_workflow_runs_unknown",
|
||||||
|
Help: "workflow_runs_unknown of QueuedAndInProgressWorkflowRuns",
|
||||||
|
},
|
||||||
|
[]string{hraName, hraNamespace, stEnterprise, stOrganization, stRepository, stKind, stName},
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
func SetHorizontalRunnerAutoscalerSpec(o metav1.ObjectMeta, spec v1alpha1.HorizontalRunnerAutoscalerSpec) {
|
func SetHorizontalRunnerAutoscalerSpec(o metav1.ObjectMeta, spec v1alpha1.HorizontalRunnerAutoscalerSpec) {
|
||||||
|
|
@ -65,3 +152,61 @@ func SetHorizontalRunnerAutoscalerStatus(o metav1.ObjectMeta, status v1alpha1.Ho
|
||||||
horizontalRunnerAutoscalerDesiredReplicas.With(labels).Set(float64(*status.DesiredReplicas))
|
horizontalRunnerAutoscalerDesiredReplicas.With(labels).Set(float64(*status.DesiredReplicas))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetHorizontalRunnerAutoscalerPercentageRunnersBusy(
|
||||||
|
o metav1.ObjectMeta,
|
||||||
|
enterprise string,
|
||||||
|
organization string,
|
||||||
|
repository string,
|
||||||
|
kind string,
|
||||||
|
name string,
|
||||||
|
desiredReplicas int,
|
||||||
|
numRunners int,
|
||||||
|
numRunnersRegistered int,
|
||||||
|
numRunnersBusy int,
|
||||||
|
numTerminatingBusy int,
|
||||||
|
) {
|
||||||
|
labels := prometheus.Labels{
|
||||||
|
hraName: o.Name,
|
||||||
|
hraNamespace: o.Namespace,
|
||||||
|
stEnterprise: enterprise,
|
||||||
|
stOrganization: organization,
|
||||||
|
stRepository: repository,
|
||||||
|
stKind: kind,
|
||||||
|
stName: name,
|
||||||
|
}
|
||||||
|
horizontalRunnerAutoscalerReplicasDesired.With(labels).Set(float64(desiredReplicas))
|
||||||
|
horizontalRunnerAutoscalerRunners.With(labels).Set(float64(numRunners))
|
||||||
|
horizontalRunnerAutoscalerRunnersRegistered.With(labels).Set(float64(numRunnersRegistered))
|
||||||
|
horizontalRunnerAutoscalerRunnersBusy.With(labels).Set(float64(numRunnersBusy))
|
||||||
|
horizontalRunnerAutoscalerTerminatingBusy.With(labels).Set(float64(numTerminatingBusy))
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetHorizontalRunnerAutoscalerQueuedAndInProgressWorkflowRuns(
|
||||||
|
o metav1.ObjectMeta,
|
||||||
|
enterprise string,
|
||||||
|
organization string,
|
||||||
|
repository string,
|
||||||
|
kind string,
|
||||||
|
name string,
|
||||||
|
necessaryReplicas int,
|
||||||
|
workflowRunsCompleted int,
|
||||||
|
workflowRunsInProgress int,
|
||||||
|
workflowRunsQueued int,
|
||||||
|
workflowRunsUnknown int,
|
||||||
|
) {
|
||||||
|
labels := prometheus.Labels{
|
||||||
|
hraName: o.Name,
|
||||||
|
hraNamespace: o.Namespace,
|
||||||
|
stEnterprise: enterprise,
|
||||||
|
stOrganization: organization,
|
||||||
|
stRepository: repository,
|
||||||
|
stKind: kind,
|
||||||
|
stName: name,
|
||||||
|
}
|
||||||
|
horizontalRunnerAutoscalerNecessaryReplicas.With(labels).Set(float64(necessaryReplicas))
|
||||||
|
horizontalRunnerAutoscalerWorkflowRunsCompleted.With(labels).Set(float64(workflowRunsCompleted))
|
||||||
|
horizontalRunnerAutoscalerWorkflowRunsInProgress.With(labels).Set(float64(workflowRunsInProgress))
|
||||||
|
horizontalRunnerAutoscalerWorkflowRunsQueued.With(labels).Set(float64(workflowRunsQueued))
|
||||||
|
horizontalRunnerAutoscalerWorkflowRunsUnknown.With(labels).Set(float64(workflowRunsUnknown))
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue