forked from TrueCloudLab/frostfs-http-gw
[#77] Add metrics for HTTP endpoint status
Signed-off-by: Marina Biryukova <m.biryukova@yadro.com>
This commit is contained in:
parent
7d47e88e36
commit
dbc6804d27
3 changed files with 74 additions and 11 deletions
|
@ -10,9 +10,10 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
namespace = "frostfs_http_gw"
|
||||
stateSubsystem = "state"
|
||||
poolSubsystem = "pool"
|
||||
namespace = "frostfs_http_gw"
|
||||
stateSubsystem = "state"
|
||||
poolSubsystem = "pool"
|
||||
serverSubsystem = "server"
|
||||
)
|
||||
|
||||
const (
|
||||
|
@ -60,9 +61,14 @@ type StatisticScraper interface {
|
|||
Statistic() pool.Statistic
|
||||
}
|
||||
|
||||
type serverMetrics struct {
|
||||
endpointHealth *prometheus.GaugeVec
|
||||
}
|
||||
|
||||
type GateMetrics struct {
|
||||
stateMetrics
|
||||
poolMetricsCollector
|
||||
serverMetrics
|
||||
}
|
||||
|
||||
type stateMetrics struct {
|
||||
|
@ -87,15 +93,20 @@ func NewGateMetrics(p StatisticScraper) *GateMetrics {
|
|||
poolMetric := newPoolMetricsCollector(p)
|
||||
poolMetric.register()
|
||||
|
||||
serverMetric := newServerMetrics()
|
||||
serverMetric.register()
|
||||
|
||||
return &GateMetrics{
|
||||
stateMetrics: *stateMetric,
|
||||
poolMetricsCollector: *poolMetric,
|
||||
serverMetrics: *serverMetric,
|
||||
}
|
||||
}
|
||||
|
||||
func (g *GateMetrics) Unregister() {
|
||||
g.stateMetrics.unregister()
|
||||
prometheus.Unregister(&g.poolMetricsCollector)
|
||||
g.serverMetrics.unregister()
|
||||
}
|
||||
|
||||
func newStateMetrics() *stateMetrics {
|
||||
|
@ -192,6 +203,28 @@ func (m *poolMetricsCollector) updateRequestsDuration(node pool.NodeStatistic) {
|
|||
m.requestDuration.WithLabelValues(node.Address(), methodCreateSession).Set(float64(node.AverageCreateSession().Milliseconds()))
|
||||
}
|
||||
|
||||
func newServerMetrics() *serverMetrics {
|
||||
return &serverMetrics{
|
||||
endpointHealth: mustNewGaugeVec(appMetricsDesc[serverSubsystem][healthMetric]),
|
||||
}
|
||||
}
|
||||
|
||||
func (m serverMetrics) register() {
|
||||
prometheus.MustRegister(m.endpointHealth)
|
||||
}
|
||||
|
||||
func (m serverMetrics) unregister() {
|
||||
prometheus.Unregister(m.endpointHealth)
|
||||
}
|
||||
|
||||
func (m serverMetrics) MarkHealthy(endpoint string) {
|
||||
m.endpointHealth.WithLabelValues(endpoint).Set(float64(1))
|
||||
}
|
||||
|
||||
func (m serverMetrics) MarkUnhealthy(endpoint string) {
|
||||
m.endpointHealth.WithLabelValues(endpoint).Set(float64(0))
|
||||
}
|
||||
|
||||
// NewPrometheusService creates a new service for gathering prometheus metrics.
|
||||
func NewPrometheusService(log *zap.Logger, cfg Config) *Service {
|
||||
if log == nil {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue