github.com/vseinstrumentiru/lego@v1.0.2/internal/lego/monitor/provider.go (about) 1 package monitor 2 3 import ( 4 "net/http" 5 6 "contrib.go.opencensus.io/exporter/jaeger" 7 "contrib.go.opencensus.io/exporter/ocagent" 8 "contrib.go.opencensus.io/exporter/prometheus" 9 "emperror.dev/emperror" 10 health "github.com/AppsFlyer/go-sundheit" 11 "github.com/newrelic/newrelic-opencensus-exporter-go/nrcensus" 12 13 lego2 "github.com/vseinstrumentiru/lego/internal/lego" 14 lepropagation "github.com/vseinstrumentiru/lego/internal/lego/monitor/propagation" 15 "go.opencensus.io/plugin/ochttp/propagation/tracecontext" 16 "go.opencensus.io/stats/view" 17 "go.opencensus.io/trace" 18 19 // jaegerPropagation "contrib.go.opencensus.io/exporter/jaeger/propagation" 20 jaegerPropagation "github.com/vseinstrumentiru/lego/internal/lego/monitor/propagation/jaegerwrap" 21 "github.com/vseinstrumentiru/lego/internal/lego/monitor/telemetry" 22 ) 23 24 func Provide(p lego2.Process, config Config) (*http.ServeMux, health.Health) { 25 router, healthz := telemetry.Provide(p, p.Build()) 26 27 var formatter lepropagation.HTTPFormatCollection 28 29 if config.Trace.Enabled { 30 trace.ApplyConfig(config.Trace.Config()) 31 } 32 33 if config.Exporter.Opencensus.Enabled { 34 p.Info("opencensus exporter enabled") 35 36 exporter, err := ocagent.NewExporter(append( 37 config.Exporter.OpencensusOptions(), 38 ocagent.WithServiceName(p.Name()), 39 )...) 40 emperror.Panic(err) 41 42 formatter = append(formatter, &tracecontext.HTTPFormat{}) 43 trace.RegisterExporter(exporter) 44 view.RegisterExporter(exporter) 45 } 46 47 if config.Exporter.NewRelic.Enabled { 48 p.Info("newrelic exporter enabled") 49 50 exporter, err := nrcensus.NewExporter( 51 p.Name(), 52 config.Exporter.NewRelic.Key, 53 ) 54 emperror.Panic(err) 55 56 trace.RegisterExporter(exporter) 57 view.RegisterExporter(exporter) 58 } 59 60 if config.Exporter.Jaeger.Enabled { 61 p.Info("jaeger exporter enabled") 62 63 exporter, err := jaeger.NewExporter(jaeger.Options{ 64 CollectorEndpoint: config.Exporter.Jaeger.Addr, 65 Process: jaeger.Process{ 66 ServiceName: p.Name(), 67 }, 68 OnError: p.Handle, 69 }) 70 71 emperror.Panic(err) 72 73 formatter = append(formatter, &jaegerPropagation.HTTPFormat{}) 74 trace.RegisterExporter(exporter) 75 } 76 77 if config.Exporter.Prometheus.Enabled { 78 p.Info("prometheus exporter enabled") 79 80 exporter, err := prometheus.NewExporter(prometheus.Options{ 81 OnError: emperror.WithDetails( 82 p.Handler(), 83 "component", "opencensus", 84 "exporter", "prometheus", 85 ).Handle, 86 ConstLabels: map[string]string{ 87 "app": p.Name(), 88 }, 89 }) 90 emperror.Panic(err) 91 92 view.RegisterExporter(exporter) 93 router.Handle("/metrics", exporter) 94 } 95 96 lepropagation.DefaultHTTPFormat = formatter 97 98 return router, healthz 99 }