This commit is contained in:
Abhishek Pandey 2023-10-06 18:20:10 +05:30
parent e4cbae0a5e
commit 480e37cd29
2 changed files with 20 additions and 63 deletions

View File

@ -10,7 +10,6 @@ import (
"github.com/alcionai/corso/src/pkg/logger" "github.com/alcionai/corso/src/pkg/logger"
"go.opentelemetry.io/contrib/propagators/aws/xray" "go.opentelemetry.io/contrib/propagators/aws/xray"
"go.opentelemetry.io/otel" "go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/attribute"
"go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc" "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc" "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"
semconv "go.opentelemetry.io/otel/semconv/v1.17.0" semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
@ -23,46 +22,46 @@ import (
sdktrace "go.opentelemetry.io/otel/sdk/trace" sdktrace "go.opentelemetry.io/otel/sdk/trace"
) )
type randomMetricCollector struct { type collector struct {
// cpuUsage metric.Int64ObservableGauge
// totalHeapSize metric.Int64ObservableUpDownCounter
growCounter metric.Int64Counter growCounter metric.Int64Counter
meter metric.Meter meter metric.Meter
} }
func NewRandomMetricCollector(mp metric.MeterProvider) randomMetricCollector { func Newcollector(mp metric.MeterProvider) collector {
rmc := randomMetricCollector{} rmc := collector{}
rmc.meter = mp.Meter("corso-collection")
rmc.meter = mp.Meter("corso-meter")
rmc.registerCounter() rmc.registerCounter()
// rmc.registerCpuUsage()
return rmc return rmc
} }
func (rmc *randomMetricCollector) RegisterMetricsClient(ctx context.Context, cfg Config) { func (rmc *collector) RegisterMetricsClient(ctx context.Context, cfg Config) {
go func() { go func() {
for { for {
rmc.updateCounter(ctx) rmc.updateCounter(ctx)
time.Sleep(time.Second) time.Sleep(time.Second * 10)
} }
}() }()
} }
func (rmc *randomMetricCollector) registerCounter() { func (rmc *collector) registerCounter() {
ctr, err := rmc.meter.Int64Counter( ctr, err := rmc.meter.Int64Counter(
growCounter+testingId, growCounter,
metric.WithDescription("Evergrowing ctr"), metric.WithDescription("counter"),
metric.WithUnit("count"), metric.WithUnit("count"),
) )
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
} }
rmc.growCounter = ctr rmc.growCounter = ctr
} }
func (rmc *randomMetricCollector) updateCounter(ctx context.Context) { func (rmc *collector) updateCounter(ctx context.Context) {
logger.Ctx(ctx).Info("updateCounter") logger.Ctx(ctx).Infow("updateCounter")
rmc.growCounter.Add(ctx, 1) rmc.growCounter.Add(ctx, 20)
} }
type Config struct { type Config struct {
@ -70,47 +69,10 @@ type Config struct {
Port string Port string
} }
var cfg = Config{}
const serviceName = "go"
var testingId = ""
var tracer = otel.Tracer("corso-tracer")
// Names for metric instruments
const growCounter = "grow_counter"
const timeAlive = "time_alive"
const cpuUsage = "cpu_usage"
const totalHeapSize = "total_heap_size"
const threadsActive = "threads_active"
const totalBytesSent = "total_bytes_sent"
const totalApiRequests = "total_api_requests"
const latencyTime = "latency_time"
var randomMetricCommonLabels = []attribute.KeyValue{
attribute.String("signal", "metric"),
attribute.String("language", serviceName),
attribute.String("metricType", "random"),
}
var traceCommonLabels = []attribute.KeyValue{
attribute.String("signal", "trace"),
attribute.String("language", serviceName),
attribute.String("host", cfg.Host),
attribute.String("port", cfg.Port),
}
// StartClient starts the traces and metrics providers which periodically collects signals and exports them.
// Trace exporter and Metric exporter are both configured.
func StartClient(ctx context.Context) (func(context.Context) error, error) { func StartClient(ctx context.Context) (func(context.Context) error, error) {
if id, present := os.LookupEnv("INSTANCE_ID"); present {
testingId = "_" + id
}
res := resource.NewWithAttributes( res := resource.NewWithAttributes(
semconv.SchemaURL, semconv.SchemaURL,
semconv.ServiceName("go-sample-app"), semconv.ServiceName("corso"),
) )
if _, present := os.LookupEnv("OTEL_RESOURCE_ATTRIBUTES"); present { if _, present := os.LookupEnv("OTEL_RESOURCE_ATTRIBUTES"); present {
envResource, err := resource.New(ctx, resource.WithFromEnv()) envResource, err := resource.New(ctx, resource.WithFromEnv())
@ -129,18 +91,12 @@ func StartClient(ctx context.Context) (func(context.Context) error, error) {
otel.SetTracerProvider(tp) otel.SetTracerProvider(tp)
otel.SetTextMapPropagator(xray.Propagator{}) // Set AWS X-Ray propagator otel.SetTextMapPropagator(xray.Propagator{}) // Set AWS X-Ray propagator
// exp, err := otlpmetricgrpc.New(ctx, otlpmetricgrpc.WithInsecure())
exp, err := otlpmetricgrpc.New(ctx, otlpmetricgrpc.WithInsecure(), otlpmetricgrpc.WithEndpoint("0.0.0.0:4317"), otlpmetricgrpc.WithDialOption(grpc.WithBlock())) exp, err := otlpmetricgrpc.New(ctx, otlpmetricgrpc.WithInsecure(), otlpmetricgrpc.WithEndpoint("0.0.0.0:4317"), otlpmetricgrpc.WithDialOption(grpc.WithBlock()))
if err != nil { if err != nil {
log.Fatalf("failed to create new OTLP metric exporter: %v", err) log.Fatalf("failed to create new OTLP metric exporter: %v", err)
} }
meterProvider := metricSdk.NewMeterProvider(metricSdk.WithResource(res), metricSdk.WithReader(metricSdk.NewPeriodicReader(exp)), metricSdk.WithView(metricSdk.NewView( meterProvider := metricSdk.NewMeterProvider(metricSdk.WithResource(res), metricSdk.WithReader(metricSdk.NewPeriodicReader(exp)))
metricSdk.Instrument{Name: "mp_histogram"},
metricSdk.Stream{Aggregation: metricSdk.AggregationExplicitBucketHistogram{
Boundaries: []float64{100, 300, 500},
}},
)))
otel.SetMeterProvider(meterProvider) otel.SetMeterProvider(meterProvider)

View File

@ -201,7 +201,8 @@ type metricsCategory string
// metrics collection bucket // metrics collection bucket
const ( const (
APICall metricsCategory = "api_call" APICall = "api_call"
growCounter = "grow_counter"
) )
// configurations // configurations
@ -218,7 +219,7 @@ func NewMetrics(ctx context.Context, w io.Writer) (context.Context, func()) {
} }
mp := otel.GetMeterProvider() mp := otel.GetMeterProvider()
rmc := NewRandomMetricCollector(mp) rmc := Newcollector(mp)
rmc.RegisterMetricsClient(ctx, Config{}) rmc.RegisterMetricsClient(ctx, Config{})
return ctx, func() {} return ctx, func() {}