in pkg/metricgen/intake.go [37:78]
func SendIntakeV2(_ context.Context, opts ...ConfigOption) (EventStats, error) {
cfg := newConfig(opts...)
if err := cfg.Validate(); err != nil {
return EventStats{}, fmt.Errorf("cannot validate IntakeV2 Metrics configuration: %w", err)
}
// disable builtin metrics entirely to have predictable metrics value.
os.Setenv("ELASTIC_APM_DISABLE_METRICS", "system.*, *cpu*, *golang*")
os.Setenv("ELASTIC_APM_VERIFY_SERVER_CERT", strconv.FormatBool(cfg.verifyServerCert))
stats := EventStats{}
tracer, err := apm.NewTracer(cfg.apmServiceName, "0.0.1")
if err != nil {
return EventStats{}, fmt.Errorf("cannot setup a tracer: %w", err)
}
// setup apmotel bridge to test metrics coming from OTLP
exporter, err := apmotel.NewGatherer()
if err != nil {
return EventStats{}, fmt.Errorf("cannot init gatherer: %w", err)
}
provider := metric.NewMeterProvider(metric.WithReader(exporter))
o := tracer.RegisterMetricsGatherer(exporter)
defer o()
d := tracer.RegisterMetricsGatherer(Gatherer{})
defer d()
meter := provider.Meter("metricgen")
counter, _ := meter.Float64Counter("apmotel")
counter.Add(context.Background(), 1)
stats.Add(1)
tracer.SendMetrics(nil)
stats.Add(1)
tracer.Flush(nil)
return stats, nil
}