Skip to content

Commit

Permalink
feat: add metrics for provider
Browse files Browse the repository at this point in the history
Signed-off-by: Anish Ramasekar <anish.ramasekar@gmail.com>

chore: update to latest version of otel

Signed-off-by: Anish Ramasekar <anish.ramasekar@gmail.com>
  • Loading branch information
aramase committed Sep 7, 2021
1 parent b53a010 commit e28e704
Show file tree
Hide file tree
Showing 12 changed files with 748 additions and 413 deletions.
11 changes: 9 additions & 2 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"syscall"
"time"

"github.com/Azure/secrets-store-csi-driver-provider-azure/pkg/metrics"
"github.com/Azure/secrets-store-csi-driver-provider-azure/pkg/provider"
"github.com/Azure/secrets-store-csi-driver-provider-azure/pkg/server"
"github.com/Azure/secrets-store-csi-driver-provider-azure/pkg/utils"
Expand Down Expand Up @@ -71,6 +72,11 @@ func main() {
klog.ErrorS(http.ListenAndServe(addr, nil), "unable to start profiling server")
}()
}
// initialize metrics exporter before creating measurements
err := metrics.InitMetricsExporter()
if err != nil {
klog.Fatalf("failed to initialize metrics exporter, error: %+v", err)
}

if *provider.ConstructPEMChain {
klog.Infof("construct pem chain feature enabled")
Expand Down Expand Up @@ -106,9 +112,10 @@ func main() {
grpc.UnaryInterceptor(utils.LogGRPC),
}
s := grpc.NewServer(opts...)
k8spb.RegisterCSIDriverProviderServer(s, &server.CSIDriverProviderServer{})
csiDriverProviderServer := server.New()
k8spb.RegisterCSIDriverProviderServer(s, csiDriverProviderServer)
// Register the health service.
grpc_health_v1.RegisterHealthServer(s, &server.CSIDriverProviderServer{})
grpc_health_v1.RegisterHealthServer(s, csiDriverProviderServer)

klog.Infof("Listening for connections on address: %v", listener.Addr())
go s.Serve(listener)
Expand Down
27 changes: 15 additions & 12 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,22 @@ go 1.16

require (
github.com/Azure/azure-sdk-for-go v52.4.0+incompatible
github.com/Azure/go-autorest/autorest v0.11.1
github.com/Azure/go-autorest/autorest/adal v0.9.5
github.com/Azure/go-autorest/autorest v0.11.18
github.com/Azure/go-autorest/autorest/adal v0.9.13
github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect
github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect
github.com/google/go-cmp v0.5.2
github.com/kubernetes-csi/csi-lib-utils v0.7.1
github.com/google/go-cmp v0.5.5
github.com/kubernetes-csi/csi-lib-utils v0.10.0
github.com/pkg/errors v0.9.1
github.com/stretchr/testify v1.6.1
golang.org/x/crypto v0.0.0-20201216223049-8b5274cf687f
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b
google.golang.org/grpc v1.31.0
gopkg.in/yaml.v2 v2.3.0
k8s.io/component-base v0.20.2
k8s.io/klog/v2 v2.5.0
sigs.k8s.io/secrets-store-csi-driver v0.0.21
github.com/stretchr/testify v1.7.0
go.opentelemetry.io/otel v0.20.0
go.opentelemetry.io/otel/exporters/metric/prometheus v0.20.0
go.opentelemetry.io/otel/metric v0.20.0
golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83
golang.org/x/net v0.0.0-20210520170846-37e1c6afe023
google.golang.org/grpc v1.38.0
gopkg.in/yaml.v2 v2.4.0
k8s.io/component-base v0.22.0
k8s.io/klog/v2 v2.9.0
sigs.k8s.io/secrets-store-csi-driver v0.3.0
)
351 changes: 204 additions & 147 deletions go.sum

Large diffs are not rendered by default.

28 changes: 28 additions & 0 deletions pkg/metrics/exporter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package metrics

import (
"flag"
"fmt"
"strings"

"k8s.io/klog/v2"
)

var (
metricsBackend = flag.String("metrics-backend", "Prometheus", "Backend used for metrics")
prometheusPort = flag.Int("prometheus-port", 8898, "Prometheus port for metrics backend")
)

const prometheusExporter = "prometheus"

func InitMetricsExporter() error {
mb := strings.ToLower(*metricsBackend)
klog.Infof("metrics backend: %s", mb)
switch mb {
// Prometheus is the only exporter for now
case prometheusExporter:
return initPrometheusExporter()
default:
return fmt.Errorf("unsupported metrics backend %v", *metricsBackend)
}
}
24 changes: 24 additions & 0 deletions pkg/metrics/prometheus_exporter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package metrics

import (
"fmt"
"net/http"

"go.opentelemetry.io/otel/exporters/metric/prometheus"
)

func initPrometheusExporter() error {
pusher, err := prometheus.InstallNewPipeline(prometheus.Config{
DefaultHistogramBoundaries: []float64{
0.1, 0.2, 0.3, 0.4, 0.5, 1, 1.5, 2, 2.5, 3.0, 5.0, 10.0, 15.0, 30.0,
}})
if err != nil {
return err
}
http.HandleFunc("/", pusher.ServeHTTP)
go func() {
_ = http.ListenAndServe(fmt.Sprintf(":%v", *prometheusPort), nil)
}()

return err
}

0 comments on commit e28e704

Please sign in to comment.