mirror of
https://github.com/openfaas/faas.git
synced 2025-06-09 16:56:47 +00:00
Add service RED metrics definitions
Partially fixes #532 by introducing two metrics that are supported by Kubernetes HPAv2 and RED metrics-style dashboards. Signed-off-by: Alex Ellis (VMware) <alexellis2@gmail.com>
This commit is contained in:
parent
5157e68479
commit
1cc767e898
@ -40,6 +40,9 @@ func (e *Exporter) Describe(ch chan<- *prometheus.Desc) {
|
|||||||
e.metricOptions.GatewayFunctionInvocation.Describe(ch)
|
e.metricOptions.GatewayFunctionInvocation.Describe(ch)
|
||||||
e.metricOptions.GatewayFunctionsHistogram.Describe(ch)
|
e.metricOptions.GatewayFunctionsHistogram.Describe(ch)
|
||||||
e.metricOptions.ServiceReplicasGauge.Describe(ch)
|
e.metricOptions.ServiceReplicasGauge.Describe(ch)
|
||||||
|
|
||||||
|
e.metricOptions.ServiceMetrics.Counter.Describe(ch)
|
||||||
|
e.metricOptions.ServiceMetrics.Histogram.Describe(ch)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Collect collects data to be consumed by prometheus
|
// Collect collects data to be consumed by prometheus
|
||||||
@ -54,6 +57,9 @@ func (e *Exporter) Collect(ch chan<- prometheus.Metric) {
|
|||||||
Set(float64(service.Replicas))
|
Set(float64(service.Replicas))
|
||||||
}
|
}
|
||||||
e.metricOptions.ServiceReplicasGauge.Collect(ch)
|
e.metricOptions.ServiceReplicasGauge.Collect(ch)
|
||||||
|
|
||||||
|
e.metricOptions.ServiceMetrics.Counter.Collect(ch)
|
||||||
|
e.metricOptions.ServiceMetrics.Histogram.Collect(ch)
|
||||||
}
|
}
|
||||||
|
|
||||||
// StartServiceWatcher starts a ticker and collects service replica counts to expose to prometheus
|
// StartServiceWatcher starts a ticker and collects service replica counts to expose to prometheus
|
||||||
|
@ -14,6 +14,13 @@ type MetricOptions struct {
|
|||||||
GatewayFunctionInvocation *prometheus.CounterVec
|
GatewayFunctionInvocation *prometheus.CounterVec
|
||||||
GatewayFunctionsHistogram *prometheus.HistogramVec
|
GatewayFunctionsHistogram *prometheus.HistogramVec
|
||||||
ServiceReplicasGauge *prometheus.GaugeVec
|
ServiceReplicasGauge *prometheus.GaugeVec
|
||||||
|
ServiceMetrics *ServiceMetricOptions
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServiceMetricOptions provides RED metrics
|
||||||
|
type ServiceMetricOptions struct {
|
||||||
|
Histogram *prometheus.HistogramVec
|
||||||
|
Counter *prometheus.CounterVec
|
||||||
}
|
}
|
||||||
|
|
||||||
// PrometheusHandler Bootstraps prometheus for metrics collection
|
// PrometheusHandler Bootstraps prometheus for metrics collection
|
||||||
@ -44,16 +51,40 @@ func BuildMetricsOptions() MetricOptions {
|
|||||||
[]string{"function_name"},
|
[]string{"function_name"},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// For automatic monitoring and alerting (RED method)
|
||||||
|
histogram := prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
||||||
|
Subsystem: "http",
|
||||||
|
Name: "request_duration_seconds",
|
||||||
|
Help: "Seconds spent serving HTTP requests.",
|
||||||
|
Buckets: prometheus.DefBuckets,
|
||||||
|
}, []string{"method", "path", "status"})
|
||||||
|
|
||||||
|
// Can be used Kubernetes HPA v2
|
||||||
|
counter := prometheus.NewCounterVec(
|
||||||
|
prometheus.CounterOpts{
|
||||||
|
Subsystem: "http",
|
||||||
|
Name: "requests_total",
|
||||||
|
Help: "The total number of HTTP requests.",
|
||||||
|
},
|
||||||
|
[]string{"status"},
|
||||||
|
)
|
||||||
|
|
||||||
|
serviceMetricOptions := &ServiceMetricOptions{
|
||||||
|
Counter: counter,
|
||||||
|
Histogram: histogram,
|
||||||
|
}
|
||||||
|
|
||||||
metricsOptions := MetricOptions{
|
metricsOptions := MetricOptions{
|
||||||
GatewayFunctionsHistogram: gatewayFunctionsHistogram,
|
GatewayFunctionsHistogram: gatewayFunctionsHistogram,
|
||||||
GatewayFunctionInvocation: gatewayFunctionInvocation,
|
GatewayFunctionInvocation: gatewayFunctionInvocation,
|
||||||
ServiceReplicasGauge: serviceReplicas,
|
ServiceReplicasGauge: serviceReplicas,
|
||||||
|
ServiceMetrics: serviceMetricOptions,
|
||||||
}
|
}
|
||||||
|
|
||||||
return metricsOptions
|
return metricsOptions
|
||||||
}
|
}
|
||||||
|
|
||||||
//RegisterMetrics registers with Prometheus for tracking
|
// RegisterExporter registers with Prometheus for tracking
|
||||||
func RegisterExporter(exporter *Exporter) {
|
func RegisterExporter(exporter *Exporter) {
|
||||||
prometheus.MustRegister(exporter)
|
prometheus.MustRegister(exporter)
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user