github.com/Azure/aad-pod-identity@v1.8.17/pkg/metrics/prometheus_exporter.go (about)

     1  package metrics
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  
     7  	"contrib.go.opencensus.io/exporter/prometheus"
     8  	"k8s.io/klog/v2"
     9  )
    10  
    11  // newPrometheusExporter creates prometheus exporter and run the same on given port
    12  func newPrometheusExporter(namespace string, portNumber string) (*prometheus.Exporter, error) {
    13  
    14  	prometheusExporter, err := prometheus.NewExporter(prometheus.Options{
    15  		Namespace: namespace,
    16  	})
    17  
    18  	if err != nil {
    19  		return nil, fmt.Errorf("failed to create the Prometheus exporter, error: %+v", err)
    20  	}
    21  	klog.Info("starting Prometheus exporter")
    22  	// Run the Prometheus exporter as a scrape endpoint.
    23  	go func() {
    24  		mux := http.NewServeMux()
    25  		mux.Handle("/metrics", prometheusExporter)
    26  		address := fmt.Sprintf(":%v", portNumber)
    27  		if err := http.ListenAndServe(address, mux); err != nil {
    28  			klog.Errorf("failed to run Prometheus scrape endpoint, error: %+v", err)
    29  		}
    30  	}()
    31  	return prometheusExporter, nil
    32  }