in internal/tel/v2/tel.go [126:216]
func NewMetricRecorder(ctx context.Context, l debug.ContextLogger, cfg Config, opts ...option.ClientOption) MetricRecorder {
if !cfg.Enabled {
l.Debugf(ctx, "disabling built-in metrics")
return NullMetricRecorder{}
}
eopts := []cmexporter.Option{
cmexporter.WithCreateServiceTimeSeries(),
cmexporter.WithProjectID(cfg.ProjectID),
cmexporter.WithMonitoringClientOptions(opts...),
cmexporter.WithMetricDescriptorTypeFormatter(func(m metricdata.Metrics) string {
return "alloydb.googleapis.com/client/connector/" + m.Name
}),
cmexporter.WithMonitoredResourceDescription(monitoredResource, []string{
ProjectID, Location, Cluster, Instance, ClientID,
}),
}
exp, err := cmexporter.New(eopts...)
if err != nil {
l.Debugf(ctx, "built-in metrics exporter failed to initialize: %v", err)
return NullMetricRecorder{}
}
res := resource.NewWithAttributes(monitoredResource,
// The gcp.resource_type is a special attribute that the exporter
// transforms into the MonitoredResource field.
attribute.String("gcp.resource_type", monitoredResource),
attribute.String(ProjectID, cfg.ProjectID),
attribute.String(Location, cfg.Location),
attribute.String(Cluster, cfg.Cluster),
attribute.String(Instance, cfg.Instance),
attribute.String(ClientID, cfg.ClientID),
)
p := sdkmetric.NewMeterProvider(
sdkmetric.WithReader(sdkmetric.NewPeriodicReader(
exp,
// The periodic reader runs every 60 seconds by default, but set
// the value anyway to be defensive.
sdkmetric.WithInterval(DefaultExportInterval),
)),
sdkmetric.WithResource(res),
)
m := p.Meter(meterName, metric.WithInstrumentationVersion(cfg.Version))
mDialCount, err := m.Int64Counter(dialCount)
if err != nil {
_ = exp.Shutdown(ctx)
l.Debugf(ctx, "built-in metrics exporter failed to initialize dial count metric: %v", err)
return NullMetricRecorder{}
}
mDialLatency, err := m.Float64Histogram(dialLatency)
if err != nil {
_ = exp.Shutdown(ctx)
l.Debugf(ctx, "built-in metrics exporter failed to initialize dial latency metric: %v", err)
return NullMetricRecorder{}
}
mOpenConns, err := m.Int64UpDownCounter(openConnections)
if err != nil {
_ = exp.Shutdown(ctx)
l.Debugf(ctx, "built-in metrics exporter failed to initialize open connections metric: %v", err)
return NullMetricRecorder{}
}
mBytesTx, err := m.Int64Counter(bytesSent)
if err != nil {
_ = exp.Shutdown(ctx)
l.Debugf(ctx, "built-in metrics exporter failed to initialize bytes sent metric: %v", err)
return NullMetricRecorder{}
}
mBytesRx, err := m.Int64Counter(bytesReceived)
if err != nil {
_ = exp.Shutdown(ctx)
l.Debugf(ctx, "built-in metrics exporter failed to initialize bytes received metric: %v", err)
return NullMetricRecorder{}
}
mRefreshCount, err := m.Int64Counter(refreshCount)
if err != nil {
_ = exp.Shutdown(ctx)
l.Debugf(ctx, "built-in metrics exporter failed to initialize refresh count metric: %v", err)
return NullMetricRecorder{}
}
return &metricRecorder{
exporter: exp,
provider: p,
dialerID: cfg.ClientID,
mDialCount: mDialCount,
mDialLatency: mDialLatency,
mOpenConns: mOpenConns,
mBytesTx: mBytesTx,
mBytesRx: mBytesRx,
mRefreshCount: mRefreshCount,
}
}