rename metrics and update metrics helps (#152)
* rename metrics and update metrics helps * add meta info about crowdsec Co-authored-by: erenJag <erenJag>
This commit is contained in:
parent
acc0960c17
commit
89c8d1a527
|
@ -103,22 +103,22 @@ func ShowPrometheus(url string) {
|
||||||
ival := int(fval)
|
ival := int(fval)
|
||||||
switch fam.Name {
|
switch fam.Name {
|
||||||
/*buckets*/
|
/*buckets*/
|
||||||
case "cs_bucket_create":
|
case "cs_bucket_created_total":
|
||||||
if _, ok := buckets_stats[name]; !ok {
|
if _, ok := buckets_stats[name]; !ok {
|
||||||
buckets_stats[name] = make(map[string]int)
|
buckets_stats[name] = make(map[string]int)
|
||||||
}
|
}
|
||||||
buckets_stats[name]["instanciation"] += ival
|
buckets_stats[name]["instanciation"] += ival
|
||||||
case "cs_bucket_count":
|
case "cs_buckets":
|
||||||
if _, ok := buckets_stats[name]; !ok {
|
if _, ok := buckets_stats[name]; !ok {
|
||||||
buckets_stats[name] = make(map[string]int)
|
buckets_stats[name] = make(map[string]int)
|
||||||
}
|
}
|
||||||
buckets_stats[name]["curr_count"] += ival
|
buckets_stats[name]["curr_count"] += ival
|
||||||
case "cs_bucket_overflow":
|
case "cs_bucket_overflowed_total":
|
||||||
if _, ok := buckets_stats[name]; !ok {
|
if _, ok := buckets_stats[name]; !ok {
|
||||||
buckets_stats[name] = make(map[string]int)
|
buckets_stats[name] = make(map[string]int)
|
||||||
}
|
}
|
||||||
buckets_stats[name]["overflow"] += ival
|
buckets_stats[name]["overflow"] += ival
|
||||||
case "cs_bucket_pour":
|
case "cs_bucket_poured_total":
|
||||||
if _, ok := buckets_stats[name]; !ok {
|
if _, ok := buckets_stats[name]; !ok {
|
||||||
buckets_stats[name] = make(map[string]int)
|
buckets_stats[name] = make(map[string]int)
|
||||||
}
|
}
|
||||||
|
@ -127,38 +127,38 @@ func ShowPrometheus(url string) {
|
||||||
}
|
}
|
||||||
buckets_stats[name]["pour"] += ival
|
buckets_stats[name]["pour"] += ival
|
||||||
acquis_stats[source]["pour"] += ival
|
acquis_stats[source]["pour"] += ival
|
||||||
case "cs_bucket_underflow":
|
case "cs_bucket_underflowed_total":
|
||||||
if _, ok := buckets_stats[name]; !ok {
|
if _, ok := buckets_stats[name]; !ok {
|
||||||
buckets_stats[name] = make(map[string]int)
|
buckets_stats[name] = make(map[string]int)
|
||||||
}
|
}
|
||||||
buckets_stats[name]["underflow"] += ival
|
buckets_stats[name]["underflow"] += ival
|
||||||
/*acquis*/
|
/*acquis*/
|
||||||
case "cs_reader_hits":
|
case "cs_reader_hits_total":
|
||||||
if _, ok := acquis_stats[source]; !ok {
|
if _, ok := acquis_stats[source]; !ok {
|
||||||
acquis_stats[source] = make(map[string]int)
|
acquis_stats[source] = make(map[string]int)
|
||||||
}
|
}
|
||||||
acquis_stats[source]["reads"] += ival
|
acquis_stats[source]["reads"] += ival
|
||||||
case "cs_parser_hits_ok":
|
case "cs_parser_hits_ok_total":
|
||||||
if _, ok := acquis_stats[source]; !ok {
|
if _, ok := acquis_stats[source]; !ok {
|
||||||
acquis_stats[source] = make(map[string]int)
|
acquis_stats[source] = make(map[string]int)
|
||||||
}
|
}
|
||||||
acquis_stats[source]["parsed"] += ival
|
acquis_stats[source]["parsed"] += ival
|
||||||
case "cs_parser_hits_ko":
|
case "cs_parser_hits_ko_total":
|
||||||
if _, ok := acquis_stats[source]; !ok {
|
if _, ok := acquis_stats[source]; !ok {
|
||||||
acquis_stats[source] = make(map[string]int)
|
acquis_stats[source] = make(map[string]int)
|
||||||
}
|
}
|
||||||
acquis_stats[source]["unparsed"] += ival
|
acquis_stats[source]["unparsed"] += ival
|
||||||
case "cs_node_hits":
|
case "cs_node_hits_total":
|
||||||
if _, ok := parsers_stats[name]; !ok {
|
if _, ok := parsers_stats[name]; !ok {
|
||||||
parsers_stats[name] = make(map[string]int)
|
parsers_stats[name] = make(map[string]int)
|
||||||
}
|
}
|
||||||
parsers_stats[name]["hits"] += ival
|
parsers_stats[name]["hits"] += ival
|
||||||
case "cs_node_hits_ok":
|
case "cs_node_hits_ok_total":
|
||||||
if _, ok := parsers_stats[name]; !ok {
|
if _, ok := parsers_stats[name]; !ok {
|
||||||
parsers_stats[name] = make(map[string]int)
|
parsers_stats[name] = make(map[string]int)
|
||||||
}
|
}
|
||||||
parsers_stats[name]["parsed"] += ival
|
parsers_stats[name]["parsed"] += ival
|
||||||
case "cs_node_hits_ko":
|
case "cs_node_hits_ko_total":
|
||||||
if _, ok := parsers_stats[name]; !ok {
|
if _, ok := parsers_stats[name]; !ok {
|
||||||
parsers_stats[name] = make(map[string]int)
|
parsers_stats[name] = make(map[string]int)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/crowdsecurity/crowdsec/pkg/acquisition"
|
"github.com/crowdsecurity/crowdsec/pkg/acquisition"
|
||||||
|
"github.com/crowdsecurity/crowdsec/pkg/cwversion"
|
||||||
leaky "github.com/crowdsecurity/crowdsec/pkg/leakybucket"
|
leaky "github.com/crowdsecurity/crowdsec/pkg/leakybucket"
|
||||||
"github.com/crowdsecurity/crowdsec/pkg/parser"
|
"github.com/crowdsecurity/crowdsec/pkg/parser"
|
||||||
"github.com/jamiealquiza/tachymeter"
|
"github.com/jamiealquiza/tachymeter"
|
||||||
|
@ -32,37 +33,45 @@ var (
|
||||||
/*prometheus*/
|
/*prometheus*/
|
||||||
var globalParserHits = prometheus.NewCounterVec(
|
var globalParserHits = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_parser_hits",
|
Name: "cs_parser_hits_total",
|
||||||
Help: "How many time an event entered the parser.",
|
Help: "Total events entered the parser.",
|
||||||
},
|
},
|
||||||
[]string{"source"},
|
[]string{"source"},
|
||||||
)
|
)
|
||||||
var globalParserHitsOk = prometheus.NewCounterVec(
|
var globalParserHitsOk = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_parser_hits_ok",
|
Name: "cs_parser_hits_ok_total",
|
||||||
Help: "How many time an event was successfully parsed.",
|
Help: "Total events were successfully parsed.",
|
||||||
},
|
},
|
||||||
[]string{"source"},
|
[]string{"source"},
|
||||||
)
|
)
|
||||||
var globalParserHitsKo = prometheus.NewCounterVec(
|
var globalParserHitsKo = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_parser_hits_ko",
|
Name: "cs_parser_hits_ko_total",
|
||||||
Help: "How many time an event was unsuccessfully parsed.",
|
Help: "Total events were unsuccessfully parsed.",
|
||||||
},
|
},
|
||||||
[]string{"source"},
|
[]string{"source"},
|
||||||
)
|
)
|
||||||
|
|
||||||
var globalBucketPourKo = prometheus.NewCounter(
|
var globalBucketPourKo = prometheus.NewCounter(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_bucket_pour_ko",
|
Name: "cs_bucket_pour_ko_total",
|
||||||
Help: "How many time an event was poured in no bucket.",
|
Help: "Total events were not poured in a bucket.",
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
var globalBucketPourOk = prometheus.NewCounter(
|
var globalBucketPourOk = prometheus.NewCounter(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_bucket_pour_ok",
|
Name: "cs_bucket_pour_ok_total",
|
||||||
Help: "How many time an event was poured in at least one bucket.",
|
Help: "Total events were poured in at least one bucket.",
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
var globalCsInfo = prometheus.NewGauge(
|
||||||
|
prometheus.GaugeOpts{
|
||||||
|
Name: "cs_info",
|
||||||
|
Help: "Information about Crowdsec.",
|
||||||
|
ConstLabels: prometheus.Labels{"version": cwversion.VersionStr()},
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -122,7 +131,7 @@ func registerPrometheus() {
|
||||||
log.Warningf("Loading prometheus collectors")
|
log.Warningf("Loading prometheus collectors")
|
||||||
prometheus.MustRegister(globalParserHits, globalParserHitsOk, globalParserHitsKo,
|
prometheus.MustRegister(globalParserHits, globalParserHitsOk, globalParserHitsKo,
|
||||||
parser.NodesHits, parser.NodesHitsOk, parser.NodesHitsKo,
|
parser.NodesHits, parser.NodesHitsOk, parser.NodesHitsKo,
|
||||||
acquisition.ReaderHits,
|
acquisition.ReaderHits, globalCsInfo,
|
||||||
leaky.BucketsPour, leaky.BucketsUnderflow, leaky.BucketsInstanciation, leaky.BucketsOverflow, leaky.BucketsCurrentCount)
|
leaky.BucketsPour, leaky.BucketsUnderflow, leaky.BucketsInstanciation, leaky.BucketsOverflow, leaky.BucketsCurrentCount)
|
||||||
http.Handle("/metrics", promhttp.Handler())
|
http.Handle("/metrics", promhttp.Handler())
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,40 +79,40 @@ All the counters are "since {{crowdsec.name}} start".
|
||||||
|
|
||||||
### Scenarios
|
### Scenarios
|
||||||
|
|
||||||
- `cs_bucket_create` : number of instantiation of each scenario
|
- `cs_bucket_created_total` : number of instantiation of each scenario
|
||||||
- `cs_bucket_overflow` : number of overflow of each scenario
|
- `cs_bucket_overflowed_total` : number of overflow of each scenario
|
||||||
- `cs_bucket_underflow` : number of underflow of each scenario (bucket was created but expired because of lack of events)
|
- `cs_bucket_underflowed_total` : number of underflow of each scenario (bucket was created but expired because of lack of events)
|
||||||
- `cs_bucket_pour` : number of event poured to each scenario with source as complementary key :
|
- `cs_bucket_poured_total` : number of event poured to each scenario with source as complementary key :
|
||||||
|
|
||||||
```
|
```
|
||||||
#2030 lines from `/var/log/nginx/access.log` were poured to `crowdsecurity/http-scan-uniques_404` scenario
|
#2030 lines from `/var/log/nginx/access.log` were poured to `crowdsecurity/http-scan-uniques_404` scenario
|
||||||
cs_bucket_pour{name="crowdsecurity/http-scan-uniques_404",source="/var/log/nginx/access.log"} 2030
|
cs_bucket_poured_total{name="crowdsecurity/http-scan-uniques_404",source="/var/log/nginx/access.log"} 2030
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
### Parsers
|
### Parsers
|
||||||
- `cs_node_hits` : how many time an event from a specific source was processed by a parser node :
|
- `cs_node_hits_total` : how many time an event from a specific source was processed by a parser node :
|
||||||
|
|
||||||
```
|
```
|
||||||
# 235 lines from `auth.log` were processed by the `crowdsecurity/dateparse-enrich` parser
|
# 235 lines from `auth.log` were processed by the `crowdsecurity/dateparse-enrich` parser
|
||||||
cs_node_hits{name="crowdsecurity/dateparse-enrich",source="/var/log/auth.log"} 235
|
cs_node_hits_total{name="crowdsecurity/dateparse-enrich",source="/var/log/auth.log"} 235
|
||||||
```
|
```
|
||||||
|
|
||||||
- `cs_node_hits_ko` : how many times an event from a specific was unsuccessfully parsed by a specific parser
|
- `cs_node_hits_ko_total` : how many times an event from a specific was unsuccessfully parsed by a specific parser
|
||||||
|
|
||||||
```
|
```
|
||||||
# 2112 lines from `error.log` failed to be parsed by `crowdsecurity/http-logs`
|
# 2112 lines from `error.log` failed to be parsed by `crowdsecurity/http-logs`
|
||||||
cs_node_hits_ko{name="crowdsecurity/http-logs",source="/var/log/nginx/error.log"} 2112
|
cs_node_hits_ko_total{name="crowdsecurity/http-logs",source="/var/log/nginx/error.log"} 2112
|
||||||
```
|
```
|
||||||
|
|
||||||
- `cs_node_hits_ok` : how many times an event from a specific source was successfully parsed by a specific parser
|
- `cs_node_hits_ok_total` : how many times an event from a specific source was successfully parsed by a specific parser
|
||||||
|
|
||||||
- `cs_parser_hits` : how many times an event from a source has hit the parser
|
- `cs_parser_hits_total` : how many times an event from a source has hit the parser
|
||||||
- `cs_parser_hits_ok` : how many times an event from a source was successfully parsed
|
- `cs_parser_hits_ok_total` : how many times an event from a source was successfully parsed
|
||||||
- `cs_parser_hits_ko` : how many times an event from a source was unsuccessfully parsed
|
- `cs_parser_hits_ko_total` : how many times an event from a source was unsuccessfully parsed
|
||||||
|
|
||||||
|
|
||||||
### Acquisition
|
### Acquisition
|
||||||
|
|
||||||
- `cs_reader_hits` : how many events were read from a specific source
|
- `cs_reader_hits_total` : how many events were read from a specific source
|
||||||
|
|
||||||
|
|
|
@ -61,8 +61,8 @@ const (
|
||||||
|
|
||||||
var ReaderHits = prometheus.NewCounterVec(
|
var ReaderHits = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_reader_hits",
|
Name: "cs_reader_hits_total",
|
||||||
Help: "How many lines where read.",
|
Help: "Total lines where read.",
|
||||||
},
|
},
|
||||||
[]string{"source"},
|
[]string{"source"},
|
||||||
)
|
)
|
||||||
|
|
|
@ -68,40 +68,40 @@ type Leaky struct {
|
||||||
|
|
||||||
var BucketsPour = prometheus.NewCounterVec(
|
var BucketsPour = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_bucket_pour",
|
Name: "cs_bucket_poured_total",
|
||||||
Help: "How many time an event was poured in this bucket.",
|
Help: "Total events were poured in bucket.",
|
||||||
},
|
},
|
||||||
[]string{"source", "name"},
|
[]string{"source", "name"},
|
||||||
)
|
)
|
||||||
|
|
||||||
var BucketsOverflow = prometheus.NewCounterVec(
|
var BucketsOverflow = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_bucket_overflow",
|
Name: "cs_bucket_overflowed_total",
|
||||||
Help: "How many time this bucket overflowed.",
|
Help: "Total buckets overflowed.",
|
||||||
},
|
},
|
||||||
[]string{"name"},
|
[]string{"name"},
|
||||||
)
|
)
|
||||||
|
|
||||||
var BucketsUnderflow = prometheus.NewCounterVec(
|
var BucketsUnderflow = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_bucket_underflow",
|
Name: "cs_bucket_underflowed_total",
|
||||||
Help: "How many time this bucket has underflowed.",
|
Help: "Total buckets underflowed.",
|
||||||
},
|
},
|
||||||
[]string{"name"},
|
[]string{"name"},
|
||||||
)
|
)
|
||||||
|
|
||||||
var BucketsInstanciation = prometheus.NewCounterVec(
|
var BucketsInstanciation = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_bucket_create",
|
Name: "cs_bucket_created_total",
|
||||||
Help: "How many time this bucket was instanciated.",
|
Help: "Total buckets were instanciated.",
|
||||||
},
|
},
|
||||||
[]string{"name"},
|
[]string{"name"},
|
||||||
)
|
)
|
||||||
|
|
||||||
var BucketsCurrentCount = prometheus.NewGaugeVec(
|
var BucketsCurrentCount = prometheus.NewGaugeVec(
|
||||||
prometheus.GaugeOpts{
|
prometheus.GaugeOpts{
|
||||||
Name: "cs_bucket_count",
|
Name: "cs_buckets",
|
||||||
Help: "How many instances of this bucket exist.",
|
Help: "Number of buckets that currently exist.",
|
||||||
},
|
},
|
||||||
[]string{"name"},
|
[]string{"name"},
|
||||||
)
|
)
|
||||||
|
|
|
@ -196,24 +196,24 @@ func ProcessStatics(statics []types.ExtraField, p *types.Event, clog *logrus.Ent
|
||||||
|
|
||||||
var NodesHits = prometheus.NewCounterVec(
|
var NodesHits = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_node_hits",
|
Name: "cs_node_hits_total",
|
||||||
Help: "How many time an event entered this node.",
|
Help: "Total events entered node.",
|
||||||
},
|
},
|
||||||
[]string{"source", "name"},
|
[]string{"source", "name"},
|
||||||
)
|
)
|
||||||
|
|
||||||
var NodesHitsOk = prometheus.NewCounterVec(
|
var NodesHitsOk = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_node_hits_ok",
|
Name: "cs_node_hits_ok_total",
|
||||||
Help: "How many time an event successfuly exited this node.",
|
Help: "Total events successfuly exited node.",
|
||||||
},
|
},
|
||||||
[]string{"source", "name"},
|
[]string{"source", "name"},
|
||||||
)
|
)
|
||||||
|
|
||||||
var NodesHitsKo = prometheus.NewCounterVec(
|
var NodesHitsKo = prometheus.NewCounterVec(
|
||||||
prometheus.CounterOpts{
|
prometheus.CounterOpts{
|
||||||
Name: "cs_node_hits_ko",
|
Name: "cs_node_hits_ko_total",
|
||||||
Help: "How many time an event unsuccessfuly exited this node.",
|
Help: "Total events unsuccessfuly exited node.",
|
||||||
},
|
},
|
||||||
[]string{"source", "name"},
|
[]string{"source", "name"},
|
||||||
)
|
)
|
||||||
|
|
Loading…
Reference in a new issue