mirror of
https://github.com/aceld/kis-flow.git
synced 2025-01-22 23:20:24 +08:00
123 lines
3.6 KiB
Go
123 lines
3.6 KiB
Go
package metrics
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/aceld/kis-flow/common"
|
|
"github.com/aceld/kis-flow/config"
|
|
"github.com/aceld/kis-flow/log"
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/prometheus/client_golang/prometheus/promhttp"
|
|
)
|
|
|
|
// KisMetrics kisFlow's Prometheus monitoring metrics
|
|
type KisMetrics struct {
|
|
// Total data quantity
|
|
DataTotal prometheus.Counter
|
|
// Total data processed by each Flow
|
|
FlowDataTotal *prometheus.GaugeVec
|
|
// Flow scheduling counts
|
|
FlowScheduleCntsToTal *prometheus.GaugeVec
|
|
// Function scheduling counts
|
|
FuncScheduleCntsTotal *prometheus.GaugeVec
|
|
// Function execution time
|
|
FunctionDuration *prometheus.HistogramVec
|
|
// Flow execution time
|
|
FlowDuration *prometheus.HistogramVec
|
|
}
|
|
|
|
var Metrics *KisMetrics
|
|
|
|
// RunMetricsService starts the Prometheus monitoring service
|
|
func RunMetricsService(serverAddr string) error {
|
|
|
|
// Register Prometheus monitoring route path
|
|
http.Handle(common.MetricsRoute, promhttp.Handler())
|
|
|
|
// Start HttpServer
|
|
err := http.ListenAndServe(serverAddr, nil) // Multiple processes cannot listen on the same port
|
|
if err != nil {
|
|
log.Logger().ErrorF("RunMetricsService err = %s\n", err)
|
|
}
|
|
|
|
return err
|
|
}
|
|
|
|
func InitMetrics() {
|
|
Metrics = new(KisMetrics)
|
|
|
|
// Initialize DataTotal Counter
|
|
Metrics.DataTotal = prometheus.NewCounter(prometheus.CounterOpts{
|
|
Name: common.CounterKisflowDataTotalName,
|
|
Help: common.CounterKisflowDataTotalHelp,
|
|
})
|
|
|
|
// Initialize FlowDataTotal GaugeVec
|
|
Metrics.FlowDataTotal = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: common.GamgeFlowDataTotalName,
|
|
Help: common.GamgeFlowDataTotalHelp,
|
|
},
|
|
// Label names
|
|
[]string{common.LabelFlowName},
|
|
)
|
|
|
|
// Initialize FlowScheduleCntsToTal GaugeVec
|
|
Metrics.FlowScheduleCntsToTal = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: common.GangeFlowScheCntsName,
|
|
Help: common.GangeFlowScheCntsHelp,
|
|
},
|
|
// Label names
|
|
[]string{common.LabelFlowName},
|
|
)
|
|
|
|
// Initialize FuncScheduleCntsTotal GaugeVec
|
|
Metrics.FuncScheduleCntsTotal = prometheus.NewGaugeVec(
|
|
prometheus.GaugeOpts{
|
|
Name: common.GangeFuncScheCntsName,
|
|
Help: common.GangeFuncScheCntsHelp,
|
|
},
|
|
// Label names
|
|
[]string{common.LabelFunctionName, common.LabelFunctionMode},
|
|
)
|
|
|
|
// Initialize FunctionDuration HistogramVec
|
|
Metrics.FunctionDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
|
|
Name: common.HistogramFunctionDurationName,
|
|
Help: common.HistogramFunctionDurationHelp,
|
|
Buckets: []float64{0.005, 0.01, 0.03, 0.08, 0.1, 0.5, 1.0, 5.0, 10, 100, 1000, 5000, 30000}, // Unit: ms, maximum half a minute
|
|
},
|
|
[]string{common.LabelFunctionName, common.LabelFunctionMode},
|
|
)
|
|
|
|
// Initialize FlowDuration HistogramVec
|
|
Metrics.FlowDuration = prometheus.NewHistogramVec(
|
|
prometheus.HistogramOpts{
|
|
Name: common.HistogramFlowDurationName,
|
|
Help: common.HistogramFlowDurationHelp,
|
|
Buckets: []float64{0.005, 0.01, 0.03, 0.08, 0.1, 0.5, 1.0, 5.0, 10, 100, 1000, 5000, 30000, 60000}, // Unit: ms, maximum 1 minute
|
|
},
|
|
[]string{common.LabelFlowName},
|
|
)
|
|
|
|
// Register Metrics
|
|
prometheus.MustRegister(Metrics.DataTotal)
|
|
prometheus.MustRegister(Metrics.FlowDataTotal)
|
|
prometheus.MustRegister(Metrics.FlowScheduleCntsToTal)
|
|
prometheus.MustRegister(Metrics.FuncScheduleCntsTotal)
|
|
prometheus.MustRegister(Metrics.FunctionDuration)
|
|
prometheus.MustRegister(Metrics.FlowDuration)
|
|
}
|
|
|
|
// RunMetrics starts the Prometheus metrics service
|
|
func RunMetrics() {
|
|
// Initialize Prometheus metrics
|
|
InitMetrics()
|
|
|
|
if config.GlobalConfig.EnableProm == true && config.GlobalConfig.PrometheusListen == true {
|
|
// Start Prometheus metrics service
|
|
go RunMetricsService(config.GlobalConfig.PrometheusServe)
|
|
}
|
|
}
|