chore: changes for otel and fixes to loop
This commit is contained in:
@@ -10,21 +10,25 @@ import (
|
||||
"runtime"
|
||||
"time"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/prometheus/client_golang/prometheus/promhttp"
|
||||
"go.opentelemetry.io/contrib/bridges/otelslog"
|
||||
"go.opentelemetry.io/otel"
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp"
|
||||
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
|
||||
otelprom "go.opentelemetry.io/otel/exporters/prometheus"
|
||||
"go.opentelemetry.io/otel/exporters/stdout/stdoutlog"
|
||||
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
|
||||
"go.opentelemetry.io/otel/log/global"
|
||||
"go.opentelemetry.io/otel/log/global"
|
||||
"go.opentelemetry.io/otel/metric"
|
||||
"go.opentelemetry.io/otel/propagation"
|
||||
"go.opentelemetry.io/otel/sdk/log"
|
||||
sdkmetric "go.opentelemetry.io/otel/sdk/metric"
|
||||
"go.opentelemetry.io/otel/sdk/resource"
|
||||
sdktrace "go.opentelemetry.io/otel/sdk/trace"
|
||||
semconv "go.opentelemetry.io/otel/semconv/v1.26.0"
|
||||
|
||||
"go.opentelemetry.io/otel/trace"
|
||||
)
|
||||
|
||||
@@ -43,6 +47,7 @@ func Init(ctx context.Context, name string) (shutdown func(context.Context) erro
|
||||
}
|
||||
|
||||
func Meter() metric.Meter { return meter }
|
||||
|
||||
// func Error(err error, v ...any) {
|
||||
// if err == nil {
|
||||
// return
|
||||
@@ -52,33 +57,37 @@ func Meter() metric.Meter { return meter }
|
||||
// }
|
||||
// func Info(msg string, v ...any) { fmt.Println(append([]any{msg}, v...)); logger.Info(msg, v...) }
|
||||
|
||||
type spanny struct{
|
||||
type spanny struct {
|
||||
trace.Span
|
||||
}
|
||||
func (s *spanny) RecordError(err error, options ...trace.EventOption) {
|
||||
|
||||
func (s *spanny) RecordError(err error, options ...trace.EventOption) {
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
ec := trace.NewEventConfig(options...)
|
||||
|
||||
|
||||
attrs := make([]any, len(ec.Attributes()))
|
||||
for i, v := range ec.Attributes() {
|
||||
attrs[i] = v
|
||||
}
|
||||
|
||||
fmt.Println(append([]any{"ERR:", err}, attrs...)...)
|
||||
logger.Error(err.Error(), attrs...)
|
||||
fmt.Println(append([]any{"ERR:", err}, attrs...)...)
|
||||
logger.Error(err.Error(), attrs...)
|
||||
s.Span.RecordError(err, options...)
|
||||
}
|
||||
func (s *spanny) AddEvent(name string, options ...trace.EventOption) {
|
||||
func (s *spanny) AddEvent(name string, options ...trace.EventOption) {
|
||||
ec := trace.NewEventConfig(options...)
|
||||
|
||||
attrs := make([]any, len(ec.Attributes()))
|
||||
|
||||
attrs := make([]any, 2*len(ec.Attributes()))
|
||||
for i, v := range ec.Attributes() {
|
||||
attrs[i] = v
|
||||
attrs[2*i] = v.Key
|
||||
attrs[2*i+1] = v.Value.Emit()
|
||||
}
|
||||
fmt.Println(append([]any{name}, attrs...)...)
|
||||
logger.Info(name, attrs...)
|
||||
fmt.Println(append([]any{name}, attrs...)...)
|
||||
logger.Info(name, attrs...)
|
||||
|
||||
s.Span.AddEvent(name, options...)
|
||||
}
|
||||
|
||||
func Span(ctx context.Context, opts ...trace.SpanStartOption) (context.Context, trace.Span) {
|
||||
@@ -233,8 +242,31 @@ func newMeterProvider(ctx context.Context, name string) (func(context.Context) e
|
||||
// )
|
||||
// otel.SetMeterProvider(meterProvider)
|
||||
|
||||
metricExporter, err := otelprom.New(
|
||||
otelprom.WithRegisterer(prometheus.DefaultRegisterer),
|
||||
|
||||
// OTEL default buckets assume you're using milliseconds. Substitute defaults
|
||||
// appropriate for units of seconds.
|
||||
otelprom.WithAggregationSelector(func(ik sdkmetric.InstrumentKind) sdkmetric.Aggregation {
|
||||
switch ik {
|
||||
case sdkmetric.InstrumentKindHistogram:
|
||||
return sdkmetric.AggregationExplicitBucketHistogram{
|
||||
Boundaries: prometheus.DefBuckets,
|
||||
NoMinMax: false,
|
||||
}
|
||||
default:
|
||||
return sdkmetric.DefaultAggregationSelector(ik)
|
||||
}
|
||||
}),
|
||||
)
|
||||
|
||||
p := sdkmetric.NewMeterProvider(
|
||||
sdkmetric.WithReader(metricExporter),
|
||||
)
|
||||
|
||||
otel.SetMeterProvider(p)
|
||||
http.Handle("/metrics", promhttp.Handler())
|
||||
return func(ctx context.Context) error { return nil }, nil
|
||||
return func(ctx context.Context) error { return nil }, err
|
||||
}
|
||||
|
||||
func newLoggerProvider(ctx context.Context, name string) (func(context.Context) error, error) {
|
||||
|
||||
Reference in New Issue
Block a user