1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| func main(){ shutdown,err := initProvider() if err != nil{ log.Fatal(err) } defer shutdown(context.Backgroud()) writeToFileCounter := initCounter("management-metrics", "WriteToFile", "写入文件次数") writeToClsCounter := initCounter("management-metrics", "WriteToCls", "写入cls次数") ... app1 := app.NewApp(conf, initLogger(fileWriter), initLogger(clsWriter)) middleApp := app.NewMiddleApp(writeToFileCounter, writeToClsCounter, app1) r:= gin.Default() initRouter(r, middleApp) go serveMetrics() ... }
func initProvider() (func(ctx content.Context) error,error){ ctx := context.background() res,err := resource.New( ctx, resource.WithOS(), resource.WithHost(), resource.WithAttributes( semconv.ServiceName("management"), semconv.ServiceVersion("1.0.0"), attribute.String("env", "dev"), attribute.String("author", "lin"), ), ) if err != nil { log.Fatal(err) } var metricReader metric.Reader { metricReader, err = prometheus.New() if err != nil{ log.Fatal(err) } } provider := metric.NewMeterProvider(metric.WithResource(res), metric.WithReader(metricReader)) otel.SetMeterProvider(provider) return provider.Shutdown, nil }
func initCounter(meterName string, counterName string, desc string) metric.Int64Counter { meter := otel.Meter(meterName) counter, err := meter.Int64Counter(counterName, metric.WithDescription(desc)) if err != nil{ log.Fatal(err) } return counter }
func serveMetrics(){ http.Handle("/metrics", promhttp.Handler()) err := http.ListenAndServe(":2223", nil) if err != nil{ log.Fatal(err) } }
|