measure unknown statsd packets; support brubeck C type for counters
Costa Tsaousis (ktsaou) committed
Apr 28, 2017 at 22:00 UTC
d56d557f707dba1699790805a49606af6357114b
1 file changed
+11
-6
src/statsd.c
+11
-6
@@ -132,6 +132,7 @@ static struct statsd {
132
STATSD_INDEX histograms;
133
STATSD_INDEX meters;
134
STATSD_INDEX sets;
135
+ size_t unknown;
136
137
int enabled;
138
int update_every;
@@ -153,6 +154,7 @@ static struct statsd {
154
.private_charts = 0,
155
.max_private_charts = 200,
156
.max_private_charts_hard = 1000,
157
+ .unknown = 0,
158
159
.gauges = {
160
.name = "gauge",
@@ -431,7 +433,8 @@ static void statsd_process_metric(const char *name, const char *value, const cha
433
value, sampling);
434
break;
435
434
- case 'c':
436
+ case 'c': // etsy/statsd, but brubeck uses it as 'meter' - sorry brubeck, this is stupid
437
+ case 'C': // brubeck
438
statsd_process_counter(
439
statsd_find_or_add_metric(&statsd.counters, name),
440
value, sampling);
@@ -442,10 +445,12 @@ static void statsd_process_metric(const char *name, const char *value, const cha
445
statsd_process_timer(
446
statsd_find_or_add_metric(&statsd.timers, name),
447
value, sampling);
445
- else
448
+ else if (type[1] == '\0')
449
statsd_process_meter(
450
statsd_find_or_add_metric(&statsd.meters, name),
451
value, sampling);
452
+ else
453
+ statsd.unknown++;
454
break;
455
456
case 'h':
@@ -461,7 +466,7 @@ static void statsd_process_metric(const char *name, const char *value, const cha
466
break;
467
468
default:
464
- error("STATSD: metric '%s' with value '%s' specifies an unknown type '%s'.", name, value?value:"<unset>", type);
469
+ statsd.unknown++;
470
break;
471
}
472
}
@@ -582,7 +587,7 @@ static inline size_t statsd_process(char *buffer, size_t size, int require_newli
587
// statsd pollfd interface
588
589
#define STATSD_TCP_BUFFER_SIZE 16384 // minimize reads
585
-#define STATSD_UDP_BUFFER_SIZE 9000 // this should be up to MTU
590
+#define STATSD_UDP_BUFFER_SIZE 1500 // this should be up to MTU
591
592
struct statsd_tcp {
593
size_t size;
@@ -612,8 +617,6 @@ static void statsd_del_callback(int fd, void *data) {
617
618
// Receive data
619
static int statsd_rcv_callback(int fd, int socktype, void *data, short int *events) {
615
- (void)data;
616
-
620
switch(socktype) {
621
case SOCK_STREAM: {
622
struct statsd_tcp *d = (struct statsd_tcp *)data;
@@ -1150,6 +1153,7 @@ void *statsd_main(void *ptr) {
1153
RRDDIM *rd_events_meter = rrddim_add(st_events, "meters", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1154
RRDDIM *rd_events_histogram = rrddim_add(st_events, "histograms", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1155
RRDDIM *rd_events_set = rrddim_add(st_events, "sets", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1156
+ RRDDIM *rd_events_unknown = rrddim_add(st_events, "unknown", NULL, 1, 1, RRD_ALGORITHM_INCREMENTAL);
1157
1158
RRDSET *st_pcharts = rrdset_create_localhost(
1159
"netdata"
@@ -1203,6 +1207,7 @@ void *statsd_main(void *ptr) {
1207
rrddim_set_by_pointer(st_events, rd_events_meter, (collected_number)statsd.meters.events);
1208
rrddim_set_by_pointer(st_events, rd_events_histogram, (collected_number)statsd.histograms.events);
1209
rrddim_set_by_pointer(st_events, rd_events_set, (collected_number)statsd.sets.events);
1210
+ rrddim_set_by_pointer(st_events, rd_events_unknown, (collected_number)statsd.unknown);
1211
1212
rrddim_set_by_pointer(st_pcharts, rd_pcharts, (collected_number)statsd.private_charts);
1213