in exporter/collector/metrics.go [177:236]
func NewGoogleCloudMetricsExporter(
ctx context.Context,
cfg Config,
set exporter.Settings,
timeout time.Duration,
) (*MetricsExporter, error) {
SetUserAgent(&cfg, set.BuildInfo)
meter := set.TelemetrySettings.MeterProvider.Meter(scopeName, metricapi.WithInstrumentationVersion(Version()))
pointsExportedCounter, err := meter.Int64Counter(
"googlecloudmonitoring/point_count",
metricapi.WithDescription("Count of metric points written to Cloud Monitoring."),
metricapi.WithUnit("1"),
)
if err != nil {
return nil, err
}
exemplarAttachmentDropCount, err := meter.Int64Counter(
"googlecloudmonitoring/exemplar_attachments_dropped",
metricapi.WithDescription("Count of exemplar attachments dropped."),
metricapi.WithUnit("{attachments}"),
)
if err != nil {
return nil, err
}
obs := selfObservability{
log: set.TelemetrySettings.Logger,
meterProvider: set.TelemetrySettings.MeterProvider,
}
normalizer := normalization.NewDisabledNormalizer()
mExp := &MetricsExporter{
cfg: cfg,
obs: obs,
mapper: metricMapper{
obs: obs,
cfg: cfg,
normalizer: normalizer,
exemplarAttachmentDropCount: exemplarAttachmentDropCount,
},
// We create a buffered channel for metric descriptors.
// MetricDescritpors are asychronously sent and optimistic.
// We only get Unit/Description/Display name from them, so it's ok
// to drop / conserve resources for sending timeseries.
metricDescriptorC: make(chan *monitoringpb.CreateMetricDescriptorRequest, cfg.MetricConfig.CreateMetricDescriptorBufferSize),
mdCache: make(map[string]*monitoringpb.CreateMetricDescriptorRequest),
shutdownC: make(chan struct{}),
timeout: timeout,
pointsExportedCounter: pointsExportedCounter,
}
mExp.exportFunc = mExp.exportToTimeSeries
mExp.requestOpts = make([]func(*context.Context, requestInfo), 0)
if cfg.DestinationProjectQuota {
mExp.requestOpts = append(mExp.requestOpts, func(ctx *context.Context, ri requestInfo) {
*ctx = metadata.NewOutgoingContext(*ctx, metadata.New(map[string]string{"x-goog-user-project": strings.TrimPrefix(ri.projectName, "projects/")}))
})
}
return mExp, nil
}