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  }