in internal/self_metrics/self_metrics.go [189:257]
func CollectOpsAgentSelfMetrics(ctx context.Context, userUc, mergedUc *confgenerator.UnifiedConfig) (err error) {
// Resource for GCP and SDK detectors
res, err := resource.New(ctx,
resource.WithDetectors(gcp.NewDetector()),
resource.WithTelemetrySDK(),
)
if err != nil {
return fmt.Errorf("failed to create resource: %w", err)
}
// Create exporter pipeline
exporter, err := mexporter.New(
mexporter.WithMetricDescriptorTypeFormatter(agentMetricsPrefixFormatter),
mexporter.WithDisableCreateMetricDescriptors(),
)
if err != nil {
return fmt.Errorf("failed to create exporter: %w", err)
}
featureTrackingProvider := CreateFeatureTrackingMeterProvider(exporter, res)
err = InstrumentFeatureTrackingMetric(ctx, userUc, mergedUc, featureTrackingProvider.Meter("ops_agent/feature_tracking"))
if err != nil {
return fmt.Errorf("failed to instrument feature tracking: %w", err)
}
enabledReceiversProvider := CreateEnabledReceiversMeterProvider(exporter, res)
err = InstrumentEnabledReceiversMetric(ctx, mergedUc, enabledReceiversProvider.Meter("ops_agent/self_metrics"))
if err != nil {
return fmt.Errorf("failed to instrument enabled receivers: %w", err)
}
defer func() {
if serr := featureTrackingProvider.Shutdown(ctx); serr != nil {
myStatus, ok := status.FromError(serr)
if !ok && myStatus.Code() == codes.Unknown {
log.Print(serr)
} else if err == nil {
err = fmt.Errorf("failed to shutdown meter provider: %w", serr)
}
}
if serr := enabledReceiversProvider.Shutdown(ctx); serr != nil {
myStatus, ok := status.FromError(serr)
if !ok && myStatus.Code() == codes.Unknown {
log.Print(serr)
} else if err == nil {
err = fmt.Errorf("failed to shutdown meter provider: %w", serr)
}
}
}()
timer := time.NewTimer(10 * time.Second)
for {
select {
case <-timer.C:
err := featureTrackingProvider.ForceFlush(ctx)
if err != nil {
log.Print(err)
}
err = enabledReceiversProvider.ForceFlush(ctx)
if err != nil {
log.Print(err)
}
case <-ctx.Done():
return nil
}
}
}