diff options
-rw-r--r-- | internal/serving/serverless/serverless.go | 3 | ||||
-rw-r--r-- | internal/serving/serverless/transport.go | 7 | ||||
-rw-r--r-- | metrics/metrics.go | 14 |
3 files changed, 23 insertions, 1 deletions
diff --git a/internal/serving/serverless/serverless.go b/internal/serving/serverless/serverless.go index a8d090da..a73affeb 100644 --- a/internal/serving/serverless/serverless.go +++ b/internal/serving/serverless/serverless.go @@ -5,6 +5,7 @@ import ( "gitlab.com/gitlab-org/gitlab-pages/internal/httperrors" "gitlab.com/gitlab-org/gitlab-pages/internal/serving" + "gitlab.com/gitlab-org/gitlab-pages/metrics" ) // Serverless is a servering used to proxy requests between a client and @@ -26,6 +27,8 @@ func New(function Function, cluster Cluster) serving.Serving { // ServeFileHTTP handle an incoming request and proxies it to Knative cluster func (s *Serverless) ServeFileHTTP(h serving.Handler) bool { + metrics.ServerlessRequests.Inc() + s.proxy.ServeHTTP(h.Writer, h.Request) return true diff --git a/internal/serving/serverless/transport.go b/internal/serving/serverless/transport.go index 5a0f5165..b7fabb13 100644 --- a/internal/serving/serverless/transport.go +++ b/internal/serving/serverless/transport.go @@ -5,6 +5,8 @@ import ( "net" "net/http" "time" + + "gitlab.com/gitlab-org/gitlab-pages/metrics" ) // Transport is a struct that handle the proxy connection round trip to Knative @@ -39,8 +41,11 @@ func NewTransport(cluster Cluster) *Transport { // RoundTrip performs a connection to a Knative cluster and returns a response func (t *Transport) RoundTrip(request *http.Request) (*http.Response, error) { + start := time.Now() + response, err := t.transport.RoundTrip(request) - // TODO add prometheus metrics for round trip timing + metrics.ServerlessLatency.Observe(time.Since(start).Seconds()) + return response, err } diff --git a/metrics/metrics.go b/metrics/metrics.go index b858e229..1e3a3328 100644 --- a/metrics/metrics.go +++ b/metrics/metrics.go @@ -46,6 +46,18 @@ var ( Name: "gitlab_pages_domains_source_cache_miss", Help: "The number of GitLab domains API cache misses", }) + + // ServerlessRequests measures the amount of serverless invocations + ServerlessRequests = prometheus.NewCounter(prometheus.CounterOpts{ + Name: "gitlab_pages_serverless_requests", + Help: "The number of total GitLab Serverless requests served", + }) + + // ServerlessLatency records serverless serving roundtrip duration + ServerlessLatency = prometheus.NewHistogram(prometheus.HistogramOpts{ + Name: "gitlab_pages_serverless_latency", + Help: "Serverless serving rountrip duration", + }) ) func init() { @@ -56,4 +68,6 @@ func init() { prometheus.MustRegister(DomainsConfigurationUpdateDuration) prometheus.MustRegister(DomainsSourceCacheHit) prometheus.MustRegister(DomainsSourceCacheMiss) + prometheus.MustRegister(ServerlessRequests) + prometheus.MustRegister(ServerlessLatency) } |