Prometheus endpoint (#5256)

* Add prometheus collector and route

* dep ensure -add github.com/prometheus/client_golang/prometheus

* dep ensure -update github.com/golang/protobuf

* add metrics to reserved usernames

* add comment head in metrics package

* fix style imports

* add metrics settings

* add bearer token check

* mapping metrics configs

* fix lint

* update config cheat sheet

* update conf sample, typo fix
This commit is contained in:
Stanislav 2018-11-05 06:20:00 +03:00 committed by techknowlogick
parent 92fb89f6e1
commit 078c404c3b
112 changed files with 24693 additions and 3011 deletions

30
routers/metrics.go Normal file
View file

@ -0,0 +1,30 @@
// Copyright 2018 The Gitea Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package routers
import (
"github.com/prometheus/client_golang/prometheus/promhttp"
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/setting"
)
// Metrics validate auth token and render prometheus metrics
func Metrics(ctx *context.Context) {
if setting.Metrics.Token == "" {
promhttp.Handler().ServeHTTP(ctx.Resp, ctx.Req.Request)
return
}
header := ctx.Header().Get("Authorization")
if header == "" {
ctx.Error(401)
return
}
if header != "Bearer "+setting.Metrics.Token {
ctx.Error(401)
return
}
promhttp.Handler().ServeHTTP(ctx.Resp, ctx.Req.Request)
}

View file

@ -16,6 +16,7 @@ import (
"code.gitea.io/gitea/modules/context"
"code.gitea.io/gitea/modules/lfs"
"code.gitea.io/gitea/modules/log"
"code.gitea.io/gitea/modules/metrics"
"code.gitea.io/gitea/modules/options"
"code.gitea.io/gitea/modules/public"
"code.gitea.io/gitea/modules/setting"
@ -39,6 +40,7 @@ import (
"github.com/go-macaron/i18n"
"github.com/go-macaron/session"
"github.com/go-macaron/toolbox"
"github.com/prometheus/client_golang/prometheus"
"github.com/tstranex/u2f"
"gopkg.in/macaron.v1"
)
@ -788,6 +790,14 @@ func RegisterRoutes(m *macaron.Macaron) {
}
})
// prometheus metrics endpoint
if setting.Metrics.Enabled {
c := metrics.NewCollector()
prometheus.MustRegister(c)
m.Get("/metrics", routers.Metrics)
}
// Not found handler.
m.NotFound(routers.NotFound)
}