mirror of
https://github.com/distribution/distribution.git
synced 2025-09-01 23:17:33 +00:00
Add prometheus proxy related metrics
Signed-off-by: Dimitar Kostadinov <dimitar.kostadinov@sap.com>
This commit is contained in:
@@ -3,6 +3,22 @@ package proxy
|
||||
import (
|
||||
"expvar"
|
||||
"sync/atomic"
|
||||
|
||||
prometheus "github.com/distribution/distribution/v3/metrics"
|
||||
"github.com/docker/go-metrics"
|
||||
)
|
||||
|
||||
var (
|
||||
// requests is the number of total incoming proxy request received for blob/manifest
|
||||
requests = prometheus.ProxyNamespace.NewLabeledCounter("requests", "The number of total incoming proxy request received", "type")
|
||||
// hits is the number of total proxy request hits for blob/manifest
|
||||
hits = prometheus.ProxyNamespace.NewLabeledCounter("hits", "The number of total proxy request hits", "type")
|
||||
// hits is the number of total proxy request misses for blob/manifest
|
||||
misses = prometheus.ProxyNamespace.NewLabeledCounter("misses", "The number of total proxy request misses", "type")
|
||||
// bytesPulled is the size of total bytes pulled from the upstream for blob/manifest
|
||||
bytesPulled = prometheus.ProxyNamespace.NewLabeledCounter("bytes_pulled", "The size of total bytes pulled from the upstream", "type")
|
||||
// bytesPushed is the size of total bytes pushed to the client for blob/manifest
|
||||
bytesPushed = prometheus.ProxyNamespace.NewLabeledCounter("bytes_pushed", "The size of total bytes pushed to the client", "type")
|
||||
)
|
||||
|
||||
// Metrics is used to hold metric counters
|
||||
@@ -21,29 +37,43 @@ type proxyMetricsCollector struct {
|
||||
}
|
||||
|
||||
// BlobPull tracks metrics about blobs pulled into the cache
|
||||
func (pmc *proxyMetricsCollector) BlobPull(bytesPulled uint64) {
|
||||
func (pmc *proxyMetricsCollector) BlobPull(bytes uint64) {
|
||||
atomic.AddUint64(&pmc.blobMetrics.Misses, 1)
|
||||
atomic.AddUint64(&pmc.blobMetrics.BytesPulled, bytesPulled)
|
||||
atomic.AddUint64(&pmc.blobMetrics.BytesPulled, bytes)
|
||||
|
||||
misses.WithValues("blob").Inc(1)
|
||||
bytesPulled.WithValues("blob").Inc(float64(bytes))
|
||||
}
|
||||
|
||||
// BlobPush tracks metrics about blobs pushed to clients
|
||||
func (pmc *proxyMetricsCollector) BlobPush(bytesPushed uint64) {
|
||||
func (pmc *proxyMetricsCollector) BlobPush(bytes uint64) {
|
||||
atomic.AddUint64(&pmc.blobMetrics.Requests, 1)
|
||||
atomic.AddUint64(&pmc.blobMetrics.Hits, 1)
|
||||
atomic.AddUint64(&pmc.blobMetrics.BytesPushed, bytesPushed)
|
||||
atomic.AddUint64(&pmc.blobMetrics.BytesPushed, bytes)
|
||||
|
||||
requests.WithValues("blob").Inc(1)
|
||||
hits.WithValues("blob").Inc(1)
|
||||
bytesPushed.WithValues("blob").Inc(float64(bytes))
|
||||
}
|
||||
|
||||
// ManifestPull tracks metrics related to Manifests pulled into the cache
|
||||
func (pmc *proxyMetricsCollector) ManifestPull(bytesPulled uint64) {
|
||||
func (pmc *proxyMetricsCollector) ManifestPull(bytes uint64) {
|
||||
atomic.AddUint64(&pmc.manifestMetrics.Misses, 1)
|
||||
atomic.AddUint64(&pmc.manifestMetrics.BytesPulled, bytesPulled)
|
||||
atomic.AddUint64(&pmc.manifestMetrics.BytesPulled, bytes)
|
||||
|
||||
misses.WithValues("manifest").Inc(1)
|
||||
bytesPulled.WithValues("manifest").Inc(float64(bytes))
|
||||
}
|
||||
|
||||
// ManifestPush tracks metrics about manifests pushed to clients
|
||||
func (pmc *proxyMetricsCollector) ManifestPush(bytesPushed uint64) {
|
||||
func (pmc *proxyMetricsCollector) ManifestPush(bytes uint64) {
|
||||
atomic.AddUint64(&pmc.manifestMetrics.Requests, 1)
|
||||
atomic.AddUint64(&pmc.manifestMetrics.Hits, 1)
|
||||
atomic.AddUint64(&pmc.manifestMetrics.BytesPushed, bytesPushed)
|
||||
atomic.AddUint64(&pmc.manifestMetrics.BytesPushed, bytes)
|
||||
|
||||
requests.WithValues("manifest").Inc(1)
|
||||
hits.WithValues("manifest").Inc(1)
|
||||
bytesPushed.WithValues("manifest").Inc(float64(bytes))
|
||||
}
|
||||
|
||||
// proxyMetrics tracks metrics about the proxy cache. This is
|
||||
@@ -70,4 +100,6 @@ func init() {
|
||||
pm.(*expvar.Map).Set("manifests", expvar.Func(func() interface{} {
|
||||
return proxyMetrics.manifestMetrics
|
||||
}))
|
||||
|
||||
metrics.Register(prometheus.ProxyNamespace)
|
||||
}
|
||||
|
Reference in New Issue
Block a user