added chart to track the useful statsd metrics
Costa Tsaousis (ktsaou) committed
Apr 17, 2018 at 02:00 UTC
47ff87a0a1c1abd95eb4bb28630ea5deaf171b61
1 file changed
+36
-8
src/statsd.c
+36
-8
@@ -142,6 +142,7 @@ typedef struct statsd_index {
142
char *name; // the name of the index of metrics
143
size_t events; // the number of events processed for this index
144
size_t metrics; // the number of metrics in this index
145
+ size_t useful; // the number of useful metrics in this index
146
147
STATSD_AVL_TREE index; // the AVL tree
148
@@ -458,13 +459,8 @@ static inline int value_is_zinit(const char *value) {
459
return (value && *value == 'z' && *++value == 'i' && *++value == 'n' && *++value == 'i' && *++value == 't' && *++value == '\0');
460
}
461
461
-static inline int is_metric_checked(STATSD_METRIC *m) {
462
- return ((m->options & (STATSD_METRIC_OPTION_PRIVATE_CHART_CHECKED|STATSD_METRIC_OPTION_CHECKED_IN_APPS)) == (STATSD_METRIC_OPTION_PRIVATE_CHART_CHECKED|STATSD_METRIC_OPTION_CHECKED_IN_APPS));
463
-}
464
-
465
-static inline int is_metric_useful(STATSD_METRIC *m) {
466
- return (!is_metric_checked(m) || (m->options & (STATSD_METRIC_OPTION_PRIVATE_CHART_ENABLED|STATSD_METRIC_OPTION_USED_IN_APPS)) != 0);
467
-}
462
+#define is_metric_checked(m) (((m)->options & (STATSD_METRIC_OPTION_PRIVATE_CHART_CHECKED|STATSD_METRIC_OPTION_CHECKED_IN_APPS)) == (STATSD_METRIC_OPTION_PRIVATE_CHART_CHECKED|STATSD_METRIC_OPTION_CHECKED_IN_APPS))
463
+#define is_metric_useful(m) (!is_metric_checked(m) || ((m)->options & (STATSD_METRIC_OPTION_PRIVATE_CHART_ENABLED|STATSD_METRIC_OPTION_USED_IN_APPS)) != 0)
464
465
static inline void statsd_process_gauge(STATSD_METRIC *m, const char *value, const char *sampling) {
466
if(!is_metric_useful(m)) return;
@@ -2089,14 +2085,16 @@ static inline void statsd_flush_index_metrics(STATSD_INDEX *index, void (*flush_
2085
}
2086
2087
if(is_metric_useful(m)) {
2088
+ index->useful++;
2089
m->next_useful = index->first_useful;
2090
index->first_useful = m;
2091
}
2092
}
2093
2094
// flush all the useful metrics
2098
- for(m = index->first_useful; m ; m = m->next_useful)
2095
+ for(m = index->first_useful; m ; m = m->next_useful) {
2096
flush_metric(m);
2097
+ }
2098
}
2099
2100
@@ -2263,6 +2261,27 @@ void *statsd_main(void *ptr) {
2261
RRDDIM *rd_metrics_histogram = rrddim_add(st_metrics, "histograms", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2262
RRDDIM *rd_metrics_set = rrddim_add(st_metrics, "sets", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2263
2264
+ RRDSET *st_useful_metrics = rrdset_create_localhost(
2265
+ "netdata"
2266
+ , "statsd_useful_metrics"
2267
+ , NULL
2268
+ , "statsd"
2269
+ , NULL
2270
+ , "Useful metrics in the netdata statsd database"
2271
+ , "metrics"
2272
+ , "statsd"
2273
+ , "stats"
2274
+ , 132010
2275
+ , statsd.update_every
2276
+ , RRDSET_TYPE_STACKED
2277
+ );
2278
+ RRDDIM *rd_useful_metrics_gauge = rrddim_add(st_useful_metrics, "gauges", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2279
+ RRDDIM *rd_useful_metrics_counter = rrddim_add(st_useful_metrics, "counters", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2280
+ RRDDIM *rd_useful_metrics_timer = rrddim_add(st_useful_metrics, "timers", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2281
+ RRDDIM *rd_useful_metrics_meter = rrddim_add(st_useful_metrics, "meters", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2282
+ RRDDIM *rd_useful_metrics_histogram = rrddim_add(st_useful_metrics, "histograms", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2283
+ RRDDIM *rd_useful_metrics_set = rrddim_add(st_useful_metrics, "sets", NULL, 1, 1, RRD_ALGORITHM_ABSOLUTE);
2284
+
2285
RRDSET *st_events = rrdset_create_localhost(
2286
"netdata"
2287
, "statsd_events"
@@ -2456,6 +2475,7 @@ void *statsd_main(void *ptr) {
2475
2476
if(likely(hb_dt)) {
2477
rrdset_next(st_metrics);
2478
+ rrdset_next(st_useful_metrics);
2479
rrdset_next(st_events);
2480
rrdset_next(st_reads);
2481
rrdset_next(st_bytes);
@@ -2476,6 +2496,14 @@ void *statsd_main(void *ptr) {
2496
rrddim_set_by_pointer(st_metrics, rd_metrics_set, (collected_number)statsd.sets.metrics);
2497
rrdset_done(st_metrics);
2498
2499
+ rrddim_set_by_pointer(st_useful_metrics, rd_useful_metrics_gauge, (collected_number)statsd.gauges.useful);
2500
+ rrddim_set_by_pointer(st_useful_metrics, rd_useful_metrics_counter, (collected_number)statsd.counters.useful);
2501
+ rrddim_set_by_pointer(st_useful_metrics, rd_useful_metrics_timer, (collected_number)statsd.timers.useful);
2502
+ rrddim_set_by_pointer(st_useful_metrics, rd_useful_metrics_meter, (collected_number)statsd.meters.useful);
2503
+ rrddim_set_by_pointer(st_useful_metrics, rd_useful_metrics_histogram, (collected_number)statsd.histograms.useful);
2504
+ rrddim_set_by_pointer(st_useful_metrics, rd_useful_metrics_set, (collected_number)statsd.sets.useful);
2505
+ rrdset_done(st_useful_metrics);
2506
+
2507
rrddim_set_by_pointer(st_events, rd_events_gauge, (collected_number)statsd.gauges.events);
2508
rrddim_set_by_pointer(st_events, rd_events_counter, (collected_number)statsd.counters.events);
2509
rrddim_set_by_pointer(st_events, rd_events_timer, (collected_number)statsd.timers.events);