bitbucket.org/Aishee/synsec@v0.0.0-20210414005726-236fc01a153d/cmd/synsec/metrics.go (about) 1 package main 2 3 import ( 4 "fmt" 5 6 "bitbucket.org/Aishee/synsec/pkg/acquisition" 7 v1 "bitbucket.org/Aishee/synsec/pkg/apiserver/controllers/v1" 8 "bitbucket.org/Aishee/synsec/pkg/csconfig" 9 "bitbucket.org/Aishee/synsec/pkg/cwversion" 10 leaky "bitbucket.org/Aishee/synsec/pkg/leakybucket" 11 "bitbucket.org/Aishee/synsec/pkg/parser" 12 "bitbucket.org/Aishee/synsec/pkg/types" 13 "github.com/prometheus/client_golang/prometheus" 14 "github.com/prometheus/client_golang/prometheus/promhttp" 15 16 "net/http" 17 18 log "github.com/sirupsen/logrus" 19 ) 20 21 /*prometheus*/ 22 var globalParserHits = prometheus.NewCounterVec( 23 prometheus.CounterOpts{ 24 Name: "cs_parser_hits_total", 25 Help: "Total events entered the parser.", 26 }, 27 []string{"source"}, 28 ) 29 var globalParserHitsOk = prometheus.NewCounterVec( 30 prometheus.CounterOpts{ 31 Name: "cs_parser_hits_ok_total", 32 Help: "Total events were successfully parsed.", 33 }, 34 []string{"source"}, 35 ) 36 var globalParserHitsKo = prometheus.NewCounterVec( 37 prometheus.CounterOpts{ 38 Name: "cs_parser_hits_ko_total", 39 Help: "Total events were unsuccessfully parsed.", 40 }, 41 []string{"source"}, 42 ) 43 44 var globalBucketPourKo = prometheus.NewCounter( 45 prometheus.CounterOpts{ 46 Name: "cs_bucket_pour_ko_total", 47 Help: "Total events were not poured in a bucket.", 48 }, 49 ) 50 51 var globalBucketPourOk = prometheus.NewCounter( 52 prometheus.CounterOpts{ 53 Name: "cs_bucket_pour_ok_total", 54 Help: "Total events were poured in at least one bucket.", 55 }, 56 ) 57 58 var globalCsInfo = prometheus.NewGauge( 59 prometheus.GaugeOpts{ 60 Name: "cs_info", 61 Help: "Information about Synsec.", 62 ConstLabels: prometheus.Labels{"version": cwversion.VersionStr()}, 63 }, 64 ) 65 66 func registerPrometheus(config *csconfig.PrometheusCfg) { 67 if !config.Enabled { 68 return 69 } 70 if config.ListenAddr == "" { 71 log.Warningf("prometheus is enabled, but the listen address is empty, using '127.0.0.1'") 72 config.ListenAddr = "127.0.0.1" 73 } 74 if config.ListenPort == 0 { 75 log.Warningf("prometheus is enabled, but the listen port is empty, using '6060'") 76 config.ListenPort = 6060 77 } 78 79 defer types.CatchPanic("synsec/registerPrometheus") 80 /*Registering prometheus*/ 81 /*If in aggregated mode, do not register events associated to a source, keeps cardinality low*/ 82 if config.Level == "aggregated" { 83 log.Infof("Loading aggregated prometheus collectors") 84 prometheus.MustRegister(globalParserHits, globalParserHitsOk, globalParserHitsKo, 85 acquisition.ReaderHits, globalCsInfo, 86 leaky.BucketsUnderflow, leaky.BucketsInstanciation, leaky.BucketsOverflow, 87 v1.LapiRouteHits, 88 leaky.BucketsCurrentCount) 89 } else { 90 log.Infof("Loading prometheus collectors") 91 prometheus.MustRegister(globalParserHits, globalParserHitsOk, globalParserHitsKo, 92 parser.NodesHits, parser.NodesHitsOk, parser.NodesHitsKo, 93 acquisition.ReaderHits, globalCsInfo, 94 v1.LapiRouteHits, v1.LapiMachineHits, v1.LapiBouncerHits, v1.LapiNilDecisions, v1.LapiNonNilDecisions, 95 leaky.BucketsPour, leaky.BucketsUnderflow, leaky.BucketsInstanciation, leaky.BucketsOverflow, leaky.BucketsCurrentCount) 96 97 } 98 http.Handle("/metrics", promhttp.Handler()) 99 if err := http.ListenAndServe(fmt.Sprintf("%s:%d", config.ListenAddr, config.ListenPort), nil); err != nil { 100 log.Warningf("prometheus: %s", err) 101 } 102 }