mirror of
https://github.com/zalando-incubator/kube-metrics-adapter.git
synced 2026-06-01 02:17:01 +00:00
Expose basic go metrics via prometheus (#11)
* feat: expose basic go metrics via prometheus Signed-off-by: Martin Linkhorst <martin.linkhorst@zalando.de> * feat: expose basic counter of successful and failed collections and updates Signed-off-by: Martin Linkhorst <martin.linkhorst@zalando.de>
This commit is contained in:
@@ -8,6 +8,8 @@ import (
|
|||||||
|
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
"github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/provider"
|
"github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/provider"
|
||||||
|
"github.com/prometheus/client_golang/prometheus"
|
||||||
|
"github.com/prometheus/client_golang/prometheus/promauto"
|
||||||
"github.com/zalando-incubator/kube-metrics-adapter/pkg/collector"
|
"github.com/zalando-incubator/kube-metrics-adapter/pkg/collector"
|
||||||
autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1"
|
autoscalingv2beta1 "k8s.io/api/autoscaling/v2beta1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
@@ -18,6 +20,29 @@ import (
|
|||||||
"k8s.io/metrics/pkg/apis/external_metrics"
|
"k8s.io/metrics/pkg/apis/external_metrics"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// CollectionSuccesses is the total number of successful collections.
|
||||||
|
CollectionSuccesses = promauto.NewCounter(prometheus.CounterOpts{
|
||||||
|
Name: "kube_metrics_adapter_collections_success",
|
||||||
|
Help: "The total number of successful collections",
|
||||||
|
})
|
||||||
|
// CollectionErrors is the total number of failed collection attempts.
|
||||||
|
CollectionErrors = promauto.NewCounter(prometheus.CounterOpts{
|
||||||
|
Name: "kube_metrics_adapter_collections_error",
|
||||||
|
Help: "The total number of failed collection attempts",
|
||||||
|
})
|
||||||
|
// UpdateSuccesses is the total number of successful HPA updates.
|
||||||
|
UpdateSuccesses = promauto.NewCounter(prometheus.CounterOpts{
|
||||||
|
Name: "kube_metrics_adapter_updates_success",
|
||||||
|
Help: "The total number of successful HPA updates",
|
||||||
|
})
|
||||||
|
// UpdateErrors is the total number of failed HPA update attempts.
|
||||||
|
UpdateErrors = promauto.NewCounter(prometheus.CounterOpts{
|
||||||
|
Name: "kube_metrics_adapter_updates_error",
|
||||||
|
Help: "The total number of failed HPA update attempts",
|
||||||
|
})
|
||||||
|
)
|
||||||
|
|
||||||
type objectCollector struct {
|
type objectCollector struct {
|
||||||
ObjectReference *autoscalingv2beta1.CrossVersionObjectReference
|
ObjectReference *autoscalingv2beta1.CrossVersionObjectReference
|
||||||
}
|
}
|
||||||
@@ -66,6 +91,9 @@ func (p *HPAProvider) Run(ctx context.Context) {
|
|||||||
err := p.updateHPAs()
|
err := p.updateHPAs()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
glog.Error(err)
|
glog.Error(err)
|
||||||
|
UpdateErrors.Inc()
|
||||||
|
} else {
|
||||||
|
UpdateSuccesses.Inc()
|
||||||
}
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
@@ -180,6 +208,9 @@ func (p *HPAProvider) collectMetrics(ctx context.Context) {
|
|||||||
case collection := <-p.metricSink:
|
case collection := <-p.metricSink:
|
||||||
if collection.Error != nil {
|
if collection.Error != nil {
|
||||||
glog.Errorf("Failed to collect metrics: %v", collection.Error)
|
glog.Errorf("Failed to collect metrics: %v", collection.Error)
|
||||||
|
CollectionErrors.Inc()
|
||||||
|
} else {
|
||||||
|
CollectionSuccesses.Inc()
|
||||||
}
|
}
|
||||||
|
|
||||||
glog.Infof("Collected %d new metric(s)", len(collection.Values))
|
glog.Infof("Collected %d new metric(s)", len(collection.Values))
|
||||||
|
|||||||
+14
-2
@@ -19,14 +19,17 @@ package server
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/aws/aws-sdk-go/aws"
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/aws/aws-sdk-go/aws"
|
||||||
"github.com/aws/aws-sdk-go/aws/session"
|
"github.com/aws/aws-sdk-go/aws/session"
|
||||||
|
"github.com/golang/glog"
|
||||||
"github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/cmd/server"
|
"github.com/kubernetes-incubator/custom-metrics-apiserver/pkg/cmd/server"
|
||||||
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
"github.com/zalando-incubator/kube-metrics-adapter/pkg/collector"
|
"github.com/zalando-incubator/kube-metrics-adapter/pkg/collector"
|
||||||
"github.com/zalando-incubator/kube-metrics-adapter/pkg/provider"
|
"github.com/zalando-incubator/kube-metrics-adapter/pkg/provider"
|
||||||
"github.com/spf13/cobra"
|
|
||||||
"k8s.io/client-go/informers"
|
"k8s.io/client-go/informers"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/client-go/rest"
|
"k8s.io/client-go/rest"
|
||||||
@@ -44,6 +47,7 @@ func NewCommandStartAdapterServer(stopCh <-chan struct{}) *cobra.Command {
|
|||||||
CustomMetricsAdapterServerOptions: baseOpts,
|
CustomMetricsAdapterServerOptions: baseOpts,
|
||||||
EnableCustomMetricsAPI: true,
|
EnableCustomMetricsAPI: true,
|
||||||
EnableExternalMetricsAPI: true,
|
EnableExternalMetricsAPI: true,
|
||||||
|
MetricsAddress: ":7979",
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@@ -83,11 +87,17 @@ func NewCommandStartAdapterServer(stopCh <-chan struct{}) *cobra.Command {
|
|||||||
flags.BoolVar(&o.AWSExternalMetrics, "aws-external-metrics", o.AWSExternalMetrics, ""+
|
flags.BoolVar(&o.AWSExternalMetrics, "aws-external-metrics", o.AWSExternalMetrics, ""+
|
||||||
"whether to enable AWS external metrics")
|
"whether to enable AWS external metrics")
|
||||||
flags.StringSliceVar(&o.AWSRegions, "aws-region", o.AWSRegions, "the AWS regions which should be monitored. eg: eu-central, eu-west-1")
|
flags.StringSliceVar(&o.AWSRegions, "aws-region", o.AWSRegions, "the AWS regions which should be monitored. eg: eu-central, eu-west-1")
|
||||||
|
flags.StringVar(&o.MetricsAddress, "metrics-address", o.MetricsAddress, "The address where to serve prometheus metrics")
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o AdapterServerOptions) RunCustomMetricsAdapterServer(stopCh <-chan struct{}) error {
|
func (o AdapterServerOptions) RunCustomMetricsAdapterServer(stopCh <-chan struct{}) error {
|
||||||
|
go func() {
|
||||||
|
http.Handle("/metrics", promhttp.Handler())
|
||||||
|
glog.Fatal(http.ListenAndServe(o.MetricsAddress, nil))
|
||||||
|
}()
|
||||||
|
|
||||||
config, err := o.Config()
|
config, err := o.Config()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -210,4 +220,6 @@ type AdapterServerOptions struct {
|
|||||||
AWSExternalMetrics bool
|
AWSExternalMetrics bool
|
||||||
// AWSRegions the AWS regions which are supported for monitoring.
|
// AWSRegions the AWS regions which are supported for monitoring.
|
||||||
AWSRegions []string
|
AWSRegions []string
|
||||||
|
// MetricsAddress is the address where to serve prometheus metrics.
|
||||||
|
MetricsAddress string
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user