func newMetrics()

in metric.go [66:175]


func newMetrics(cfg Config) (metrics, error) {
	if cfg.MeterProvider == nil {
		cfg.MeterProvider = otel.GetMeterProvider()
	}
	meter := cfg.MeterProvider.Meter("github.com/elastic/go-docappender")
	ms := metrics{}
	histograms := []histogramMetric{
		{
			name:        "elasticsearch.buffer.latency",
			description: "The amount of time a document was buffered for, in seconds.",
			unit:        "s",
			p:           &ms.bufferDuration,
		},
		{
			name:        "elasticsearch.flushed.latency",
			description: "The amount of time a _bulk request took, in seconds.",
			unit:        "s",
			p:           &ms.flushDuration,
		},
	}

	for _, m := range histograms {
		err := newFloat64Histogram(meter, m)
		if err != nil {
			return ms, err
		}
	}

	counters := []counterMetric{
		{
			name:        "elasticsearch.bulk_requests.count",
			description: "The number of bulk requests completed.",
			p:           &ms.bulkRequests,
		},
		{
			name:        "elasticsearch.events.count",
			description: "Number of APM Events received for indexing",
			p:           &ms.docsAdded,
		},
		{
			name:        "elasticsearch.events.processed",
			description: "Number of APM Events flushed to Elasticsearch. Attributes are used to report separate counts for different outcomes - success, client failure, etc.",
			p:           &ms.docsIndexed,
		},
		{
			name:        "elasticsearch.events.retried",
			description: "The number of document retries. A single document may be retried more than once.",
			p:           &ms.docsRetried,
		},
		{
			name:        "elasticsearch.flushed.bytes",
			description: "The total number of bytes written to the request body",
			unit:        "by",
			p:           &ms.bytesTotal,
		},
		{
			name:        "elasticsearch.flushed.uncompressed.bytes",
			description: "The total number of uncompressed bytes written to the request body",
			unit:        "by",
			p:           &ms.bytesUncompressedTotal,
		},
		{
			name:        "elasticsearch.indexer.created",
			description: "The number of active indexer creations.",
			p:           &ms.activeCreated,
		},
		{
			name:        "elasticsearch.indexer.destroyed",
			description: "The number of times an active indexer was destroyed.",
			p:           &ms.activeDestroyed,
		},
		{
			name:        "docappender.blocked.add",
			description: "The number of times Add could block due to exhausted capacity in bulkItems channel",
			p:           &ms.blockedAdd,
		},
	}
	for _, m := range counters {
		err := newInt64Counter(meter, m)
		if err != nil {
			return ms, err
		}
	}

	upDownCounters := []upDownCounterMetric{
		{
			name:        "elasticsearch.events.queued",
			description: "the number of active items waiting in the indexer's queue.",
			p:           &ms.docsActive,
		},
		{
			name:        "elasticsearch.bulk_requests.available",
			description: "The number of bulk indexers available for making bulk index requests.",
			p:           &ms.availableBulkRequests,
		},
		{
			name:        "elasticsearch.bulk_requests.inflight",
			description: "The number of in-flight bulk requests being made to Elasticsearch.",
			p:           &ms.inflightBulkrequests,
		},
	}
	for _, m := range upDownCounters {
		err := newInt64UpDownCounter(meter, m)
		if err != nil {
			return ms, err
		}
	}

	return ms, nil
}