Files
kubevela/pkg/monitor/metrics/application.go
yangsoon 6cee468743 Feat: add more performance optimization and prometheus metrics for controller (#3086)
* Feat: add more prometheus metrics

Signed-off-by: yangsoon <yangsoonlx@gmail.com>

* Feat: add detail gc rt duration metrics

Signed-off-by: Yin Da <yd219913@alibaba-inc.com>

* Feat: add monitor to client

Signed-off-by: Yin Da <yd219913@alibaba-inc.com>

* Feat: add all cache object

Signed-off-by: Yin Da <yd219913@alibaba-inc.com>

* Fix: watch job

Signed-off-by: Yin Da <yd219913@alibaba-inc.com>

* Feat: add deleg client

Signed-off-by: Yin Da <yd219913@alibaba-inc.com>

* Feat: add optimize for rt list and disable controllerrevision

Signed-off-by: Yin Da <yd219913@alibaba-inc.com>

* Feat: add apprev disable optimize

Signed-off-by: Yin Da <yd219913@alibaba-inc.com>

* Fix: optimize log

Signed-off-by: Yin Da <yd219913@alibaba-inc.com>

* Feat: add time recorder for app ctrl

Signed-off-by: Yin Da <yd219913@alibaba-inc.com>

* Feat: add in-memory workflow context

Signed-off-by: Yin Da <yd219913@alibaba-inc.com>

* Feat: add reconcile-reduction & random-pick-gc & optimize rt record

Signed-off-by: Yin Da <yd219913@alibaba-inc.com>

* Feat: add optimize for healthcheck & resourcetracker trigger

Signed-off-by: Somefive <yd219913@alibaba-inc.com>

* Chore: refactor

Signed-off-by: Somefive <yd219913@alibaba-inc.com>

* Feat: record the resource-tracker number by informer event-handler

Signed-off-by: yangsoon <songyang.song@alibaba-inc.com>

* Feat: add promethus collect annotation in template

Signed-off-by: yangsoon <songyang.song@alibaba-inc.com>

* Fix: command line comment bug

Signed-off-by: Somefive <yd219913@alibaba-inc.com>

* Chore: rename args and remove legacy controller metrics

Signed-off-by: Somefive <yd219913@alibaba-inc.com>

* Fix: make code reviewable

Signed-off-by: yangsoon <songyang.song@alibaba-inc.com>

* Chore: optimize flag descriptions

Signed-off-by: Somefive <yd219913@alibaba-inc.com>

* Chore: break optimize package

Signed-off-by: Somefive <yd219913@alibaba-inc.com>

* Fix: gc policy test

Signed-off-by: Somefive <yd219913@alibaba-inc.com>

Co-authored-by: Yin Da <yd219913@alibaba-inc.com>
Co-authored-by: yangsoon <songyang.song@alibaba-inc.com>
2022-01-14 15:18:02 +08:00

133 lines
5.5 KiB
Go

/*
Copyright 2021. The KubeVela Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package metrics
import (
"github.com/prometheus/client_golang/prometheus"
"sigs.k8s.io/controller-runtime/pkg/client"
)
var (
// CreateAppHandlerDurationHistogram report the create appHandler execution duration.
CreateAppHandlerDurationHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "create_app_handler_time_seconds",
Help: "create appHandler duration distributions, this operate will list ResourceTrackers.",
Buckets: histogramBuckets,
ConstLabels: prometheus.Labels{},
}, []string{"controller"})
// HandleFinalizersDurationHistogram report the handle finalizers execution duration.
HandleFinalizersDurationHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "handle_finalizers_time_seconds",
Help: "handle finalizers duration distributions.",
Buckets: histogramBuckets,
ConstLabels: prometheus.Labels{},
}, []string{"controller", "type"})
// ParseAppFileDurationHistogram report the parse appFile execution duration.
ParseAppFileDurationHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "parse_appFile_time_seconds",
Help: "parse appFile duration distributions.",
Buckets: histogramBuckets,
ConstLabels: prometheus.Labels{},
}, []string{"controller"})
// PrepareCurrentAppRevisionDurationHistogram report the parse current appRevision execution duration.
PrepareCurrentAppRevisionDurationHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "prepare_current_appRevision_time_seconds",
Help: "parse current appRevision duration distributions.",
Buckets: histogramBuckets,
ConstLabels: prometheus.Labels{},
}, []string{"controller"})
// ApplyAppRevisionDurationHistogram report the apply appRevision execution duration.
ApplyAppRevisionDurationHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "apply_appRevision_time_seconds",
Help: "apply appRevision duration distributions.",
Buckets: histogramBuckets,
ConstLabels: prometheus.Labels{},
}, []string{"controller"})
// PrepareWorkflowAndPolicyDurationHistogram report the prepare workflow and policy execution duration.
PrepareWorkflowAndPolicyDurationHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "prepare_workflow_and_policy_time_seconds",
Help: "prepare workflow and policy duration distributions.",
Buckets: histogramBuckets,
ConstLabels: prometheus.Labels{},
}, []string{"controller"})
// GCResourceTrackersDurationHistogram report the gc resourceTrackers execution duration.
GCResourceTrackersDurationHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "gc_resourceTrackers_time_seconds",
Help: "gc resourceTrackers duration distributions.",
Buckets: histogramBuckets,
ConstLabels: prometheus.Labels{},
}, []string{"stage"})
// ClientRequestHistogram report the client request execution duration.
ClientRequestHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "client_request_time_seconds",
Help: "client request duration distributions.",
Buckets: histogramBuckets,
ConstLabels: prometheus.Labels{},
}, []string{"verb", "Kind", "apiVersion", "unstructured", "cluster"})
// ApplicationReconcileTimeHistogram report the reconciling time cost of application controller with state transition recorded
ApplicationReconcileTimeHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "application_reconcile_time_seconds",
Help: "application reconcile duration distributions.",
Buckets: histogramBuckets,
ConstLabels: prometheus.Labels{},
}, []string{"begin_phase", "end_phase"})
// ApplyComponentTimeHistogram report the time cost of applyComponentFunc
ApplyComponentTimeHistogram = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: "apply_component_time_seconds",
Help: "apply component duration distributions.",
Buckets: histogramBuckets,
ConstLabels: prometheus.Labels{},
}, []string{"stage"})
)
var (
// ListResourceTrackerCounter report the list resource tracker number.
ListResourceTrackerCounter = prometheus.NewCounterVec(prometheus.CounterOpts{
Name: "list_resourcetracker_num",
Help: "list resourceTrackers times.",
}, []string{"controller"})
)
var (
// ResourceTrackerNumberGauge report the number of resourceTracker
ResourceTrackerNumberGauge = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: "resourcetracker_number",
Help: "resourceTracker number.",
}, []string{"application", "namespace"})
)
// ExtractMetricValuesFromObjectLabel extract metric values from k8s object's labels
func ExtractMetricValuesFromObjectLabel(obj interface{}, labelKeys ...string) (values []string) {
if resource, ok := obj.(client.Object); ok {
for _, labelKey := range labelKeys {
values = append(values, resource.GetLabels()[labelKey])
}
} else {
values = make([]string, len(labelKeys))
}
return
}